파일 다운로드 취약점(2)

강혜인·2025년 5월 29일

WEB_Hack

목록 보기
7/18

파일 다운로드 기능이 존재하는 웹 어플리케이션에서 파일 다운로드 시 파일의 경로 및 파일명을 파라미터로 받아 처리하는 경우 파일에 대한 접근 권한이 설정되어 있지 않다면 공격자가 파라미터를 조작해 환경 설정 파일, 웹 소스코드 파일, 데이터베이스 연동 파일 등을 다운로드 받을 수 있는 취약점

Directory Traversal 취약점, 파일 다운로드 취약점이라고 불리며, LFI(Local File Include)라고도 표현

해당 취약점이 존재할 경우 공격자는 이를 통해 시스템 중요 정보(계정 정보, 데이터베이스 정보)등을 탈취하여 시스템 침투에 중요한 정보를 줄 수 있음

주요 정보통신기반시설 취약점 진단 기준으로 23.파일 다운로드, 25.경로 추적에 해당

OWASP TOP 10 2021 A01.Broken Access Control에 해당

파일 다운로드 점검 체크 리스트


  • 웹 상에서 파일을 로컬 등에서 받아오는 파라미터에 Directory traversal이 가능한지 확인
  • URL 파라미터 뿐만 아니라 HTTP 헤더(ex, Cookies)에도 Directory Traversal 공격이 유효한지 확인
  • POST 메소드 HTTP Body 값에도 Directory Traversal 공격이 유효한지 확인
  • 수동으로 점검하기엔 점검할 규모가 클 경우 OWASP-ZAP, Acunetix, DotDotPwn 등을 통해 점검

→ 단, 시스템 리소스에 부하를 줄 수 있으니, 시스템 영향도 체크 필요

파일 다운로드 Cheat Sheet


예시
/../etc/passwd
Ly4uLy4uLy4uLy4uLy4uL2V0Yy9wYXNzd2QmYWY9cGFzc3dk
%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64&af=%70%61%73%73%77%64
/etc/passwd%00
../.htpasswd
..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd
..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fshadow
/............\winnt\win.ini
../../windows/win.ini
..../..../..../..../boot.ini
../../../../../../../etc/httpd/logs/acces_log
../../../../../../../etc/httpd/logs/acces.log
../../../../../../../etc/httpd/logs/error_log

파일 다운로드 실습(1)


1. PortSwigger Web Academy에 Directory Traversal Lab 접근. Directory Traversal이 가능한 파라미터 및 경로를 찾기 위해 페이지 소스 확인 시, 페이지 내 이미지를 로컬 경로에서 가져오는 것을 확인

2. burp suite 기능 중 Repeater 기능을 사용해 리눅스 시스템 중요 파일인 ‘/etc/passwd’를 스캔 시, 정상적으로 파일 가져오는 것으로 확인

Burp Suite Repeater 기능을 통해 스캔

💡

Repeater 기능은 개별 HTTP 및 WebSocket 메시지를 수동으로 조작 및 재발행하고 애플리케이션의 응답을 분석할 수 있다.

→ 수동으로 조작해 요청을 서버로 보내고, 서버에서 응답을 받을 수 있음

Directory Traversal 스캔 시, 정상적으로 파일 가져오는 것 확인

파일 다운로드 점검 방법


수동 점검

  • 웹 메인 페이지 또는 Local File을 Include 하는 인자값에 파일 다운로드 점검 진행
  • 수동으로 점검 시, Cheat Sheet를 대입해 점검 진행

자동화 도구를 통한 점검

  • 자동화 도구(ex: Burp Suite Pro, Acunetix 등)를 사용해 점검하고자 하는 사이트에 파일 다운로드 취약 여부 점검
  • 수동으로 점검할 경우 많은 시간 소요가 되며, 취약점 미탐할 가능성이 높아 보통은 자동화 점검 도구를 통해 점검

파일 다운로드 대응 방안


시큐어 코딩을 통해 경로 조작 문자열을 필터링 진행

import os
from django.shortcuts import render

def get_info(request):
	request file = request.POST.get('request_file')
	(filename, file_ext) = os.path.splitext(request_file)
	file_ext = file_ext.lower()
	
	# 외부 입력값으로 받은 파일 이름은 검증해 사용
	if file_ext not in ['.txt', '.csv'];
		return render(request, '/error.html', {'error':'파일을 열 수 없습니다.'})
	
	# 파일 명에서 경로 조작 문자열을 필터링
	filename = filename.replace('.', ")
	filename = filename.replace('.', ") 
	filename = filename.replace('\\', ")
	
	try:
		with open(filename + file_ext) as f:
			data = f.read()
	except:
		return render(
			request, "/error.html", {"error": "파일이 존재하지 않거나 열 수 없는 파일 입니다.."}
		}

return render(request, '/success.html', {'data':data})	

중요 파일 및 디렉터리 접근 권한 정책 설립

  • 시스템 내 중요 파일 및 디렉터리 웹 권한의 사용자가 접근하지 못하도록 설정
$ cd/var/www/html //웹 루트 디렉토리로 이동

$ chmod 700 /etc/passwd //접근 할 필요가 없는 파일에 일반 사용자가 접근 못하도록 권한 설정

0개의 댓글