File Download Vulnerability란?
파일 다운로드 기능이 존재하는 웹 애플리케이션에서 파일 다운로드 시 파일 경로에 대한 미검증, 사용자의 권한 검증 미흡 등과 같은 부재로 인해 파일 업로드 과정에서 발생할 수 있는 취약점입니다.
메타 문자를 이용한 Path Traversal
파일을 다운로드하는 과정에서 프록시를 사용해 요청을 조작할 수 있는데, 이를 통해 파일의 이름을 아래와 같이 바꾸어 상위 디렉터리의 파일을 다운로드할 수 있습니다.
/../../../../etc/passwd
위와 같이 test.txt 파일을 다운로드할 때 BurpSuite의 Proxy Intercept를 On으로 설정한 후 다운로드 해주면 아래와 같은 요청이 가는 것을 가로챌 수 있습니다.
이때 파일 이름이 다운로드를 누른 파일의 이름으로 뜨는 것을 확인할 수 있는데 이 부분에 앞서 언급한 etc/passwd 내용을 넣어주고
Forward를 눌러주면
passwd 파일이 저장되는 것을 확인할 수 있습니다.
대응 방안
- 메타 문자 필터링
- basepath, basename 함수 사용
- 파일 이름과 1:1 맵핑되는 키 사용
메타 문자 필터링
다운로드 요청에 메타 문자가 포함되어 있을 경우 다운로드가 실행되지 않도록 하는 방법입니다.
if(strpos($filename, "/") !== false || strpos($filename, "\\") !== false || strpos($filename, "..") !== false){
header("location:../index.php");
exit();
}
basename 함수 사용
basename 함수는 경로가 포함된 파일의 마지막 이름 구성 요소를 반환하는 함수로 경로를 제외한 파일명만 반환할 수 있는 함수입니다.
$filename = basename($_GET['file']);
위와 같이 사용하여 파일의 이름만 반환되게 해 줍니다.
파일 이름과 1:1 맵핑되는 키 사용
파일을 업로드할 때 고유키를 부여하여 파일을 다운로드할 때에도 해당 고유키를 통해 다운로드하는 방법입니다.
'Web > Web Hacking' 카테고리의 다른 글
NoSQL Injection (0) | 2024.09.07 |
---|---|
XXE External Entities (0) | 2024.09.06 |
File Upload Vulnerability (0) | 2024.09.06 |
SQL Injection (1) (0) | 2024.09.06 |
XSS (Cross Site Scripting) (0) | 2024.09.06 |