파일 업로드 시 파일의 시그니처를 확인하는 필터링을 우회하여 업로드시키는 방법을 실습한다.
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 |
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
DVWA) File Upload (high)
해당 웹 서버의 필터링을 우회해서 웹쉘을 업로드해 볼 것이다.
무작정 웹쉘파일을 올리면 php 파일이기 때문에 jpeg나 png 파일이 아니라서 업로드되지 않았다는 메시지가 나온다.
그렇다면 웹쉘의 확장자를 png로 바꾸어서 올려보자
컨텐츠 타입에도 이미지로 들어가는 것을 볼 수 있다.
하지만 업로드를 성공하지 못하였다. 왜 그런 걸까?
답은 파일 시그니처에 있다. 위에서 설명하였듯이 파일 형식을 보여주는 것에는 확장자뿐만 아니라 시그니처가 있다.
지금 웹 쉘의 내용은 png이미지가 갖는 시그니쳐가 없으므로 웹 서버에서 png 이미지라고 생각하지 않는 것이다.
png의 파일 시그니처를 웹 쉘 파일에 추가하여 저장한 뒤 다시 업로드한다.
파일 업로드를 성공적으로 수행하였다. 하지만 이미지 파일이기 때문에 웹 쉘로서 이용할 수 없다.
우리는 파일의 확장자를 다시 php로 바꾸어야 한다.
그러기 위해 DVWA의 Command Injection 취약점을 이용한다.
|mv ../../hackable/uploads/b374k.png ../../hackable/uploads/b374k.php
mv 명령어를 이용해서 해당 파일의 이름을 다시 PHP로 수정한다.
전송하면 해당 페이지에서는 아무 반응이 없으나 직접 확인했을 때 파일명이 바뀌어있는 것을 알 수 있다.
클릭해보면 웹쉘이 정상적으로 실행되는 모습이다.
우리는 파일의 시그니처를 수정하여 파일 업로드 필터링을 우회하였고 성공적으로 웹 쉘을 업로드하였다.
'보안 이론 > 웹 보안' 카테고리의 다른 글
Command Injection - DVWA를 이용한 실습 (0) | 2022.09.16 |
---|---|
Blind SQL Injection - DB 데이터 값 추측 (0) | 2022.09.16 |
SQL Injection - 다른 DB 데이터 접근 (0) | 2022.09.14 |
SQL Injection - 오류 페이지를 이용한 공격 (0) | 2022.09.14 |
SQL Injection - 로그인 우회 (0) | 2022.09.14 |