Burp로 요청 자동 수정 스크립트 워크플로
Burp로 가로챈 요청을 스크립트로 자동 수정하고 연속 처리하는 방법, 샘플 코드와 검증 절차, 운영 시 고려사항과 롤백 전략까지 정리한 프로세스
목차
소개
Burp Suite로 테스트 중 가로채진 요청을 수동으로 수정하면 시간이 많이 소모된다. 반복되는 규칙이 있다면 스크립트로 자동화하는 편이 효율적이다. 이 글은 Burp 자동 요청 수정과 Burp 스크립트 워크플로 개념을 친절하게 정리한다. 처음 접하는 사람도 이해하기 쉽도록 단계별로 설명한다.
개념과 준비
핵심 개념
목표는 Burp로 잡힌 요청을 조건에 따라 자동으로 수정하고, 필요 시 연속된 후속 작업을 수행하는 것이다. 이를 위해 다음 요소가 필요하다.
- 스크립트를 실행할 엔진(Jython, Java, JavaScript 등)
- Burp Extender API 이해
- 요청 패턴과 수정 규칙 정의
- 테스트와 롤백 절차
사전 준비
- Burp Suite 최신 버전
- Jython 플러그인(파이썬 선호 시)
- 간단한 HTTP 프로토콜 지식
- 테스트 대상의 비파괴 환경
워크플로 설계
워크플로는 큰 흐름으로 보면 다음과 같다. 각 단계는 명확한 입력과 출력을 가진다.
- 1. 가로채기(Intercept): 요청 수집 지점 설정
- 2. 조건 판별(Match): 어떤 요청을 자동 수정할지 결정
- 3. 수정(Transform): 헤더·바디·쿼리 문자열 수정
- 4. 후처리(Post-processing): 로깅, 재전송, 체인링크 호출
- 5. 검증(Verify): 수정된 요청의 응답 확인과 시그널 수집
설계 팁
- 규칙은 단일 책임 원칙을 따르게 분리
- 로깅 수준을 조절해 성능 영향 최소화
- 테스트 모드를 만들어 실제 전송 전 검증 가능하게 구성
Burp 스크립트 예제 (Jython)
아래 예제는 Burp의 IHttpListener를 사용해 들어오는 요청을 검사하고, 특정 호스트와 경로에 대해 바디의 값을 치환하는 간단한 스크립트이다. 이 코드는 교육 목적이며 실제 운영 전 충분한 테스트가 필요하다.
from burp import IBurpExtender, IHttpListener
class BurpExtender(IBurpExtender, IHttpListener):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("AutoModify")
callbacks.registerHttpListener(self)
def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
if not messageIsRequest:
return
request = messageInfo.getRequest()
analyzed = self._helpers.analyzeRequest(request)
headers = list(analyzed.getHeaders())
body_offset = analyzed.getBodyOffset()
body = request[body_offset:]
body_str = self._helpers.bytesToString(body)
# 조건: 특정 호스트와 경로
host = messageInfo.getHttpService().getHost()
path = analyzed.getUrl().getPath()
if host == 'target.example.com' and path.startswith('/api/v1'):
# 간단한 치환 예시
new_body = body_str.replace('old_value', 'new_value')
new_request = self._helpers.buildHttpMessage(headers, new_body)
messageInfo.setRequest(new_request)
코드 설명:
- registerExtenderCallbacks: Burp에 확장 등록
- processHttpMessage: 요청을 검사하고 조건이 맞으면 수정
- bytesToString / buildHttpMessage: 바이트와 문자열 변환 도구
테스트와 검증
스크립트를 만들었으면 다음 절차로 검증한다.
- 1) 개발 환경에서 테스터 요청으로 동작 확인
- 2) 로그로 원본과 수정본 비교
- 3) 응답 상태와 페이로드 무결성 체크
- 4) 성능 영향 평가(요청 처리 시간 측정)
- 5) 예외 케이스(잘못된 바디, 인코딩 문제) 테스트
테스트 모드는 수정 대신 시뮬레이션 로그를 남기게 해 실제 트래픽을 보호하는 것이 안전하다.
운영 시 고려사항
- 안전성: 민감 데이터가 변조되지 않도록 필터링
- 롤백: 문제 발생 시 원본 요청을 복원하는 기능
- 로깅 정책: 개인정보 포함 여부를 고려하여 익명화
- 버전 관리: 스크립트 변경을 추적할 수 있는 저장소 사용
- 성능: 고부하 환경에서는 비동기 처리 또는 샘플링 적용
확장 아이디어
보다 복잡한 워크플로가 필요하면 다음을 고려한다.
- 외부 규칙 엔진 연동(정규식, JSON 기반 룰셋)
- 요청 체이닝: 수정 후 추가 요청 자동 전송
- 대시보드 통합으로 상태와 통계 시각화
- 테스트 케이스 자동 생성 및 회귀 검증 파이프라인 연동
결론
Burp 요청 자동화는 반복 작업을 줄여 생산성을 높인다. 핵심은 안정적인 조건 판별과 안전한 테스트 절차이다. 위 예제와 워크플로를 바탕으로 단계적으로 확장하면 운영 환경에서도 신뢰성 있게 사용할 수 있다. 마지막으로 항상 비파괴 테스트 환경에서 충분히 검증하는 절차를 권장한다.