Writeup

[웹해킹] Authentication vulnerabilities_Password reset broken logic Writeup

이둥둥 2025. 2. 21. 20:31

그동안 블로그에 리버싱 네트워크 어셈블리 다양하게 다뤘으나

사실 나의 최애 분야는 웹해킹이다.. (근데 요즘 리버싱에 좀 흔들리고 있다)

이번엔 Portswigger Web Security Academy의 랩 중에서

Authentication 인증 취약점 중 Password reset broken logic 문제를 풀어보자

 


 

 

비밀번호 리셋 기능에 취약점이 있다고 한다

주어진 계정 wiener:peter를 활용해서 carlos 패스워드를 변경해서 로그인하는 시나리오

 

 

burpsuite repeater에 넘기는 게 더 중요해서 여기는 대강 설명만 하고 넘어가자면

forgot password?에서 wiener의 이메일 계정으로 비밀번호를 리셋하는 과정이다

 

 

저기 주어진 url에 들어가면 새로운 패스워드를 설정할 수 있다

새로운 패스워드를 설정하는 경로는 대충 알았으니 과정에서 통신했던

HTTP 트래픽들을 살펴보고 어떻게 취약점을 이용할 수 있는지 보겠음

 

 

POST 메소드 중 temp-forgot-password-token이 적힌 패킷을 발견했다

이걸 burp repeater에 보내기

 

temp-forgot-password-token 값을 임의로 바꿔도 작동하는 것 같다

토큰 값 검증이 이루어지지 않음!

 

방금 비밀번호 리셋한 과정 그대로 carlos의 비밀번호도 변경할 수 있겠다

 

 

방금 했던 과정을 다시 거쳐서 repeater에 파켓을 가져왔다

 

(중간에 노트북이 혼자 꺼져서 다시 키는 바람에 토큰이나 여러 값이 앞이랑 다를 수 있음 주의)

 

temp-forgot-password-token 값과 유저네임, new-password을 바꾸면 될 것 같다

이 파켓을 repeater에 보냈다

 

 

temp-forgot-password-token부분을 아예 삭제하고

username에 carlos 비밀번호는 test를 넣고 send→follow redirection

 

처음에 계속 실패해서 다른 분들 writeup을 찾아봤는데

내가 follow redirection까지 안하고 send만해서 반영이 안되었던 것 같다

 

리피터에서 변경한대로 carlos:test 이렇게 로그인을 시도하니

로그인에 성공했다

 

 

 

 

Password reset broken logic lab의 취약점

 

가장 핵심적인 취약점은 temp-forgot-password-token 토큰 값의 검증이 없다는 것이다.

토큰 값을 삭제하거나 조작해도 정상적으로 패스워드를 리셋할 수 있었고 심지어는 username 역시 임의로 변경이 가능했기 때문에 다른 사용자의 계정에 접근할 수 있음을 알 수 있다.

클라이언트 측의 요청을 처리할 때, 서버에서 반드시 토큰 검증을 하고, 시간제한과 1회성 등으로 검증을 강화해야 한다.