Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- System
- 소프트웨어
- hacking
- 리버싱
- WarGame
- 시스템
- 소프트웨어보안
- 해킹
- dreamhack
- Web
- 네트워크
- reversing
- 알고리즘
- 웹해킹
- 워게임
- 네트워크보안
- 비박스
- 시스템해킹
- 순서도
- 모의해킹
- CodeEngn
- ftz
- 드림핵
- webhacking
- TCP
- Webhaking
- bee-box
- 웹
- XSS
- network
Archives
- Today
- Total
Without a Break
[Dreamhack] web-ssrf 본문

플래그는 /app/flag.txt에 있다는 것을 알 수 있다.

image viewer로 들어가면 url을 입력할 수 있다.

입력되어있는 url을 그대로 두고 view를 하면 이미지경로에 있는 dream.png를 보여준다.

사용자가 빈칸에 입력한 url이 "localhost"이거나 "127.0.0.1"일 경우, error.png를 화면에 띄운다.
즉, localhost, 127.0.0.1을 우회해서 url을 입력해야 함 => 0x7f000001 혹은 Localhost 사용

입력창에 localhost를 입력하니 error.png가 뜬 것을 확인할 수 있었다.

error.png가 뜬 상태에서 개발자 도구로 들어가면 error.png의 current source를 알아낼 수 있었다.

포트 번호는 1500~1800 중 하나를 랜덤으로 정한다.
=> 랜덤 포트 번호를 알아내야 한다.
즉, 1500~1800 포트 번호 중 error.png가 뜨지 않는 포트 번호가 local의 포트 번호라는 것을 알 수 있다.
따라서 error.png의 current source가 포함되지 않는 응답을 찾는 코드를 작성해 local 포트 번호를 찾아내어 local 포트 번호에서 출력하는 이미지의 current source를 찾아내면 된다.
import requests
url= "http://host3.dreamhack.games:10533/img_viewer"
for i in range(1500,1801):
data = {'url':'http://Localhost:'+str(i)+'/flag.txt'}
response = requests.post(url, data=data)
if "iVBORw" not in response.text:
print(response.text)
break
무차별 공격을 하는 코드를 작성하고 실행하면

local 포트 번호에서 출력하는 이미지의 current source가 출력된다.
이제 이 소스를 디코딩하면 플래그를 찾아낼 수 있다.

'Web > Wargame' 카테고리의 다른 글
[Dreamhack] proxy-1 (0) | 2022.11.10 |
---|---|
[Dreamhack] blind-command (0) | 2022.11.09 |
[Dreamhack] file-download-1 (0) | 2022.11.01 |
[Dreamhack] image-storage (0) | 2022.11.01 |
[Dreamhack] pathtraversal (0) | 2022.10.05 |