본문 바로가기

WriteUp/드림핵

file-download-1

 

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를 입력할 수 있다.

 

Upload My Memo

 

 

소스코드

upload_memo()

 

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

 

 

read_memo()

 

업로드 이후 업로드 된 것을 읽어오는 과정의 코드로 보인다.

문제는 try 부분에서 filename 부분을 그대로 받아들인다는 점이다.

 

 

exploit

../에서 필터링 된 ..만 우회가 가능하다면 문제 없이 flag.py의 값을 얻을 수 있을 것이라고 생각했다.

그래서 ../을 인코딩했다.

 

url 인코딩을 거치면 다음과 같다.

../ -> %2e%2e%2f

 

문제에서 flag.py에 플래그 값이 있다고 했으므로 디렉터리/flag.py형식으로 하나씩 값을 넣어보려고 했다.

첫 공격 시도

 

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

공격 성공

 

 

업로드된 %2e%2e%2fflag.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