본문 바로가기

보안 이론/웹 보안

파일 업로드 우회 - File Signature

반응형

파일 업로드 시 파일의 시그니처를 확인하는 필터링을 우회하여 업로드시키는 방법을 실습한다.


File Signature (= File Magic Number)

파일 시그니쳐란 파일의 내용을 해석하기 위해 포함하고 있는 고유한 값이다.

이 값을 통해 파일이 이미지인지 실행파일인지, 파일의 형식을 알아차릴 수 있다.

시그니처 값은 대부분 파일의 맨 앞에서부터 존재하며 맨 끝에도 있는 경우도 있다.

 

파일의 맨 앞에 있는 시그니처는 Header Signature, 맨 뒤는 Footer Signature라고 한다.

 

이러한 시그니처는 파일 형식별로 다르기 때문에 굉장히 많지만 우리는 자주 볼 수 있는 형식의 시그니처만 살펴본다.

파일 형식 시그니처 식별 문자
PNG 89 50 4E 47 0D 0A 1A 0A ‰PNG
JPG, JPEG FF D8 FF DB ÿØÿÛ
FF D8 FF EE ÿØÿî
FF D8 FF E0 ÿØÿà
FF D8 FF E0 00 10 4A 46 49 46 00 01 ÿØÿà       JFIF
FF D8 FF E1 xx xx 45 78 69 66 00 00 ÿØÿá       Exif
FF D8 FF E8 xx xx 53 50 49 46 46 00 ÿØÿè       SPIFF
BMP 42 4D BM
GIF 47 49 46 38 37 61
47 49 46 38 39 61
GIF87a
GIF89a
MP3 49 44 33 ID3
WAV 52 49 46 46 xx xx xx xx 57 41 56 45 RIFF      WAVE
AVI 52 49 46 46 xx xx xx xx 41 56 49 20 RIFF      AVI
PDF 25 50 44 46 2D %PDF-
ZIP, docx, pptx, xlsx, jar, apk 50 4B 03 04 PK
exe, dll, scr, sys 4D 5A MZ

그밖에 시그니처의 대한 정보는 아래 사이트를 참고하도록 한다.

https://en.wikipedia.org/wiki/List_of_file_signatures

 

List of file signatures - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search This is a list of file signatures, data used to identify or verify the content of a file. Such signatures are also known as magic numbers or Magic Bytes. Many file formats are not inte

en.wikipedia.org

 

DVWA) File Upload (high)

해당 웹 서버의 필터링을 우회해서 웹쉘을 업로드해 볼 것이다.

무작정 웹쉘파일을 올리면 php 파일이기 때문에 jpeg나 png 파일이 아니라서 업로드되지 않았다는 메시지가 나온다.

그렇다면 웹쉘의 확장자를 png로 바꾸어서 올려보자

 

컨텐츠 타입에도 이미지로 들어가는 것을 볼 수 있다.

 

하지만 업로드를 성공하지 못하였다. 왜 그런 걸까?

png파일(좌)와 확장자만 png로 바꾼 파일(우)의 hex값

답은 파일 시그니처에 있다. 위에서 설명하였듯이 파일 형식을 보여주는 것에는 확장자뿐만 아니라 시그니처가 있다. 

지금 웹 쉘의 내용은 png이미지가 갖는 시그니쳐가 없으므로 웹 서버에서 png 이미지라고 생각하지 않는 것이다.

png의 파일 시그니처를 웹 쉘 파일에 추가하여 저장한 뒤 다시 업로드한다.

파일 업로드를 성공적으로 수행하였다. 하지만 이미지 파일이기 때문에 웹 쉘로서 이용할 수 없다.

우리는 파일의 확장자를 다시 php로 바꾸어야 한다.

 

그러기 위해 DVWA의 Command Injection 취약점을 이용한다.

|mv ../../hackable/uploads/b374k.png ../../hackable/uploads/b374k.php

 

mv 명령어를 이용해서 해당 파일의 이름을 다시 PHP로 수정한다.

전송하면 해당 페이지에서는 아무 반응이 없으나 직접 확인했을 때 파일명이 바뀌어있는 것을 알 수 있다.

클릭해보면 웹쉘이 정상적으로 실행되는 모습이다.

 

우리는 파일의 시그니처를 수정하여 파일 업로드 필터링을 우회하였고 성공적으로 웹 쉘을 업로드하였다.

 

반응형


Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Visits
Today
Yesterday