파일 업로드 취약점이란
정의
서버에 있는 파일을 다운로드 받는 과정에서 비정상적인 파일을 받는 것
공격 대상
파일 다운로드 기능 (다운로드 기존 경로의 강제 변조)
파일의 정상/비정상 구분
: 파일 다운로드 기능에서 지정되어 있는 경로에서 파일을 다운로드 받느냐가 정상 파일의 기준
공격
공격원리 분석
사용자로부터 파일명을 입력 받음
이때 공격자는 경로 이동문자가 삽입된 중요 파일 다운 시도
`../`는 개수를 맞추지 않아도 됨(서버 경로 모르니까 무작정 넣음)
해당 파일을 읽어서 불러오게 됨
공격 방법
1. 파일명만 받는 경우(소~중규모 웹 서비스)
경로 이동 문자 삽입
2. 일부경로 및 파일명 받음(중~대규모 웹 서비스)
1) 일부 경로 입력 받는 곳에 ../ 넣기
2) 파일명에 ../ 넣기
3. 전체 경로가 나오는 경우
공격자에게 엄청난 힌트가 된다
경로 구분 기호
윈도우) `\, /` (두 개 다 확인해야함)
유닉스, 리눅스) `/`
실습
경로를 찾는 방법
1. 입력값 검증이 있는지 `/, \, ./`를 통해 알아본다
`./`는 되고 `../`은 안 됨 => 소규모라서 upload 경로가 하나인 경우가 많다, 한 칸 올라갔더니 없을 경우
2. 해당 디렉토리가 웹 디렉토리라고 가정하고 index 파일을 찾아본다
(업로드 파일이 웹 디렉토리에 있는지가 중요, 다운로드 관점에선 소스를 받을 수도 있고 업로드는 웹쉘 업로드 가능성)
3. 로직, 경로 등 파악 가능, 서버 내 설정, 환경변수, 히스토리 등의 파일 받을 수 있음
개발자가 자주 실수하는 잘못된 대응방법
1. `./, ../`을 제거해버리기
없애면 우회 가능성이 생기므로 (../ 일때 ....//로 입력하면 ../가 제거돼서 ../가 됨)
에러창을 띄우거나 로직을 더이상 진행시키지 않도록 함
(??? original 파일과 real 파일?)
2. 윈도우 환경에서 /문자 제거
윈도우 환경에서 /문자 필터링(역슬래시도 있다는 것을 잊음)
대응방안
기능처리 분류
1. 전체경로 + 파일명(download.jsp?path=/webrrot/upload/&file=img.png)
보안상 좋지 않은 설계
2. 일부경로 + 파일명(일반적)(download.jsp?path=notice&file=img.png)
/, \, ..이 존재하면 에러처리하고 로직 중지
\\를 /로 모두 통일시키기
3. 파일명(download.jsp?file=img.png)
파일명에 대해서만 치환
4. 키 값(간접적 다운로드 방식, 디비에 한번 더 질의, 안전하나 비효율적)(download.jsp?idx=192)
prepareStatement가 되어 있지 않다면 sql인젝션 발생 가능
2~4 중에 선택하는 게 좋음
'Security > 취약점분석' 카테고리의 다른 글
| [BackDoor] 섹션9. 파라미터 변조 취약점 (0) | 2024.05.23 |
|---|---|
| [BackDoor] 섹션8. 파일 업로드 취약점 (0) | 2024.05.23 |
| [BackDoor] 섹션6. CSRF(XSRF) (0) | 2024.05.23 |
| [BackDoor] 섹션5. XSS (0) | 2024.05.23 |
| [BackDoor] 섹션4. XXE Injection (0) | 2024.05.23 |