file-download-1
File Download 취약점이 존재하는 웹 서비스입니다. flag.py를 다운로드 받으면 플래그를 획득할 수 있습니다. Reference Introduction of Webhacking
dreamhack.io

Filedownload 취약점이란?
임의의 문자나 주요 파일의 입력으로 임의의 위치에 있는 파일을 열람하거나 다운 가능한 취약점이다.
대표적인 예시로는 ../../../../etc/passwd가 있다.
대응방안은 다음과 같다.
1. 파일 경로를 감추어 사용자에게 노출시키지 않는다.
2. 경로 관련 필터링 로직을 구현한다.
3. 다운로드 시 권한 검증 과정을 거친다.
Fileupload 취약점이란?
파일 업로드 기능이 존재하는 웹 상에서 업로드 파일에 대한 필터링 조치가 미흡하여 서버에서 실행될 수 있는 스크립트 파일 ( asp, jsp, php 등 )이 업로드 되어 실행될 수 있는 취약점
대응방안은 다음과 같다.
1. 웹 서버 설정을 변경해 업로드 된 파일의 실행 권한을 차단한다.
2. 서버 측에서 실행될 수 있는 스크립트 파일 업로드를 제한한다.
3. 필터링 방식을 화이트리스트 방식으로 하여 우회 기법을 차단한다.
4. 파일 업로드 디렉터리 위치가 사용자들에게 노출되지 않도록 조치한다.
문제 화면

Upload My Memo 버튼을 누르게되면 아래와 같이 Filename과 Content를 입력할 수 있다.

소스코드

중간 filename 부분에 (..)을 필터링 해 'bad characters,,' 문구를 출력시키고 있다.

업로드 이후 업로드 된 것을 읽어오는 과정의 코드로 보인다.
문제는 try 부분에서 filename 부분을 그대로 받아들인다는 점이다.
exploit
../에서 필터링 된 ..만 우회가 가능하다면 문제 없이 flag.py의 값을 얻을 수 있을 것이라고 생각했다.
그래서 ../을 인코딩했다.
url 인코딩을 거치면 다음과 같다.
../ -> %2e%2e%2f
문제에서 flag.py에 플래그 값이 있다고 했으므로 디렉터리/flag.py형식으로 하나씩 값을 넣어보려고 했다.

문제 없이 업로드가 되었다.


업로드된 %2e%2e%2fflag.py를 클릭하니 플래그 값을 확인할 수 있었다.
'WriteUp > 드림핵' 카테고리의 다른 글
| File Vulnerability Advanced for linux (0) | 2024.05.27 |
|---|---|
| error based sql injection (0) | 2024.05.13 |
| command-injection-chatgpt (0) | 2024.04.12 |
| what-is-my-ip (0) | 2024.04.08 |
| simple_sqli (0) | 2024.04.01 |