힌트로 제시해준 소스이다.
=============================================================================
<head>
<title>Challenge 57</title>
</head>
<body>
<?
$secret_key="????";
if(time()>1309064400) exit("오후 2시에 공개됩니다.");
if($_POST[pw])
{
if($_POST[pw]==$secret_key)
{
mysql_query("delete from challenge57msg");
@solve();
exit();
}
}
if($_GET[msg] && $_GET[se])
{
if(eregi("from|union|select|and|or|not|&|\||benchmark",$_GET[se])) exit("Access Denied");
mysql_query("insert into challenge57msg(id,msg,pw,op) values('$_SESSION[id]','$_GET[msg]','$secret_key',$_GET[se])");
echo("Done<br><br>");
}
?>
<form method=get action=index.php>
<table border=0>
<tr><td>message</td><td><input name=msg size=50 maxlength=50></td></tr>
<tr><td>secret</td><td><input type=radio name=se value=1 checked>yes<br><br><input type=radio name=se value=0>no</td></tr>
<tr><td colspan=2 align=center><input type=submit></td></tr>
</table>
</form>
<form method=post action=index.php>
Secret key : <input name=pw><input type=submit><br><br>
</form>
<br><br><a href=indexbackupfile.phps>phps</a>
<br><br><br>
<center>Thanks to <a href=http://webhacking.kr/index.php?mode=information&id=blueh4g>BlueH4g</a></center>
<br><br><br>
</body>
</html>
=============================================================================
이런식으로 se에는 '(싱글 쿼터)로 묶여있지 않으므로 if문을 이용해서 timebased blind sql injection을 시도하면 풀린다.
sleep의 인자로 너무 큰 숫자를 주면 서버에 무리가 가니까 적당한 숫자를 인자로 주자.