1. 개요
파일업로드 취약점 발견 시 파일 확장자 필터링을 하는 경우가 많은데, 이를 우회하는 방법(화이트리스트가 아닐 경우)을 정리한다.
2. 우회방법
#1. 대소문자 치환 ; .jsp → .Jsp / .jSp / .jsP / .JsP 등.....
#2. Null byte ; .jsp%00.jpg / .jsp%00(URL Encoding).jpg 등...
#3. 2중 파라미터 ; filename=test.jpg, filename=test.jsp
#4. MIME Type만 검증하는 경우 ; ContentType=image/jpeg 등...
#5. 실행가능한 타 확장자 ; .jsp → .jspx / .jsv / .jsw
IBM 서버인 경우, jsp외 jspx, jsv, jsw 확장자를 디폴트로 실행 가능하게 설정하고 있다고 합니다.
[jsv] Hello World 출력
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
<% out.println("Hello World"); %> // jsp 문법과 같음
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
[jspx] Hello World 출력
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http"//java.sun.com/jsp/jstl/core" version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
<jsp:directive.page import="java.util.*"/>
<jsp:directive.page import="java.io.*"/>
<jsp:directive.page import="sun.misc.BASE64Decoder"/>
<jsp:scriptlet><![CDATA[out.println("Hello World");]]>
</jsp:scriptlet>
</jsp:root> // jspx는 CDATA로 감싸줘야함
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
[jspx] Hello World 출력2 // import 삭제
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>
<jsp:scriptlet>
out.println("Hello World!!");
</jsp:scriptlet>
</jsp:root>
3. 대응방안
#1. 화이트리스트 ; 허용된 확장자 파일만 업로드 가능하도록 함.
#2. 업로드경로 ; 업로드 디렉터리를 웹루트 이외로 설정. 혹은 웹루트 하위의 서버 사이드 스크립트 실행 권한 제거
#3. 랜덤 파일명 ; 업로드된 파일명을 난수화하여 유추 불가능하도록 한다.
'Study > Web' 카테고리의 다른 글
[JEUS] 설정파일 (0) | 2019.04.30 |
---|---|
[JS] ISSAC 암호화 솔루션 복호화 (0) | 2019.04.01 |
[ASP] Sample Code + CMD Webshell (0) | 2019.01.08 |
[IIS] Microsoft IIS/8.5 - 틸드문자 취약점 (0) | 2019.01.04 |
[BurpSuite] handshake alert: unrecognized_name 문제 해결 (0) | 2018.06.07 |