문제 링크
https://portswigger.net/web-security/csrf/bypassing-token-validation/lab-token-validation-depends-on-request-method
목표 & 사용 도구
목표: CSRF 취약점을 이용하여 피해자의 이메일 주소를 변경시키는 것입니다.
사용도구: Burp Suite
문제 설명
해당 랩의 이메일 변경 기능에는 CSRF 취약점이 존재한다고 합니다. CSRF를 차단하려고 시도를 하지만 특정한 타입의 요청에만 방어가 되고 있으며 exploit 서버를 이용해서 다른 계정의 이메일 주소를 바꿔야 랩 문제를 해결할 수 있다고 합니다. 자격 증명에 사용되는 사용자(본인)의 계정은 다음과 같습니다.
wiener:peter
문제 풀이
- ACCESS THE LAB을 클릭해서 랩에 접속합니다.

- My account를 클릭합니다.

- My account 페이지에 접속하기 위해서 로그인을 해야 하며 문제에서 제공된 계정으로 로그인합니다.

- 이메일 변경을 위해 변경할 이메일 주소를 입력 후 Update email을 클릭합니다.

- 이메일이 변경된 것을 확인합니다.

- 이때 이메일을 변경할 때 요청을 취득해 보면 변경할 이메일 주소와 csrf 토큰이 같이 전송되고 있다는 것을 알 수 있습니다.

- 이메일 변경할 때의 요청을 Burp Suite Repeater 기능에 세팅합니다.

- email, csrf 파라미터 중 csrf 파라미터 값을 임의의 값으로 하면 유효하지 않은 CSRF 토큰이라는 응답을, 제거하고 요청을 보내면 csrf 파라미터가 없다는 응답을 받게 됩니다.
-csrf 파라미터 값을 임의의 값으로 변경하고 요청을 전송했을 때

-csrf 파라미터를 제거하고 요청을 전송했을 때

- 실제로 My account 페이지를 보면 이메일이 바뀌지 않고 있는 것을 볼 수 있습니다.

- 다시 이메일 변경 요청으로 돌아와서 Change request method 기능을 사용합니다.

- Change request method를 통해 기존 POST 메서드를 GET 메서드로 변경한 뒤 요청을 전송하면 302 Found 결과를 받는 것을 볼 수 있습니다. 302 응답과 함께 Location이 My account인 것으로 봤을 때 요청이 정상적으로 처리되었다는 것을 알 수 있습니다.

- 이어서 My account 페이지에 접속하여 새로고침을 해보면 이메일이 변경된 것을 볼 수 있습니다.

| [설명] 기존의 이메일 변경 요청을 전송할 때는 POST 메서드 방식이었고 CSRF 토큰 값이 유효하지 않거나 없으면 이메일 변경이 불가능했습니다. 하지만 CSRF 공격에 대한 방어가 POST 메서드 방식일 때만 적용되고 있었고 GET 메서드 방식은 방어가 적용이 되지 않고 있었습니다. 그렇기 때문에 GET 메서드로 이메일 변경을 요청하면 CSRF 토큰 값 검사를 하지 않아 CSRF 방어를 우회하여 이메일 변경이 가능했던 것입니다. |
- Go to exploit server를 클릭합니다.

- 접속한 뒤 Body 부분에 페이로드를 삽입하고 Store을 클릭합니다.

| [페이로드] <form id="myForm" method="GET" action="https://{lab-id}.web-security-academy.net/my-account"> <input type="hidden" name="email" value="test@attack.com"> </form> <script> document.getElementById('myForm').submit(); </script> [설명] 해당 페이로드의 경우 form 태그와 script 태그를 이용하여 다른 사용자가 페이로드가 삽입된 페이지에 접근했을 때 자동으로 자신의 이메일 주소를 변경하도록 하는 페이로드입니다. method 속성은 form 태그 요청 메서드를 지정합니다. action 속성은 요청을 보낼 URL을 지정합니다. script 태그 내부 내용의 경우 id가 myForm인 요소를 가져와 submit(), 즉 제출을 하도록 처리합니다. script 태그를 이용하면 form 데이터를 전송할 때 제출 버튼 클릭과 같이 상호작용을 하지 않아도 요청이 전송됩니다. |
- Store 후 Deliver exploit to victim을 클릭합니다.

- 피해자(다른 사용자)가 이메일 변경 요청 페이로드가 삽입된 페이지로 접속을 하게 되면서 피해자의 이메일 주소가 변경되어 랩 문제가 해결된 것을 볼 수 있습니다.

- exploit 페이지에서 Access log를 클릭합니다.

- 로그를 보면 이메일 변경 요청 페이로드가 삽입된 페이지에 피해자가 접근했던 기록이 있는 것을 볼 수 있습니다.

'[WEB] CTF & Wargame > PortSwigger Web Security Academy' 카테고리의 다른 글
| Lab: File path traversal, traversal sequences blocked with absolute path bypass (0) | 2026.07.21 |
|---|---|
| Lab: File path traversal, simple case (0) | 2026.07.20 |
| Lab: DOM XSS in document.write sink using source location.search (0) | 2026.07.20 |
| Lab: 2FA simple bypass (0) | 2026.07.16 |
| Lab: SSRF with whitelist-based input filter (0) | 2026.06.26 |
| Lab: SSRF with blacklist-based input filter (0) | 2026.06.23 |












