반응형

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 확장자를 디폴트로 실행 가능하게 설정하고 있다고 합니다.

출처 >> https://www.ibm.com/support/knowledgecenter/ko/SSAW57_9.0.0/com.ibm.websphere.nd.multiplatform.doc/ae/rweb_jsp_staticfile.html


[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. 랜덤 파일명 ; 업로드된 파일명을 난수화하여 유추 불가능하도록 한다.

반응형

+ Recent posts

반응형
반응형