xmi1e-vir.log

[Dreamhack] wargame 'file-download-1' write-up 본문

WARGAME/WEB

[Dreamhack] wargame 'file-download-1' write-up

eunee22 2025. 9. 7. 22:22
🌱 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진수로 변환  % 기호를 붙여 표현
  • 예를들어 아래와 같음

URL Encoding 예시

보안 취약점과는 무슨 관계인가?

  • 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://velog.io/@jungwoo343/%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EC%B7%A8%EC%95%BD%EC%A0%90

[파일 다운로드 취약점 우회 방법 정리]

https://itinformation.tistory.com/46
https://chaeing.tistory.com/29