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 |
| 31 |
Tags
- WhiteHatSchool
- WEB
- loose comparison
- type juggling
- php7.4
- Dreamhack
- 보안교육
- web-misconf-1
- cookie tampering
- cookie
- 웹해킹
- 보안
- file download vulnerability
- Cross Site Script
- path traversal
- cybersecurity
- 워게임
- KITRI
- 웹
- 한국정보기술연구원
- dev-tools
- 타입 변환 취약점
- 화이트해커
- WarGame
- webhacking
- session hijacking
- php
- 드림핵
- 화이트햇스쿨
- 정보보안
Archives
- Today
- Total
xmi1e-vir.log
[Dreamhack] wargame 'file-download-1' write-up 본문
🌱 Biginner
문제링크
File Download 취약점이 존재하는 웹 서비스입니다.
flag.py를 다운로드 받으면 플래그를 획득할 수 있습니다.
📌문제 파악
해당 문제에서 주어진 웹사이트는 기본적으로 메모를 업로드 할 수 있는 사이트이다.
메모를 업로드하고

업로드 한 메모를 읽을 수 있다

File Download Vulnerability(파일 다운로드 취약점)
문제를 풀기에 앞서 해당 문제의 이름인 파일 다운로드 취약점에 대해서 먼저 알아야 한다.
- 서버에 있는 파일을 다운로드 하는 기능을 활용해서 비정상적인 파일을 다운받게 하는 취약점
- 경로 이동 문자를 삽입해서 경로를 이동 → 비정상적인 파일(목표하고자 하는 파일)을 다운
- 즉, 정상적이지 않은 경로에서 개발자가 의도하지 않은 파일을 다운받는 것
- 공격 방법은 아래와 같다
→ 다운로드 경로에 드러난 정보의 양에 따라 사용가능 방법이 상이하다.
File Download Vulnerability(파일 다운로드 취약점) 공격 예시
📌풀이 방법
파일 다운로드 취약점을 활용해 문제를 풀기 위해서는 경로 이동 즉, Directory Traversal을 사용하여 flag.py가 존재하는 위치까지 이동해야한다.
가장 쉬운 방법은 상대경로 이동인 ..을 이용하는 것이지만, 이 문제에서는 이 행위가 아래와 같이 막혀있다.
if filename.find('..') != -1:
return render_template('upload_result.html', data='bad characters,,')
따라서 다른 방법을 찾아야한다.
.. 외에는 다른 방법이 크게 막혀 있지 않기 때문에 url 인코딩 방법이 가장 간단해보였다.
URL Encoding이란?
- 특수문자를 URL에서 안전하게 전송하기 위해 인코딩하는 방식
- 웹 브라우저나 서버는 URL에 사용할 수 없는 특수문자(공백, /, ?, &, 등)를 직접 사용하지 않고, 해당 문자의 ASCII 코드 값을 16진수로 변환 후 % 기호를 붙여 표현
- 예를들어 아래와 같음

보안 취약점과는 무슨 관계인가?
- Directory Traversal와 함께 자주 사용됨
- 서버 측에서 단순 문자열 검사를 통해 ../등을 필터링할때 이를 우회하기 위해서 사용함
- 차이점을 비교하면 아래와 같음
# 평문 기반 공격
http://target.com/download?file=../../../etc/passwd
# URL 인코딩 기반 공격
http://target.com/download?file=%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd
다시 문제 풀이로 돌아가서 URL 인코딩을 통해 flag.py가 있을법한 위치로 이동해야한다. 일단 바로 이전 디렉토리 부터 이동하는 동시에 해당 웹사이트가 메모를 읽어주는 기능을 가지고 있으므로 flag.py파일이 존재하면 출력될 수 있도록 뒤에 파일 이름도 붙여주어야 한다.
→ %2e%2e%2fflag.py

바로 플래그를 얻을 수 있었다.
* 참고문헌
[파일 다운로드 취약점]
[파일 다운로드 취약점 우회 방법 정리]
https://itinformation.tistory.com/46
https://chaeing.tistory.com/29
'WARGAME > WEB' 카테고리의 다른 글
| [Dreamhack] wargame 'pathtraversal' write-up (0) | 2025.09.07 |
|---|---|
| [Dreamhack] wargame 'Carve Party' write-up (0) | 2025.09.07 |
| [Dreamhack] wargame 'command-injection-1' write-up (0) | 2025.09.07 |
| [Dreamhack] wargame 'devtools-sources' write-up (0) | 2025.09.07 |
| [Dreamhack] wargame 'cookie' write-up (0) | 2025.09.07 |