본문 바로가기

wargame/WEBHACKING.kr

[WEBHACKING.kr]18

18

SQL INJECTION 문제! 드디어 배운 지식을 쓸 때가 찾아왔다!!



우선 소스코드를 확인해보았다. 별 거 없었다.



바로 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> #이 텍스트 상자의 name은 no
</table> 
</form> 
<a style=background:gray;color:black;width:100;font-size:9pt;><b>RESULT</b><br> 
<? 
if($_GET[no]) #no를 get 방식으로 받았을 때 존재한다면
{ 

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]")); 
#challaenge18_table에 id가 'guest'이고 no가 $_GET[no]인 행의 id를 select하고 그 열을 배열로 만들어라
if($q[0]=="guest") echo ("hi guest"); #만약 그 열의 값이 "guest"라면 "hi guest"를 출력하여라
if($q[0]=="admin") #만약 그 열의 값이 "admin"이면
{ 
@solve(); #solve함수를 실행하고
echo ("hi admin!"); #"hi admin"을 출력한다
} 

} 

?> 
</a> 
<br><br><a href=index.phps>index.phps</a> 
</cener> 
</body> 
</html> 




논리적 오류를 만들어내기 위해 no에 아무 값이나 넣고 1=1을 입력하였다. 공백은 필터링되기 때문에 %20으로 필터링하였다. 결과는 no hack.



아무 숫자나 넣으면서 결과를 보다가 1이 "hi guest"를 출력하는 것을 보고 id가 guest인 행의 no의 값은 1임을 알게되었다.(이외의 값은 당연하지만 알 수 없다)



생각해보니까 id가 guest인데 id가 guest일 때 실행되어 mysql_fetch_array를 거치면 값이 guest가 되면 안 되는 상황에 직면했다는 것을 알았다. 그래서 mysql은 or연산보다 and 연산이 우선되는 것을 생각하여 no을 1이 아닌 다른 값을 줘서 where A and B or C를 false로 주고 받은 C의 id로 admin을 출력하고자 하여 아래와 같이 실행해보았다. 생각해보니 의미 없는 행동이었다. no가 1이 아니면 무조건 admin이 되는 것이 아니기 때문이다.



그래서 아무 숫자나 넣다가 sql 예제에서처럼 guest의 no가 1이라면 admin의 no은 0아니면 2일거 같았다. 그래서 0일 때와 2일 때를 해보았다.



둘 다 안 돼서 공백의 필터링을 바꾸기로 했다. 그랬더니 성공하였다.



+) url에서는 공백의 필터링으로 %20을 써야한다고 어느 사이트에서 봤는데 정확하게 확인해보아야겠다

'wargame > WEBHACKING.kr' 카테고리의 다른 글

[WEB]URL 인코딩, 디코딩  (0) 2019.05.21
[WEBHACKING.kr]25  (0) 2019.05.21
[WEBHACKING.kr]20  (0) 2019.05.13
[WEBHACKING.kr]14  (0) 2019.05.06
[WEBHACKING.kr]12  (0) 2019.05.06