壓倒
Ye0L
壓倒
Total
Home
Today
  • ByO (59)
    • 악성코드분석🍳 (10)
      • Android (2)
      • Windows (8)
    • 백준⌨ (1)
    • 개발💻 (14)
      • Python (14)
      • C (0)
    • AI (2)
      • ML (2)
      • DL (0)
    • Dreamhack (23)
      • Web hacking (20)
      • Reversing (3)
    • CTF (5)
      • Forensic (5)
    • Study (4)
      • Linux (2)
      • Web (2)

블로그 메뉴

  • 홈
  • 방명록
  • 깃허브😀
  • 티스토리 홈

공지사항

인기 글

태그

  • Crawling
  • dreamhack
  • Raccoon Stealer v2
  • [DigitalForensic]with CTF
  • PYTHON
  • CSRF
  • Background:Web Browser
  • 드림핵
  • forensic
  • APK 구조
  • Raccoon Stealer
  • 리버싱
  • ClientSide: XSS
  • reversing
  • 악성코드분석
  • 크롤링
  • web hacking
  • File Download Vulnerability
  • selenium
  • Background: Cookie & Session

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
壓倒

Ye0L

Study/Web

파일 업로드 및 다운로드 취약점(File Upload and Download Vulnerability)

2023. 2. 2. 22:37
해당 포스팅은 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. .jsp, .asp 의 확장자 파일을 악성 파일 업로드에 사용할까? 웹 서버는 특정 정규식을 통해 php와 같은 파일의 핸들링을 지원한다. 그렇기 때문에 php 확장자가 업로드될 경우 웹 서버는 php 파일을 실행하고 그 결과를 반환하게 된다. 이러한 이유로 악성 php 파일을 업로드하여 웹 서버에서 실행되게 한 후 원하는 행위를 수행할 수 있도록 한다.

php와 비슷한 파일 이외에도 html 파일에 악의적인 스크립트를 작성하여 업로드 한다면 브라우저는 이를 HTML로 해석하여 XSS 공격으로 이어질 수 있다.

파일 업로드 취약점 공격의 목적

파일 업로드 취약점 공격의 경우 직접적인 데이터베이스의 공격이 불가능하기 때문에 보통 웹 쉘을 통해 권한을 획득하고 데이터베이스에 쿼리를 통해 원하는 정보를 유출하거나 웹 서버에 침투한 후 내부 시스템 정보를 획득한 후 직접적인 연결 성립에 목적이 있다.

데이터 베이스에 쿼리 질의를 통한 정보 유출(출처 : 보안 프로젝트)
시스템 정보 탈취 후 직접적인 연결 성립(출처 : 보안 프로젝트)

파일 업로드 취약점 대응 방안

파일 업로드 취약점의 가장 좋은 대응 방안은 확장자 검증을 할 때 블랙 리스트 기반이 아닌 화이트 리스트 기반으로 이루어져야하며 서버 사이드 스크립트에서 검증해야한다.

파일 다운로드 취약점(File Download Vulnerability)


정의

웹 서비스를 통해 서버의 파일 시스템에 존재하는 파일을 내려받을 때(다운로드할 때) 발생하는 보안 취약점으로 이용자가 다운로드 대상 파일의 이름을 임의로 정할 수 있을 때 발생한다.

만약, http://test.com/download?filename=파일명 에서 다운로드가 이루어진다고 가정할 때 http://test.com/download?filename=../../../etc/passwd 와 같은 파일 명을 가진 채 접근하면 상위 디렉토리에 접근이 가능해지고 파일 다운로드 취약점이 발생한다.

파일 다운로드 취약점 대응 방안
  1. 시퀀스 넘버나 1:1맵핑되는 키를 통해 파일 다운로드가 이루어지도록 구축하여 직접적인 경로 수정이 불가능하도록 해야 한다.
  1. 시스템에 존재하는 임의의 파일을 다운로드 불가능하게 설정한다.
  1. ../와 같은 문자열 필터링을 통해 상위 시스템 폴더에 접근하지 못하도록 해야 한다.

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗


Uploaded by N2T

'Study > Web' 카테고리의 다른 글

Burp Suite 설치 및 사용법  (0) 2023.02.02
    'Study/Web' 카테고리의 다른 글
    • Burp Suite 설치 및 사용법
    壓倒
    壓倒
    악성코드 분석, 개발, 백준 등 나의 일지

    티스토리툴바