파일 다운로드 취약점이란?
서버에 있는 파일에 다운로드하는 기능에 대해서 비정상적인 파일을 다운로드 받는 취약점이다.
공격 대상은 바로 파일 다운로드 기능이다.
정상적인 파일과 비정상적인 파일은 지정된 경로냐 지정된 경로가 아니냐에 따라 구분된다.
정상적인 파일은 지정된 경로에 있는 파일을 다운로드한다. 여기서 공격자는 경로 이동 문자를 삽입하여 경로를 변조하여 공격을 수행하고, 사용자에게 지정된 경로를 벗어난 비정상적인 파일을 다운로드하게 한다.
공격 원리 분석
- 서버는 사용자로부터 파일 경로를 입력받는다. 이때 공격자는 경로 이동 문자가 삽입된 비정상적인 경로를 입력하여 서버에서 중요한 파일을 다운로드 시도한다. →
../../etc/passwd
- 사용자 입력 값과 기존 경로가 조합된다. →
/wetroot/upload/ ../../etc/passwd
- 서버는 경로에 맞는 파일을 응답한다.
💡 파일 다운로드 취약점의 핵심 포인트는 기존 경로의 강제 변조이다.
공격 방법
CASE 1
- 정상 요청: http://www.victim.co.kr/download.jsp?filename=test.png
- 공격 요청: http://www.victim.co.kr/download.jsp?filename=`../../../../../etc/passwd`
→ 해당 케이스의 서버는 소규모의 서버일 가능성이 높다. 또한 /etc/passwd는 리눅스/유닉스 시스템의 경로를 나타낸다.
CASE 2
- 정상 요청: http://www.victim.co.kr/download.jsp?path=image&filename=test.png
- 공격 요청: http://www.victim.co.kr/download.jsp?path=`../../../../../etc`&filename=`passwd`
→ 파일 다운로드 경로를 path와 filename으로 분리하였기 때문에 중~대규모 서버일 가능성이 높다.
CASE 3
- 정상 요청: http://www.victim.co.kr/download.jsp?path=/jeus/webhome/test_con/app/upload&filename=test.png
- 공격 요청: http://www.victim.co.kr/download.jsp?path=`/etc`&filename=`passwd`
→ 전체 경로를 입력으로 받는 것은 매우 위험하다.
운영체제 별 경로 구분 기호
- Unix, Linux:/
- Windows:/
,\
윈도우 시스템의 경우 역 슬래시까지 대응해야 한다.
개발자 분들이 자주 실수하는 잘못된 대응 방안
1. 치환(제거)한다.
../
를 치환하여 아예 제거한다. 이는..././
,....//
과 같이 우회 포인트가 발생할 수 있다../
,../
를 치환하여 아예 제거한다. 이는.....///
과 같은 우회 포인트가 발생할 수 있다.
2. 윈도우 환경에서 / 문자 제거 & 필터링
\
(역 슬래쉬)로 우회할 수 있다.
→ 따라서 에러를 발생시키는 것이 더 옳은 대응 방안이다.
대응 방안
파일 다운로드 기능은 크게 4가지로 분류할 수 있다.
1. 전체 경로 + 파일명
2. 일부 경로 + 파일명
3. 파일명
4. 키 값
이 경우엔 prepareStatement 사용, 값을 바로 바인딩하지 않고 setter로 바인딩하는 등 SQL Injection에 대한 대응 방안도 함께 이루어져야 한다.
취약 환경 시큐어 코딩 적용 실습
$file = str_replace("\\", "/", $file);
if(strpos($file, "/") !== false || strpos($file, "..") !== false) {
echo "<script>alert('허용되지 않은 문자가 입력되었습니다.');history.back(-1);</script>";
exit();
}
'Security > Web Hacking' 카테고리의 다른 글
[WebHacking] 파라미터 변조 취약점 (0) | 2024.05.16 |
---|---|
[WebHacking] 파일 업로드 취약점 (1) | 2024.05.15 |
[WebHacking] CSRF(Cross-Site Request Forgery) 공격 (0) | 2024.05.13 |
[WebHacking] XSS 공격 (1) | 2024.04.28 |
[WebHacking] XXE Injection 공격 (0) | 2024.04.28 |