해당 포스팅은 https://dreamhack.io/?obj=20 를 참고하여 공부 목적으로 작성하였습니다.
파일 업로드 취약점(File Upload Vulnerability)
정의 및 종류
파일 업로드 취약점은 말 그대로 웹 서비스(웹 서비스 첨부 파일, 환경 설정 미흡)를 통해 이용자의 파일을 서버의 시스템에 업로드하는 과정에서 발생하는 보얀 취약점으로 크게 Path Traversal
과 악성 파일 업로드
로 구분된다.
예시(Path Traversal)
Path Traversal
은 이용자가 업로드한 파일 이름을 그대로 사용할 경우 업로드 대상 디렉토리가 아닌 다른 디렉토리에 접근이 가능해져 발생하는 취약점이다. 예시를 살펴보자.
/fileupload
는 POST 요청을 받으면 클라이언트가 전송한 파일을 ./uploads/
에 저장한다. 만약 f.filename
가 ../와 같은 상위 디렉토리에 접근할 수 있는 이름이라면 upload/에 접근하는 것이 아니라 다른 디렉토리에 접근하게 되며 이러한 것을 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()
악성 파일 업로드
악성 파일 업로드는 서버 측에서 파일 자체의 검사를 진행하지 않거나 확장자 필터링이 진행되지 않아 .php
, .jsp
, .asp
의 확장자를 가진 파일을 업로드해서 실행되도록 하는 취약점이다.
php와 비슷한 파일 이외에도 html 파일에 악의적인 스크립트를 작성하여 업로드 한다면 브라우저는 이를 HTML로 해석하여 XSS 공격으로 이어질 수 있다.
파일 업로드 취약점 공격의 목적
파일 업로드 취약점 공격의 경우 직접적인 데이터베이스의 공격이 불가능하기 때문에 보통 웹 쉘을 통해 권한을 획득하고 데이터베이스에 쿼리를 통해 원하는 정보를 유출하거나 웹 서버에 침투한 후 내부 시스템 정보를 획득한 후 직접적인 연결 성립에 목적이 있다.


파일 업로드 취약점 대응 방안
파일 업로드 취약점의 가장 좋은 대응 방안은 확장자 검증을 할 때 블랙 리스트 기반이 아닌 화이트 리스트 기반으로 이루어져야하며 서버 사이드 스크립트에서 검증해야한다.
파일 다운로드 취약점(File Download Vulnerability)
정의
웹 서비스를 통해 서버의 파일 시스템에 존재하는 파일을 내려받을 때(다운로드할 때) 발생하는 보안 취약점으로 이용자가 다운로드 대상 파일의 이름을 임의로 정할 수 있을 때 발생한다.
만약, http://test.com/download?filename=파일명
에서 다운로드가 이루어진다고 가정할 때 http://test.com/download?filename=../../../etc/passwd
와 같은 파일 명을 가진 채 접근하면 상위 디렉토리에 접근이 가능해지고 파일 다운로드 취약점이 발생한다.
파일 다운로드 취약점 대응 방안
시퀀스 넘버
나 1:1맵핑되는 키를 통해 파일 다운로드가 이루어지도록 구축하여 직접적인 경로 수정이 불가능하도록 해야 한다.
시스템에 존재하는 임의의 파일을 다운로드 불가능
하게 설정한다.
../와 같은 문자열 필터링
을 통해 상위 시스템 폴더에 접근하지 못하도록 해야 한다.
오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗
Uploaded by N2T
'Study > Web' 카테고리의 다른 글
Burp Suite 설치 및 사용법 (0) | 2023.02.02 |
---|