Portswigger-Password reset broken logic
풀이
wiener:peter 계정을 이용해 로그인할 수 있다. Carlos의 비밀번호를 재설정하고 “My account” 페이지에 접속해야 한다.

로그인 페이지에 접속하면 “Forgot password?” 버튼이 있다.

유저 이름이나 이메일을 입력하면 비밀번호를 새로 발급받을 수 있다.

공격자가 소유한 wiener를 입력하면 등록되어 있는 이메일로 리셋 토큰이 포함된 URL이 전송된다. 접속하면 새로 설정할 패스워드와 이를 다시 한 번 확인하는 폼이 나온다.

폼에 입력한 뒤 제출을 누르면 토큰, 유저 이름, 새로운 패스워드가 포함된 패킷이 간다. 여기서 유저 이름을 victim인 carlos로 조작한다.

또한 비밀번호 리셋 페이지에 접속할 때는 토큰이 필요하지만, 막상 비밀번호를 리셋할 때는 temp-forgot-password-token 파라미터를 변경해도 무방하다. URL 파라미터의 토큰과 POST의 토큰에 임의의 값을 넣어 보내도 무방했다.

carlos의 비밀번호를 변경하고, 로그인하면 성공한다. 이 취약점은 새로운 비밀번호를 지정하는 페이지에서 보내는 유저네임이 변경 가능하다는 것을 고려하지 않고, 비밀번호 변경 요청 토큰을 체크하지 않아 생긴 취약점이다.
tags: writeup, business-logic-vul, wstg-busl-02, web hacking