Burp Suite 에서 CSRF PoC 생성하기

Beginner
지금 연습하기

소개

이 실습에서는 웹 애플리케이션 보안 테스트의 기본 기술인 Burp Suite 를 사용한 크로스 사이트 요청 위조 (CSRF) 개념 증명 (PoC) 생성 방법을 배우게 됩니다. CSRF 는 피해자를 속여 악의적인 요청을 제출하게 만드는 공격 유형입니다. Burp Suite 는 취약점의 영향을 시연하는 데 사용할 수 있는 PoC 를 자동으로 생성하는 강력한 기능을 제공합니다.

Burp Suite 의 프록시를 사용하여 애플리케이션의 상태를 변경하는 요청 (예: 이메일 주소 업데이트) 을 가로채고, "Engagement tools"를 사용하여 이 요청을 재현하는 HTML 양식을 생성합니다. 이 실습을 통해 CSRF 공격이 어떻게 만들어지고 테스트되는지에 대한 이해를 공고히 할 수 있습니다.

프록시 기록에서 상태 변경 요청 찾기 (예: 이메일 업데이트)

이 단계에서는 Burp Suite 를 실행하고, 내장 브라우저를 사용하여 대상 웹사이트에서 작업을 수행한 다음, 프록시 기록에서 해당 요청을 찾습니다. "상태 변경 요청"은 비밀번호 변경, 댓글 제출 또는 프로필 정보 업데이트와 같이 서버의 데이터를 수정하는 모든 요청입니다.

먼저 Burp Suite 를 시작합니다.

  1. 화면 왼쪽 상단의 Applications 메뉴를 클릭합니다.
  2. Web으로 이동하여 Burp Suite Community Edition을 선택합니다.
  3. 대화 상자가 나타납니다. 기본 설정 (Temporary project) 을 유지하고 Next를 클릭합니다.
  4. 다음 화면에서 Use Burp defaults를 선택하고 Start Burp를 클릭합니다.

Burp Suite 가 실행되면 내장 브라우저를 엽니다.

  1. Proxy 탭으로 이동한 다음 Intercept 하위 탭으로 이동합니다.
  2. Open Browser 버튼을 클릭합니다. Burp Suite 를 통해 트래픽을 프록시하도록 미리 구성된 새 Chromium 브라우저 창이 열립니다.

이제 캡처할 작업을 수행해 보겠습니다. 이 실습에서는 PortSwigger 의 테스트 웹사이트를 사용합니다.

  1. Burp 브라우저에서 다음 URL 로 이동합니다.
    https://portswigger.net/web-security/csrf/lab-no-defenses
  2. Access the lab을 클릭합니다. 블로그 웹사이트로 리디렉션됩니다.
  3. 실습 설명에 있는 자격 증명 (wiener:peter) 을 사용하여 애플리케이션에 로그인합니다.
  4. 로그인 후 "Update email" 양식이 표시됩니다. 예를 들어 test@example.com과 같은 새 이메일 주소를 입력하고 Update email을 클릭합니다.

마지막으로 Burp Suite 에서 요청을 찾아보겠습니다.

  1. Burp Suite 창으로 돌아갑니다.
  2. Proxy 탭으로 이동한 다음 HTTP history 하위 탭으로 이동합니다.
  3. 요청 목록을 살펴봅니다. POST /my-account/change-email 요청이 보여야 합니다. 이것이 우리가 대상으로 삼고 싶은 상태 변경 요청입니다. 해당 요청을 클릭하여 아래 패널에서 세부 정보를 확인합니다.
POST /my-account/change-email HTTP/2
Host: your-lab-id.web-security-academy.net
...

email=test%40example.com

이제 상태 변경 요청을 성공적으로 가로채고 식별했습니다.

요청에서 마우스 오른쪽 버튼 클릭

이 단계에서는 Burp Suite 의 컨텍스트 메뉴를 사용하여 고급 기능에 액세스합니다. 컨텍스트 메뉴는 Burp Suite 워크플로우의 핵심 부분으로, 선택한 요청에 적용할 수 있는 다양한 도구에 빠르게 액세스할 수 있도록 합니다.

Proxy > HTTP history 탭에서 POST /my-account/change-email 요청이 여전히 강조 표시된 상태에서 다음 작업을 수행합니다.

  1. 마우스 커서를 선택한 요청 줄 위로 이동합니다.
  2. 요청에서 마우스 오른쪽 버튼을 클릭합니다.

그러면 많은 옵션이 있는 큰 컨텍스트 메뉴가 열립니다. 이 메뉴는 컨텍스트에 따라 달라지므로, 클릭하는 위치에 따라 사용 가능한 옵션이 변경될 수 있습니다. 요청에서 마우스 오른쪽 버튼을 클릭하면 Repeater, Intruder 와 같은 다른 Burp 도구로 보내거나, 이 경우 CSRF PoC 생성기로 보내는 등 해당 특정 요청에 대해 수행할 수 있는 작업 목록이 표시됩니다.

사용 가능한 옵션을 잠시 살펴보면서 가능한 기능들을 익혀보세요.

Engagement tools > Generate CSRF PoC 로 이동

이 단계에서는 컨텍스트 메뉴를 통해 이동하여 CSRF PoC 생성기를 찾고 실행합니다. 이 도구는 취약점을 시연하고 보고하는 데 도움이 되도록 설계된 기능인 "Engagement tools" 아래에 분류됩니다.

이전 단계에서 요청을 마우스 오른쪽 버튼으로 클릭한 후 컨텍스트 메뉴가 표시됩니다. PoC 를 생성하려면 다음 단계를 따르세요.

  1. 컨텍스트 메뉴에서 Engagement tools 옵션을 찾아 마우스를 올립니다. 그러면 하위 메뉴가 나타납니다.
  2. 나타나는 하위 메뉴에서 Generate CSRF PoC를 클릭합니다.

"Generate CSRF PoC"라는 제목의 새 창이 열립니다. Burp Suite 는 선택한 POST 요청을 자동으로 분석했으며, 제출 시 동일한 요청을 다시 실행하는 간단한 HTML 페이지를 생성했습니다. 이것이 CSRF 공격의 핵심입니다. 사용자의 브라우저를 속여 이미 인증된 웹사이트로 요청을 제출하게 만드는 것입니다.

생성된 HTML 양식 검토

이 단계에서는 Burp Suite 에서 생성한 HTML 코드를 검토합니다. 이 코드를 이해하는 것은 CSRF 공격이 어떻게 작동하는지 이해하는 데 중요합니다.

"Generate CSRF PoC" 창에서 HTML 코드 블록을 볼 수 있습니다. 다음과 유사해야 합니다.

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <script>
      history.pushState("", "", "/");
    </script>
    <form
      action="https://your-lab-id.web-security-academy.net/my-account/change-email"
      method="POST"
    >
      <input type="hidden" name="email" value="test&#64;example&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

이 HTML 의 주요 구성 요소를 살펴보겠습니다.

  • <form action="..." method="POST">: HTML 양식을 정의합니다. action 속성은 양식 데이터가 전송될 URL 을 지정합니다. 이 경우 이메일 주소를 변경하는 데 사용된 것과 동일한 엔드포인트입니다. method="POST"는 원본 요청의 메서드와 일치합니다.
  • <input type="hidden" name="email" value="...">: 숨겨진 양식 필드입니다. 서버가 작업을 수행하는 데 필요한 매개변수를 포함합니다. 여기서는 test@example.com 값을 가진 email 매개변수입니다. 숨겨져 있으므로 이 페이지를 방문하는 피해자는 이를 볼 수 없습니다.
  • <input type="submit" value="Submit request" />: 공격을 트리거하기 위해 피해자가 클릭해야 하는 버튼을 만듭니다. 더 고급 공격에서는 JavaScript 를 사용하여 이 제출을 자동으로 트리거할 수 있습니다.

이 간단한 HTML 페이지는 CSRF 취약점에 대한 기능적인 개념 증명 (Proof of Concept) 입니다.

'Test in browser' 기능을 사용하여 PoC 확인

이 단계에서는 생성된 PoC 를 사용하여 CSRF 취약점을 확인합니다. Burp Suite 는 내장된 테스트 기능을 통해 이를 쉽게 수행할 수 있습니다.

"Generate CSRF PoC" 창에서 Test in browser라는 버튼을 찾을 수 있습니다. 이 기능은 대상 애플리케이션에 인증된 동일한 브라우저 세션에서 PoC 를 직접 테스트할 수 있도록 합니다.

  1. Test in browser 버튼을 클릭합니다.
  2. Burp Suite 에서 고유한 URL 을 제공합니다. Copy 버튼을 클릭하여 이 URL 을 클립보드에 복사합니다.
  3. Burp 의 내장 브라우저 (Chromium 창) 로 돌아갑니다.
  4. 복사한 URL 을 주소 표시줄에 붙여넣고 Enter 키를 누릅니다.

새 페이지가 로드되며 "Submit request" 버튼만 표시됩니다. 이것이 작동 중인 PoC 입니다.

  1. Submit request 버튼을 클릭합니다.

브라우저가 POST 요청을 웹 애플리케이션으로 보냅니다. 이미 로그인되어 있으므로 (브라우저에 세션 쿠키가 있음) 애플리케이션은 마치 합법적으로 요청한 것처럼 처리합니다.

공격이 성공했는지 확인하려면:

  1. 블로그 애플리케이션이 있는 탭으로 다시 이동합니다.
  2. 페이지를 새로 고치거나 "My account" 링크를 클릭합니다.
  3. 이메일이 test@example.com(또는 PoC 에 있던 값) 으로 업데이트된 것을 볼 수 있어야 합니다. 또한 랩에서는 "Congratulations, you solved the lab!" 메시지가 표시되어야 합니다.

이를 통해 CSRF PoC 가 작동하고 애플리케이션이 취약하다는 것을 확인할 수 있습니다.

요약

이 랩에서는 Burp Suite 를 사용하여 교차 사이트 요청 위조 (CSRF) 개념 증명 (PoC) 을 생성하고 테스트하는 방법을 성공적으로 배웠습니다.

이 작업을 위한 전체 워크플로를 연습했습니다.

  1. Burp 의 프록시를 사용하여 상태 변경 요청을 가로챕니다.
  2. 컨텍스트 메뉴를 사용하여 Engagement tools에 액세스합니다.
  3. 한 번의 클릭으로 CSRF PoC 를 생성합니다.
  4. 결과 HTML 을 분석하여 공격 메커니즘을 이해합니다.
  5. 브라우저에서 PoC 를 테스트하여 취약점을 확인합니다.

이 기술은 웹 애플리케이션 보안 전문가에게 필수적입니다. CSRF 결함의 실제 영향을 개발자와 이해 관계자에게 명확하고 효과적으로 시연할 수 있는 방법을 제공하기 때문입니다.