문제 설명
CSRF 공격을 통해 사용자 email을 변경하면 문제가 해결된다.
문제 풀이
로그인 시 session의 SameSite 값이 Strict로 설정되어 있다.
My Account 페이지에 접근한 후 이메일 변경을 요청한다.
이메일 요청 결과 Burpsuite 패킷에서 csrf 토큰이 존재하지 않는다.
GET 메소드로 변환하여 전송할 시 csrf 토큰 없이도 이메일 변경이 가능하다. 하지만 SameSite가 Strict로 설정되어 다른 Origin에서 CSRF 공격을 성공할 수 없기 때문에 같은 Origin에서 CSRF 공격을 성공할 수 있는 취약점을 찾아 연계하여야한다.
블로그 포스트에 접근한 후 Comment를 작성한다.
블로그 Comment 작성 후 /post/comment/confirmation?postId=3 요청을 진행하며 몇초 후 post 페이지로 리다이렉트 된다. 리다리렉트 되는 구문이 현재 html에는 존재하지 않기 때문에 자바스크립트를 확인한다.
자바스크립트 확인시 postId를 받아 리다이렉트를 진행한다.
아래와 같이 postId값을 전달할 경우 window.location = '/post' + '/' + '../'; 이되어 루트 경로로 이동할 것이라고 추측이 된다. 이를 통해 postId 값을 변조하여 같은 Origin으로의 리다이렉트가 가능하다.
https://0adf00910313043381580774003700ef.web-security-academy.net/post/comment/confirmation?postId=../
POC
피해자가 아래 코드가 존재하는 페이지에 접근할 경우 confirmation 경로에 리다이렉트되며, 3초 후 같은 Origin인 이메일 변경 요청 패킷 페이지로 리다이렉트되어 이메일이 변경된다.
<script>
location.href = "https://0adf00910313043381580774003700ef.web-security-academy.net/post/comment/confirmation?postId=../my-account/change-email?email=wiener123%40normal-user.net%26submit=1"
</script>
POC를 사용자에게 전송하여 문제를 해결한다.
'WEB hacking > PortSwigger' 카테고리의 다른 글
Lab: Cross-site WebSocket hijacking 문제 풀이(WriteUp) (0) | 2025.06.16 |
---|---|
Lab: Manipulating WebSocket messages to exploit vulnerabilities 문제 풀이(WriteUp) (0) | 2025.06.15 |
Lab: SameSite Lax bypass via method override 문제 풀이(WriteUp) (0) | 2025.06.14 |
Lab: CSRF where token is duplicated in cookie 문제 풀이(WriteUp) (0) | 2025.06.13 |
Lab: CSRF where token is tied to non-session cookie 문제 풀이(WriteUp) (0) | 2025.06.12 |