본문 바로가기

공격기법/Web

파일 업로드/다운로드 취약점

파일 업로드 취약점

사용자의 파일이 서버의 파일 시스템에 저장되어 처리된다는 이유로 인해 취약점이 발생

서버 파일 시스템에 원하는 파일 경로 또는 파일 명을 업로드할 수 있다면

악의적인 공격자는 웹 어플리케이션 또는 서버의 서비스가 참조하는 파일을 업로드하여 공격에 사용

 

 

CGI(Common Gateway Interface)

용자의 요청을 받은 서버가 동적인 페이지를 구성하기 위해

엔진에 요청을 보내고 엔진이 처리한 결과를 서버에게 반환하는 기능

ex)

웹 서버는 Apache, 웹 어플리케이션은 php를 사용하는 서버에

사용자가 요청을 보내면 Apache는 사용자의 요청을 해석하고,

사용자가 요청하는 리소스의 확장자가 .php와 같이

php엔진을 사용하기로 설정되어 있는 확장자라면

mod_php(CGI)를 통해 사용자의 요청을 php엔진이 처리 및 실행하도록 요청

 

php, jsp, asp 등과 같이 CGI를 통해 서비스를 하는 형태에서는

확장자를 통해 웹 어플리케이션 엔진에 요청 여부를 판단

 

Python의 flask, djangoNodejs의 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