Burp Suite · 2026-05-13

Burp Suite로 멀티파트 파일 업로드 디버깅

Burp Suite를 통해 멀티파트 파일 업로드 요청을 분석하고 편집하는 절차와 핵심 포인트를 초보자도 이해하기 쉬운 예제로 정리한 자료

작성일 : 2026-05-13 ㆍ 작성자 : 관리자
post
목차

개요

웹 애플리케이션에서 파일 업로드는 멀티파트 형식으로 전송된다. Burp Suite는 이 요청을 가로채고 분석·편집할 수 있어 취약점 발견과 디버깅에 유용하다. 이 글은 Burp 멀티파트 디버깅 과정의 기본 개념부터 구체적인 편집 절차, 흔한 문제와 해결법까지 초보자도 따라 할 수 있게 정리한다.

멀티파트 형식 이해

기본 구조

파일 업로드는 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary... 형태로 전송된다. 각 파트는 경계(boundary)로 구분되며 헤더와 본문으로 구성된다. 경계 문자열이 정확히 일치해야 서버가 각 파트를 올바르게 파싱한다.

예시 요청

POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 138

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="description"

테스트 파일
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

Hello world
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Burp에서 기본 설정

Proxy 가로채기

먼저 브라우저의 프록시를 Burp로 지정하고 Proxy → Intercept를 활성화한다. 파일 업로드 시점에 요청을 가로채면 Raw 탭에서 멀티파트 본문을 확인할 수 있다. 이 상태에서 바로 편집하거나 Repeater로 보낼 수 있다.

파일 업로드 흐름 제어

일부 앱은 자바스크립트로 폼을 변형하거나 토큰을 추가한다. Burp의 Proxy → Options에서 Match and Replace 규칙을 사용해 테스트 토큰을 고정하거나, Intruder 또는 Repeater로 파라미터를 반복 테스트할 수 있다.

실제 디버깅 절차

아래 절차는 Burp multipart 요청 편집의 핵심 흐름이다.

  • 브라우저에서 업로드를 시도해 요청을 Burp Proxy가 가로채도록 한다.
  • Intercepted Request를 Raw 모드로 확인한다. Content-Type과 boundary 값을 먼저 확인한다.
  • 요청을 Repeater로 보낸다. Repeater에서 파트별로 헤더와 본문을 편집해 테스트한다.
  • 경계 문자열(boundary)이 변경되면 Content-Type 헤더를 반드시 함께 수정한다.
  • 파일 바이너리 내용을 바꿀 때는 Transfer-Encoding과 Content-Length를 재확인한다.
  • 수정 후 Send로 서버 응답을 확인하고 필요 시 반복한다.

구체적 편집 예

파일명을 바꾸거나 파일 내용 일부를 변경해 서버의 필터를 우회해야 할 때가 있다. Repeater에서 본문을 직접 편집하면 된다. 예컨대 filename 파라미터만 변경하거나 content-type을 text/plain으로 강제하는 식이다.

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="exploit.php"
Content-Type: application/x-php

<?php echo 'ok'; ?>
------WebKitFormBoundary7MA4YWxkTrZu0gW--

주의할 점과 문제 해결

Boundary 불일치

가장 흔한 오류는 본문의 경계 문자열과 Content-Type 헤더 경계가 다를 때 발생한다. 편집 후에는 두 위치가 일치하는지 항상 확인한다.

CRLF와 줄바꿈

멀티파트는 CRLF(\r\n)를 기준으로 파트를 구분한다. 줄바꿈을 LF(\n)만 사용하면 파싱 오류가 날 수 있다. Burp의 Raw 편집에서 줄바꿈을 변경하지 않도록 주의한다.

Content-Length와 Chunked

요청 본문을 편집하면 Content-Length가 달라진다. 일반적으로 Burp는 자동으로 Content-Length를 재계산하지만, 수동으로 편집한 경우 값이 틀릴 수 있으니 확인한다. Transfer-Encoding: chunked인 경우에도 서버 처리 방식을 이해해야 한다.

파일 시그니처 검증

서버는 파일 확장자뿐 아니라 매직 넘버로 파일 타입을 검증한다. 텍스트로 확장자를 바꿔도 시그니처가 남아 있다면 차단될 수 있다. 이 경우 파일 내용을 적절히 변형해야 한다.

실습 예: curl로 재현 후 Burp에서 편집

로컬에서 먼저 curl로 요청을 만들어 테스트할 수 있다. 그런 다음 브라우저 대신 curl에 Burp를 프록시로 지정하면 요청을 Burp에서 가로챌 수 있다.

curl -x http://127.0.0.1:8080 -F "description=테스트" -F "file=@test.txt" http://example.com/upload

이 요청을 Burp가 가로채면 Raw 탭에서 본문을 확인한 뒤 Repeater로 보내 편집한다. filename, Content-Type, 내부 본문을 바꿔 서버 반응을 관찰하면서 Burp 멀티파트 디버깅을 반복한다.

팁: 자동화와 검사 확장

많은 반복 테스트가 필요한 경우 Intruder를 사용해 파일명이나 파라미터를 자동화할 수 있다. 또한 Matcher, Macro 기능을 조합해 인증 토큰을 자동으로 갱신하는 워크플로를 만들면 더 효율적으로 테스트할 수 있다.

마무리

Burp multipart 요청 편집은 경계 문자열, 줄바꿈, Content-Length 같은 세부 규칙을 이해하면 어렵지 않다. 단계적으로 요청을 가로채고 Repeater에서 수정한 뒤 서버 반응을 확인하는 흐름을 반복하면 문제 원인을 빠르게 찾아낼 수 있다. 이 과정을 통해 파일 업로드 취약점 발견과 방어 로직 검증이 가능하다.

Burp 멀티파트 디버깅 파일 업로드 멀티파트 Burp Burp multipart 요청 편집 Burp Repeater Proxy Intercept multipart/form-data 업로드 취약점 분석 CRLF boundary