파일 업로드 취약점
사용자의 파일이 서버의 파일 시스템에 저장되어 처리된다는 이유로 인해 취약점이 발생
서버 파일 시스템에 원하는 파일 경로 또는 파일 명을 업로드할 수 있다면
악의적인 공격자는 웹 어플리케이션 또는 서버의 서비스가 참조하는 파일을 업로드하여 공격에 사용
CGI(Common Gateway Interface)
용자의 요청을 받은 서버가 동적인 페이지를 구성하기 위해
엔진에 요청을 보내고 엔진이 처리한 결과를 서버에게 반환하는 기능
ex)
웹 서버는 Apache, 웹 어플리케이션은 php를 사용하는 서버에
사용자가 요청을 보내면 Apache는 사용자의 요청을 해석하고,
사용자가 요청하는 리소스의 확장자가 .php와 같이
php엔진을 사용하기로 설정되어 있는 확장자라면
mod_php(CGI)를 통해 사용자의 요청을 php엔진이 처리 및 실행하도록 요청
php, jsp, asp 등과 같이 CGI를 통해 서비스를 하는 형태에서는
확장자를 통해 웹 어플리케이션 엔진에 요청 여부를 판단
Python의 flask, django 와 Nodejs의 express 등은
서버,CGI,웹 어플리케이션 등이 통합된 프레임워크
미리 라우팅 된 경로에만 접근이 가능하도록 설정하여 서비스
파일 업로드 방어기법
1. 파일 확장자 검사
Bypass)
.php.png
.php%00.png
.php;.png
2. 파일 MIME타입 검사
Bypass)
파일타입을 프록시에서
application/octect-stream -> image/jpeg 등
이미지 타입으로 변환
3. 파일 크기 검사
Online Webshell 사용
4. 파일이름 랜덤화
5. 업로드 파일 폴더 권한
파일 다운로드 취약점
사용자가 입력한 파일이름을 검증하지 않은 채 그대로 다운로드 시켜주는 행위
http://example.com/download?filename=docs.pdf
같이 다운로드가 된다면 Path travelsal을 이용해
http://example.com/download?filename=../../../../etc/passwd
이렇게 상위 경로의 파일도 다운 가능
파일 다운로드 방어기법
..와 /(\도) 의 적절한 필터링
'공격기법 > Web' 카테고리의 다른 글
Command Injection (0) | 2020.05.15 |
---|---|
SSRF(Server Side Request Forgery)공격 (0) | 2020.03.10 |
XSS와 CSRF의 차이 (0) | 2020.03.08 |
브루트 포스 공격 (0) | 2020.01.28 |
CSRF(Cross Site Request Forgery) (0) | 2019.11.15 |