Burp Suite · 2026-01-25

Burp Suite Extender 시작하기: BApp 개발 입문

Burp Extender 개발 흐름과 Jython 연동을 중심으로 BApp 구조, 주요 API 사용 예제, 배포 과정을 단계별로 정리한 초보자용 학습 자료

작성일 : 2026-01-25 ㆍ 작성자 : 관리자
post
목차

소개

Burp Suite Extender는 Burp를 확장해 사용자 정의 기능을 추가하는 방법이다. BApp은 Burp용 애드온으로, 취약점 자동화나 요청/응답 분석을 쉽게 확장한다. 초반에는 개념과 환경 설정을 이해하는 것이 중요하다.

준비물

필수 소프트웨어

  • Burp Suite(Community 또는 Professional)
  • Java 개발 환경(JDK)
  • Jython(파이썬으로 확장 개발 시)
  • IDE(간단한 편집기라도 충분)

왜 Jython을 쓰는가

Jython은 파이썬 문법으로 Burp API를 다룰 수 있게 해준다. Java로 작성된 API를 파이썬 스타일로 접근할 수 있어 초기 학습 곡선이 완만하다.

기본 구조 이해

BApp은 Burp의 콜백 인터페이스를 구현한다. 대표적으로 IBurpExtender가 핵심 진입점이다. 추가로 IProxyListener, IHttpListener, IContextMenuFactory 등을 구현해 기능을 확장한다. Burp는 콜백 객체를 통해 요청과 응답을 전달한다.

환경 설정

Jython 설치 및 Burp 연동

  • Jython 설치 파일을 다운로드 후 설치
  • Burp의 Extender → Options에서 Python Environment에 Jython JAR 경로 지정
  • Extensions → Add에서 .py 파일을 로드하거나 JAR을 등록

첫 번째 확장: 간단한 로거

아래 예제는 Burp에 등록되어 요청 정보를 로그에 출력하는 최소한의 Jython 확장이다. 코드는 Burp의 IBurpExtender 인터페이스만 사용한다.

from burp import IBurpExtender

class BurpExtender(IBurpExtender):
    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        callbacks.setExtensionName('SimpleLogger')
        callbacks.printOutput('SimpleLogger loaded')

이 코드를 저장하고 Burp에서 로드하면 확장 이름과 로드 메시지가 출력된다. 출력은 Extender → Output에서 확인 가능하다.

요청 가로채기 및 분석

요청을 실시간으로 처리하려면 IHttpListener나 IProxyListener를 구현한다. 콜백으로부터 들어오는 IRequestResponse 객체를 파싱해 필요한 정보를 추출할 수 있다. helpers를 이용하면 HTTP 메시지 분해와 재조립이 쉬워진다.

간단한 요청 분석 예

from burp import IBurpExtender, IHttpListener

class BurpExtender(IBurpExtender, IHttpListener):
    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        callbacks.setExtensionName('RequestInspector')
        callbacks.registerHttpListener(self)

    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        if messageIsRequest:
            request = messageInfo.getRequest()
            analyzed = self._helpers.analyzeRequest(request)
            url = analyzed.getUrl()
            self._callbacks.printOutput('Request to: ' + str(url))

BApp 패키징과 배포

BApp으로 배포하려면 보통 JAR 형식으로 묶는다. Java로 개발했다면 Maven이나 Gradle을 사용해 빌드하고 manifest에 메타 정보를 추가한다. Jython으로 작성한 경우에는 소스 파일과 의존 라이브러리를 포함한 JAR 형태로 묶어 배포할 수 있다.

  • Java 프로젝트: 빌드 및 의존성 정리, JAR 생성
  • Jython 프로젝트: .py 파일을 포함한 JAR 생성 또는 로드 안내 문서 포함
  • 버전 표기와 사용법을 README에 명확히 기재

테스트 및 디버깅

테스트는 로컬 Burp에서 직접 수행한다. 확장에서 printOutput을 활용하면 로그를 쉽게 남길 수 있다. 복잡한 동작은 케이스별 요청을 만들어 검증한다. 예외는 콘솔과 Extender Output을 확인해 원인을 파악한다.

보안과 안정성 고려사항

BApp은 네트워크 트래픽을 다루므로 안정성과 성능을 고려해야 한다. 가능한 비차단 방식으로 작업하고, 큰 페이로드를 처리할 때는 메모리 사용을 주의한다. 외부 입력을 그대로 실행하는 동작은 피한다.

권장 학습 경로

  • Burp Extender API 문서 정독
  • 기본 예제 작성 및 기능 하나씩 추가
  • 공개된 BApp 코드 읽기와 분석
  • 테스트 케이스 기반으로 기능 검증

마무리

Burp Extender 개발은 단계적으로 접근하는 것이 효율적이다. 먼저 작은 확장으로 API 사용법에 익숙해진 뒤, 기능을 모듈화해 확장하면 좋다. Jython을 활용하면 빠르게 프로토타입을 만들 수 있으며, 필요 시 Java로 전환해 패키징하면 배포와 성능 면에서 유리하다.

Burp Extender 개발 BApp 만들기 튜토리얼 Burp Extender Jython BApp 배포 Burp API 사용 Jython Extender Burp 확장 개발 웹 취약점 도구 확장