File Upload 공격

정의

공격자가 서버에 원하는 임의의 파일을 업로드하여 할 수 있는 공격

 

발생 원인

파일을 업로드 받을 때, 검증 및 검사를 안 하기 때문

 

예시)

프로필 사진 : 이미지 파일만 업로드 되어야 하는데, 아무 파일이나 업로드 되는 상황

 

발생 위치

파일을 업로드 할 수 있는 곳

 

예시) 게시판, 프로필 사진, 서류 제출하는 곳, 은행 앱(신분증 사진) 등등..

 

공격 시나리오

1. 서버 측 실행 파일 (웹쉘 공격) : 파일 업로드 공격은 주로 웹쉘 공격을 의미한다.

2. Phising : HTML 파일

3. Deface 공격

4. XSS

5. DoS


 

1. 서버 측 실행 파일 (웹쉘 공격)

인터넷 상에서 서버에 명령을 내릴 수 있다.

 

php web shell (쉘 획득)

<?php
	echo system($_GET['cmd']);
?>

 

cmd를 파라미터로 하여 명령어를 입력할 수 있는 코드

 

권한 상승을 위해 권한 상승 취약점이 있는 코드를 업로드하여 웹쉘에서 실행 가능하다.

 

 


 

웹쉘 공격의 핵심

1. 웹 서버 측 실행 코드를 업로드할 수 있어야 한다.

2. 업로드 된 파일의 경로를 알아야 한다.

 

예시) img 태그의 src 확인 (올라간 파일 우클릭 - 이미지 주소 복사)

 

업로드한 파일의 경로를 알아내는 이유

1. 알아야 요청을 하고 (링크로 접속)

2. 요청을 해야 실행할 수 있으니까

 

 


 

파일 업로드 대응 방안 및 방안별 우회 방법 (약한 버전)

 

1. 업로드 되는 파일을 검사하기 (제한하기)

MIME

header에 Content-Type : text/php 로 되어있는 정보를 보고 검사하는 케이스
ex) content-Type: text/php -> content-Type: image/png

 

우회 : burp proxy에서 바꿔쓸 수 있다.

 

2. 해당 업로드 디렉토리에서 실행을 못하게 하기

/files/avatars/~~~.php

여기에 있는 파일들은 실행권한을 제거함.

 

우회 : 파일 저장 경로 변조

파일을 업로드할 때, burp proxy에서 ../ 을 앞에 추가한다.

위 예시에선 avatars 에서는 실행 안 되지만, files에서 실행 가능하다.

 

3. php 확장자 사용 못하게 하기 (블랙리스트 기반 필터링)

 

우회1. PhP, pHp, pHP 등 대소문자 활용

우회2. .phtml, .php3, php5 등등 자매품 활용 (다른 확장자를 쓸 수 있다.

 

+ jsp : jspx, jsw 등등

 

 


 

가장 많이 사용하는 우회 방법

 

정상적인 이미지 다운로드 받은 후에, 그 파일을 hex editor로 오픈

hex값 중간이나 끝에다가 다음 문장을 쓴다.

 

<?php system($_GET['cmd']);?>

 

원리

File Signature

jpeg, png, pdf 등등.. 이 파일들은 그 파일이라는 의미로 시그니처(고유 헥사값)가 그 파일 맨 앞에 적혀있다.

정상적인 이미지 헥사값 중간이나 끝에 코드를 삽입하면, 그 파일의 구조도 정상적인 파일과 똑같이 보인다.

 

 

 

파일 업로드 대응 방안 강한 버전은 다음 시간에!!

 

+ Recent posts