CIDY
[Web_Hacking] stage8_File Vulnerability 본문
*File Upload Vulnerability
웹 서비스 이용자의 파일 -> 서버 파일 시스템으로 업로드하는 과정에서 발생하는 취약점이다. 업로드할 파일의 이름에 대한 결정권이 이용자에게 있을 때 발생할 수 있다.
이것도 이전의 Injection들과 마찬가지로 이용자의 입력을 그대로 이용하는 과정에서 발생하는 취약점인 것.
크게 Path Traversal 과 악성 파일 업로드가 있다.
->Path Traversal
파일 업로드 제약을 우회해 임의 디렉토리에 파일을 업로드 할 수 있는 취약점이다.
from flask import Flask, request
app = Flask(__name__)
@app.route('/fileUpload', methods = ['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
f.save("./uploads/" + f.filename)
return 'Upload Success'
else:
return """
<form action="/fileUpload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit"/>
</form>
"""
if __name__ == '__main__':
app.run()
위 코드는 Path Traversal 취약점이 있는 코드이다. 해당 엔드포인트에서는 ./upload/[업로드한_파일] 이렇게 저장한다. 근데 filename이 그대로라 내가 디렉토리를 조종할 수 있게 된다. (../같은걸로 상위 디렉토리에 파일 배치 가능)
위 코드에 파일을 정상적으로 업로드 할 경우, f.filename변수로 내가 업로드 한 파일 이름이 들어가고, upload디렉토리 하위에 내가 업로드한 파일이 배치된다.
그런데 만약 ../hack.py 라는 파일제목으로 업로드하게 될 경우
$ ls -lR
-rw-r--r-- 1 dreamhack staff 461 1 30 21:52 app.py
-rw-r--r-- 1 dreamhack staff 431 1 30 22:12 hack.py
drwxr-xr-x 3 dreamhack staff 96 1 30 21:31 uploads
./uploads:
total 8
-rw-r--r-- 1 dreamhack staff 13 1 30 21:31 test.txt
위와 같이 upload의 하위가 아닌 upload와 동등한 위치에 업로드 된 것을 볼 수 있다. ..로 한 디렉토리 위로 가서 그렇다.
여기서 만약 app.py를 덮어쓸 여건이 된다면 서버 재실행 시 원하는 .py파일을 실행시킬 수 있게 되는 것.
->악성 파일 업로드
웹 서버는 .php, .jsp, .asp과 같은 파일들을 CGI(Common Gateway Interface)로 실행하고, 해당 결과를 이용자에게 반환한다.
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
위 코드는 이용자가 요청한 파일 확장자가 정규표현식".+\.ph(p[3457]?|t|tml)$"을 만족하면 x-httpd-php로 핸들링하게 하는 Apache설정 파일이다.
x-httpd-php는 PHP엔진으로, 요청한 파일을 실행한 뒤 결과를 반환함 -> .php, .php3, .phtml이 위 정규표현식을 만족함 -> 공격자가 .php파일로 php소스 파일을 업로드하고, GET요청을 보낼 수 있으면 CGI가 해당 파일을 실행할 것임
웹 브라우저는 파일 확장자 및 응답의 Content-Type에 따라 요청을 처리하는 방식이 다양하다. 요청 파일의 확장자가 .html이거나, 반환된 Content-Type헤더가 text/html일 경우, 응답은 HTML엔진으로 처리된다.
(물론 .png, .jgp같은 이미지 확장자거나, Content-Type이 image/png일 경우는 이미지로 렌더링됨.)
공격자가 서버네 exploit.html을 업로드하고, 이에 접근하는 URL이 https://dreamhack.io/uploads/exploit.html이라면,
브라우저가 이를 HTML로 인식 -> exploit.html에 공격 스크립트가 있으면 XSS공격 가능
<?php
system("ls");
system($_GET[x]);
?>
.php확장자로 위와 같은 php코드를 업로드 할 수도 있고,
<script>alert(1);</script>
.html로 위와 같은 JS를 업로드해 실행시킬 수도 있다.
*File Download Vulnerability
서버 파일 시스템에 있는 파일을 다운로드하는 과정에서 발생하는 취약점. -> 이용자가 다운받을 파일 이름을 설정할 수 있을 때 발생
웹 서비스는 이용자가 파일을 다운받을 때, 특정 디렉토리의 파일만 접근 가능하도록 해야 한다. 근데 이것도 위의 업로드 취약점과 유사하게 Path Traversal을 이용할 수 있다.
위와 같은 URL패턴에서 주로 취약점이 발생할 수 있다고 한다.
'Hack > DreamHack(로드맵)' 카테고리의 다른 글
[Web_Hacking] stage8_문제풀이(file-download-1) (0) | 2022.07.30 |
---|---|
[Web_Hacking] stage8_문제풀이(image-storage) (0) | 2022.07.30 |
[Web_Hacking] stage7_문제풀이(command-injection-1) (0) | 2022.07.30 |
[Web_Hacking] stage7_Command Injection (0) | 2022.07.30 |
[Web_Hacking] stage6_문제풀이(Mango) (0) | 2022.07.30 |