FILE EXTENSION SIGNATURE

파일 시그니처 혹은 파일 매직 넘버라고 하는 이 값은 해당 파일이 어떤 파일인지를 인식하도록 하는 식별자입니다. 파일 업로드 시 HEX 값을 살펴보면 헤더와 푸터 부분에 아래와 같은 식별 값이 존재하는 것을 확인할 수 있는데요. 만약 파일 업로드 시 화이트 리스트 필터링 방식이 아니라 Content 값으로 서버 측에서 검증을 하고 있다면 파일을 식별하는 시그니처의 헤더 및 푸터 부분을 허용된 파일 확장자로 변조하여 우회할 수 있습니다. 식별 값을 변조하기 위해서는 MITM(Burp Suite, Fiddler) 혹은 HxD 툴을 사용할 수 있습니다.

File TypeHeader Signature (Hex)Footer Signature (Hex)
JPEGFF D8 FF E0 / FF D8 FF E8FF D9
GIF47 49 46 38 37 61 / 47 49 46 38 39 6100 3B
PNG89 50 4E 47 0D 0A 1A 0A49 45 4E 44 AE 42 60 82
PDF25 50 44 46 2D 31 2E25 25 45 4F 46
ZIP50 4B 03 0450 4B 05 06
ALZ41 4C 5A 0143 4C 5A 02
RAR52 61 72 21 1A 073D 7B 00 40 07 00

파일 확장자 및 컨텐트 타입(File Extension, Content-Type)

파일 업로드 시 Content-Type 으로 검증하고 있다면 요청 패킷의 Content-Type 을 허용된 값으로 변조하여 쉽게 우회가 가능하며, 확장자 검증 시 블랙 리스트 필터링이 적용되어 있다면 금지된 확장자와 동일한 의미를 갖는 확장자 중 차단되지 않은 확장자를 사용하는 방법으로 우회를 시도해 볼 수 있습니다.

파일 확장자Content-Type동일/유사 의미 확장자
.phptext/php.phtml.php3.php4.php5
.jsptext/html.jspx.jspf.jspt
.asptext/html.aspx.ascx.asa.asax
.batapplication/x-msdos-program.cmd
.htmltext/html.htm.xhtml.phtml
.jsapplication/javascript.mjs.cjs
.xmlapplication/xml.xsl.xsd.config
.jpg / .jpegimage/jpeg.jpe.jfif
.zipapplication/zip.tar.tar.gz.7z.rar
.doc / .docxapplication/msword.dot.dotx.docm
.ppt / .pptxapplication/vnd.ms-powerpoint.pot.potx.pps
.xls / .xlsxapplication/vnd.ms-excel.xlt.xltx.csv
.mp3audio/mpeg.mpeg3.mpg3
.mp4video/mp4.m4v.mkv
.wavaudio/wav.wave