R's Hacking Daily Log

Authentication - Other.Lab (3) 본문

Port Swigger/Authentication

Authentication - Other.Lab (3)

hanhxx 2023. 5. 28. 11:33

두 번째로 살펴볼 추가 기능은 "password reset"에 대한 내용이다. 

 

자신의 비밀번호를 잊어버린 사용자는 흔히 비밀번호 재설정 기능을 사용하는 데 

비밀번호를 모르는 상황에서 password 기반의 인증이 불가하기 때문에 다른 대안에 의존할 수밖에 없다.

 

그렇다보니 password reset이라는 기능은 본질적으로 위험하다고 할 수 있다. 

 

 

비밀번호 재설정 기능을 수행하기 위한 방안 중 하나는 Email을 이용하는 것으로

랜덤 하게 만든 비밀번호를 사용자에게 메일로 보내거나 비밀번호 재설정이 가능한 페이지 링크를 보내는 식으로 이루어진다. 

 

또 다른 방안으로는 고유 URL을 사용하는 것인데 URL의 경우,

http://vulnerable-website.com/reset-password?user=victim-user

어떤 사용자가 비밀번호를 재설정하는 알아차리기 너무 쉬운 형태이기도 하고 Token을 사용한다고 하더라도

 

http://vulnerable-website.com/reset-password?token=a0ba0d1cb3b63d13822572fcff1a241895d893f659164d4cc550b421ebdd48a8

Token을 검증하는 절차가 제대로 구현되지 않은 경우에는 이 Token을 활용해 임의의 사용자 비밀번호를 

바꿔버릴 수도 있다. 

 

 


Lab - Password reset Broken logic )

password reset과 관련된 첫 번째 Lab은 바로 위에서 언급한 Token과 관련되어 있다. 

이번 Lab의 목표는 carlos의 비밀번호를 공격자 마음대로 변경해서 carlos 계정으로 로그인 하는 것!

 

Lab의 로그인 페이지로 가면 하단에 "Forgot password?" 버튼이 있는 걸 볼 수 있다.

 

 

해당 버튼을 누르면 비밀번호를 재설정할 username을 입력하는 페이지가 나오고 

 

 

공격자의 계정명인 wiener를 입력해서 submit하면 위와 같은 Post method의 request가 만들어진다.

하단에 있는 username 값이 wiener인 걸 볼 수 있고, response에서는 email로 보낸 link를 확인하라고 한다. 

 

 

email client로 들어가보면 wiener에게 link 하나가 와있는 걸 확인할 수 있다.

해당 link를 클릭하면 

 

 

비밀번호를 재설정 할 수 있는 페이지가 나온다. password 값을 peter로 입력해주고 submit을 누르면 

 

 

temp-forgot-password-token이라는 Token과 username & password 값이 들어있는 packet이 만들어진다.

 

이 과정에서 서버는 request의 Token을 확인해서 자신이 생성한 Token이 맞는지 확인하고 

해당 Token이 유효하다고 검증되면 username에 해당하는 password를 변경할 것이다. 

 

 

지금까지의 과정을 정리해봤을 때, 만약

1) 공격자가 자신의 계정을 이용해 비밀번호 재설정 시 확인하는 Token을 얻어

2) 임의의 사용자에 대한 정보를 변경하도록 packet을 조작한다면?

 

 

wiener 계정이 아닌 carlos 계정의 정보를 변경하는 내용으로 packet을 조작해서 보낸다면 어떻게 될까?

 

username : wiener → carlos

password & new-password : peter → shark

 

 

위의 packet을 보낸 다음, carlos:shark로 로그인을 시도해 보면 

 

 

성공적으로 carlos 계정에 로그인 된 걸 확인할 수 있다! (OoO)

 

 


이번 Lab은 비밀번호 재설정 시, 만들어진 Token을 악용해 다른 사용자의 계정 정보를 변경하는 상황을 다루고 있다.

 

만들어진 Token이 유효하다면 비밀번호를 재설정해주는 것인데,

여기서 문제는 Token이 유효하기만 하면 계정 정보가 무엇이든 비밀번호를 변경한다는 것이다.

 

비밀번호를 재설정하고자 하는 사용자가 자신의 비밀번호를 바꿔달라고 요청하는 게 맞는 지

확인하지 않는다는 의미이다. 

 

이 부분에 대한 로직이 적절히 구현되지 않았기 때문에 

1) wiener 계정으로 비밀번호 재설정을 위한 Token을 얻고

2) 이 Token을 사용해 carlos의 비밀번호를 변경

함으로써 이번 Lab을 해결할 수 있었다. 

'Port Swigger > Authentication' 카테고리의 다른 글

Authentication - Other.Lab (4)  (0) 2023.05.31
Authentication - Other.Lab (2)  (0) 2023.05.27
Authentication - Other.Lab (1)  (0) 2023.05.23
Authentication - 2FA.Lab(2)  (0) 2023.05.21
Authentication - 2FA.Lab(1)  (0) 2023.05.21
Comments