본문 바로가기
웹 해킹/webhacking.kr

webhacking.kr 21번-BLIND SQL INJECTION

by sonysame 2018. 2. 12.

소스는 다음과 같다


<html>
<head>
<title>Challenge 21</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; color:black; font-size:9pt; }
</style>
</head>
<body><br><br>
<center>
<form method=get action=index.php>
<table border=0 align=center cellpadding=10 cellspacing=0>
<tr><td colspan=2 align=center><h1>BLIND SQL INJECTION</h1></td></tr>
<tr><td align=center><input name=no type=text size=30></td><td><input type=submit></td>
<input type=hidden name=id>
<input type=hidden name=pw>
</tr><tr><td colspan=2 align=center style=background:silver;color:black;font-size:9pt;>Result : <b>
</b></td></tr></table>
</form>
</center>
</body>
</html>


text는 no라는 이름으로 넘어가고!!

id와 pw라는 이름은 hidden 타입으로 넘어간다!


이때, no에 1과 2를 넣으면 true가 나오고 (id와 pw에 상관없이)
no에 나머지 값이 들어가면 모두 false가 나온다.


 no

id 

pw 

 1

 

 

 2

 

 


select * from table where no=$_GET[no]

그래서 결과가 있으면 true, 결과가 없으면 false!


이제 blind sql injection을 할 것인데


where no=1 and length(id)=5

이런식으로 대입해서 id와 pw의 길이를 알아낸다!


길이를 알아낸 결과 다음과 같다

no 

id 

pw 

5글자 

5글자 

5글자 

19글자 


보통 id는 guest또는 admin이므로

?no=1 and ascii(substr(id,1,1))=97 

이런식으로 ascii함수와 substr함수를 이용해 넣어본 결과

1의 id는 guest, 2의 id는 admin임을 알 수 있었다!


?no=2 and ascii(substr(pw,1,1))>=97

이런식으로 ascii함수와 substr함수를 이용해

admin의 패스워드를 알아냈다



'웹 해킹 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 41번  (0) 2018.02.12
webhacking.kr 37번  (0) 2018.02.12
webhacking.kr 12번  (0) 2018.02.12
webhacking.kr 10번  (0) 2018.02.12
webhacking.kr 61번-SQL INJECTION(column alias)  (0) 2018.02.12