write-up/web

[webhacking.kr] Challenge 18

여니두 2019. 1. 5.



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

댓글