<?
if($_POST[lid] && $_POST[lphone])
{
$q=@mysql_fetch_array(mysql_query("select id,lv from c59 where id='$_POST[lid]' and phone='$_POST[lphone]'"));
if($q[id])
{
echo("id : $q[id]<br>lv : $q[lv]<br><br>");
if($q[lv]=="admin")
{
@mysql_query("delete from c59");
@clear();
}
echo("<br><a href=index.php>back</a>");
exit();
}
}
if($_POST[id] && $_POST[phone])
{
if(strlen($_POST[phone])>=20) exit("Access Denied");
if(eregi("admin",$_POST[id])) exit("Access Denied");
if(eregi("admin|0x|#|hex|char|ascii|ord|from|select|union",$_POST[phone])) exit("Access Denied");
@mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");
}
?>
<html><head><title>Challenge 59</title></head><body>
<form method=post action=index.php>
<table border=1>
<tr><td>JOIN</td><td><input name=id></td><td><input name=phone></td><td><input type=submit></td></tr>
<tr><td>LOGIN</td><td><input name=lid></td><td><input name=lphone></td><td><input type=submit></td></tr>
</form>
</body></html>
lid, lphone에 대해서
select id, lv from c59 where id=lid and phone=lphone
id가 존재하면
id :id lv:lv
만약에 lv가 admin이면 delete from c59 &clear()
이 clear()부분에 도달해야 문제가 클리어!되는 것 같다!
*where 절이 없는 delete문은 테이블 또는 뷰에서 모든 행을 삭제한다!
id, phone에 대해서
phone의 글자수가 20이상이면 Access Denined
id에서 admin이라는 글자를 필터링! Access Denined
phone에서
admin, 0x, #, hex, char, ascii, ord ,from, select, union 필터링 Access Denied
다 통과하고 나면
insert into c59 values(id, phone, guest)
guest이 부분이 lv인것 같다!
문제는 이 부분이 admin이 되게끔 insert를 시켜야 한다!
insert into c59 values('$_POST[id]',$_POST[phone],'guest')
abc
1,'a%00dmin')
1) value값에 컬럼명을 써주는 방법 이용! 대신, 아이디에 admin이 오면 안되므로, reverse함수를 이용해준다!
아이디에 nimda
폰에 1, reverse(id)')--
2)
'웹 해킹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr 10번 (0) | 2018.02.12 |
---|---|
webhacking.kr 61번-SQL INJECTION(column alias) (0) | 2018.02.12 |
webhacking.kr 52번-HEADER INJECTION (0) | 2018.02.12 |
webhacking.kr 42번 (0) | 2018.02.12 |
webhacking.kr 36번 (0) | 2018.02.12 |