write-up/web
[webhacking.kr] Challenge 18
index.phps를 눌러서 소스코드를 살펴보자.
.
.
.<html>
<head><title>Challenge 18</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; }
a { color:lightgreen; }
</style>
</head>
<body>
<br><br>
<center><h1>SQL INJECTION</h1>
<form method=get action=index.php>
<table border=0 align=center cellpadding=10 cellspacing=0>
<tr><td><input type=text name=no></td><td><input type=submit></td></tr>
</table>
</form>
<a style=background:gray;color:black;width:100;font-size:9pt;><b>RESULT</b><br>
<?
if($_GET[no])
{
if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack");
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]"));
if($q[0]=="guest") echo ("hi guest");
if($q[0]=="admin")
{
@solve();
echo ("hi admin!");
}
}
?>
</a>
<br><br><a href=index.phps>index.phps</a>
</cener>
</body>
</html>
.
.
.
php로 작성된 부분을 보자
* eregi() = php에서 http 메소드를 통해 들어오는 사용자의 입력 검증 또는 필터링을 위한 것.
* $_GET['] = GET 메소드로 변수값을 받는 것.
challenge18_table에서 id가 guest, no 변수가 $_GET[no] 인 id를 $q에 넣음
q가 admin이 되도록 만들자!
일단 no에 아무 값이나 넣어보다가...
일단 id=guest는 no=1 인게 틀림없다.
그러면 admin은 no가 0이나 2가 아닐...까.......?
"select id from challenge18_table where id='guest' and no=0 or no=2"
and는 or보다 우선순위가 높기 때문에
where (id='guest' and no=0) or no=2
이렇게 될 것이다.
따라서 no에 들어갈 값은 --> no=0 or no=2
그러나 공백문자는 필터링이 되기 때문에 공백을 우회해야 한다.
공백 우회 방법
1. TAB = %09 2. Line Feed %0a 3. Carriage Return %0d 4. 주석 /**/ 5. 괄호 () 6. + 7. \t, \n 등 . . .
여기서 %0a를 사용하여 우회해 보았다.
'write-up > web' 카테고리의 다른 글
[webhacking.kr] Challenge 14 (0) | 2019.09.22 |
---|---|
[webhacking.kr] Challenge 20 (2) | 2019.03.05 |
[webhacking.kr] Challenge 16 (0) | 2019.01.05 |
[webhacking.kr] Challenge 8 (0) | 2019.01.04 |
[webhacking.kr] Challenge 12 (0) | 2019.01.04 |
댓글