소스는 다음과 같다
<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> | |||||||||||||||||||
id와 pw라는 이름은 hidden 타입으로 넘어간다! 이때, no에 1과 2를 넣으면 true가 나오고 (id와 pw에 상관없이) 즉
그래서 결과가 있으면 true, 결과가 없으면 false! 이제 blind sql injection을 할 것인데 where no=1 and length(id)=5 이런식으로 대입해서 id와 pw의 길이를 알아낸다! 길이를 알아낸 결과 다음과 같다
|
보통 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 |