늘모자란, 개발 :: [webhacking.kr] Challenge 45

늘모자란, 개발



별 희한한걸 많이 봤더니 sql injection이 맘이 편해지는것 같기도하다.

 <html>
<head>
<title>Challenge 45</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
id : <input name=id value=guest><br>
pw : <input name=pw value=guest><br>
<input type=submit>&nbsp;&nbsp;&nbsp;<input type=reset>
</form>
<?
if(time()<1256900400) exit();
?>

<!-- index.phps -->

<?

$pw="?????";

if($_GET[id] && $_GET[pw])
{

$_GET[id]=mb_convert_encoding($_GET[id],'utf-8','euc-kr');

if(eregi("admin",$_GET[id])) exit();
if(eregi("from",$_GET[id])) exit();
if(eregi("union",$_GET[id])) exit();
if(eregi("limit",$_GET[id])) exit();
if(eregi("union",$_GET[pw])) exit();
if(eregi("pw",$_GET[pw])) exit();
if(eregi("=",$_GET[pw])) exit();
if(eregi(">",$_GET[pw])) exit();
if(eregi("<",$_GET[pw])) exit();
if(eregi("from",$_GET[pw])) exit();
$data=@mysql_fetch_array(mysql_query("select id from members where id='$_GET[id]' and pw=md5('$_GET[pw]')"));


if($data)
{
echo("hi $data[0]<br><br>");

if($data[0]=="admin") @solve();
}


if(!$data)
{
echo("Wrong");
}

}

?>

</body>
</html>



필터링이 어마무시하다. 블라인드 인젝션을 걸려고 CHAR도 해보고 별에별 삽질을 다해봤는데 안된다.
소스를 무시하고 하던데로 삽질을 좀 했는데, 문제를 무시하지 말자ㅠㅠ 뜬금없이 인코딩이 등장하면 저걸 써먹어야할 것 아니니..

mb_convert_encoding를 일단 검색해보면 구글에 바로 취약점과 엮어서 검색된다.
내용인 즉슨 구버전 PHP의 function 자체 결함이 있다는것 같은데, 일단 고대로 따라해보기로 한다.
이래도 되나 싶을정도로 한방에 패스된다. 어이가 없다.

이대로 끝나면 너무 허무하니까, 왜 취약점이 발생하는지 소개를 해야겠다.
곧 마주하게 되겠지만, 요기만큼 잘 설명된곳을 찾질 못해서 링크를 하고 끝낸다. 여튼 멀티바이트가 문제다. 다국어... 스레기.. 한국어합시다..
2016/04/02 09:22 2016/04/02 09:22