Burp로 파일 업로드 취약점 테스트 시나리오
Burp Suite를 사용해 파일 업로드 취약점을 안전하게 검증하는 절차와 방어 포인트를 예제 중심으로 설명한 절차
목차
개요
파일 업로드 기능은 편리함과 함께 보안 리스크를 동반한다. 잘못된 검증이나 설정으로 인해 악성 파일이 서버에 저장되거나 실행될 수 있다. 본문은 Burp Suite를 중심으로 파일 업로드 취약점을 합법적이고 안전하게 검증하는 시나리오를 다룬다. 테스트 전에는 명확한 권한과 범위가 있는지 확인해야 한다.
사전 준비
필수 조건
- 테스트 권한(문서화된 승인)
- Burp Suite(Interceptor, HTTP history 사용 가능)
- 테스트 대상의 업로드 엔드포인트 정보
- 안전한 샌드박스 또는 테스트 환경
검증 원칙
- 실제 악성 코드를 업로드하지 않음. 무해한 테스트 페이로드 사용
- 서비스 중단 위험 최소화
- 결과는 로그와 서버 응답을 중심으로 분석
테스트 시나리오 개요
목표는 서버의 파일 검증 로직과 저장/실행 경로를 확인하는 것임. 다음 항목을 중점적으로 살핀다.
- 확장자 검증 우회 가능성
- MIME 타입 검사와 실제 내용 불일치 여부
- 업로드된 파일의 저장 위치 및 접근 제어
- 업로드 후 파일 실행 가능성(예: 웹 루트 저장 여부)
구체적 절차
1. 인터셉트 설정 및 기본 업로드 캡처
브라우저에서 파일 업로드를 수행한 요청을 Burp로 가로채서 원본 요청을 확보함. 요청의 콘텐츠 타입과 파라미터 명 확인이 주요 목표임.
2. 콘텐츠 유형과 경계(boundary) 분석
multipart/form-data 형태일 때 각 파트의 이름과 헤더를 확인한다. 서버가 파일명을 기반으로 검증하는지, Content-Type 헤더를 신뢰하는지 판단한다.
3. 안전한 페이로드로 수정 검증
실제 악성 코드를 사용하지 않고 무해한 텍스트 파일로 여러 변형을 시도해 서버 반응을 분석한다. 예시 요청은 다음과 같다.
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryX
------WebKitFormBoundaryX
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
Hello, this is a harmless test file.
------WebKitFormBoundaryX--
이 요청을 복제하여 파일명, Content-Type 값을 변경한 후 서버의 응답 코드를 비교한다. 파일명만 바뀌어도 서버 동작이 달라지는지 확인하는 것이 목적임.
4. 확장자 및 MIME 우회 확인
서버가 확장자 기반 필터링을 수행하는 경우 파일명을 변경하거나 여러 확장자를 결합한 형식의 헤더를 전송해 응답 차이를 관찰함. 단, 실제 악성 페이로드 사용은 피함.
5. 업로드 결과 확인
서버가 업로드 성공 시 반환하는 경로, 파일명, 혹은 접근 URL을 로그에서 확인함. 공개 경로로 저장되는 경우 접근 제어 취약성 가능성이 있음.
6. 로그와 에러 분석
서버 응답의 헤더, 바디와 서버 로그(접근 가능하면)를 통해 내부 오류, 경로 정보 노출, 파일 처리 관련 예외를 찾음. 예외 메시지는 취약점의 단서를 제공함.
발견 시 권장 대응 방향
- 서버측 확장자 검증 대신 콘텐츠 기반 검사 도입
- 업로드 파일을 웹 루트가 아닌 별도 저장소에 보관
- 업로드된 파일에 실행 권한을 부여하지 않는 정책 적용
- MIME 타입과 실제 파일 내용 검사 병행
- 업로드 파일에 대해 바이러스/정적 분석 도구 적용
결론
Burp Suite는 업로드 요청을 관찰하고 변형해 서버의 검증 로직을 검증하는 데 유용함. 다만 모든 검증은 승인된 범위 내에서 안전한 테스트 페이로드로 수행해야 함. 발견된 문제는 로그와 서버 설정을 통해 우선순위를 정해 수정하는 것이 중요함.