R's Hacking Daily Log

Authentication - Other.Lab (4) 본문

Port Swigger/Authentication

Authentication - Other.Lab (4)

hanhxx 2023. 5. 31. 16:08

Changing user passwords 

Authentication에 대하여 살펴볼 마지막 부가 기능은 "비밀번호 변경"에 관한 내용이다. 

 

password reset과는 조금 다른 게,

password reset은 사용자가 자신의 비밀번호를 잊어버린 상황을 전제로 하기 때문에

현재 설정된 password로 인증 절차를 검증할 수 없다.

 

 

이와 달리 change password는 

현재 비밀번호를 알고 있지만 그 값을 변경하고자 할 때 실행되는 기능이기 때문에

사용자는 비밀번호 변경을 위해서 대부분 자신의 현재 비밀번호로 인증 절차를 거치게 된다. 

 

사실 새로운 비밀번호를 설정한다는 것은 사용자가 자신의 계정명 & 비밀번호를 가지고 권한이 있는지 없는지 

검증하는 절차[= 로그인]를 거치는 것과 다를 바 없기 때문에

로그인 과정에서 발생할 수 있는 취약점이 그대로 적용될 수 있다고 보면 된다. 

 

 

 

Lab - Password brute-force via password change ) 

이번 Lab의 목표는 carlos 계정으로 로그인에 성공하여 My-page를 출력하는 것이다.

:) 공격자는 wiener:peter 이라는 자신의 계정을 갖고 있다고 가정한다.

 

 

wiener 계정으로 로그인하면 하단에 "Change password"와 관련된 입력 form이 있는 걸 확인할 수 있다.

입력하는 내용을 살펴보면 현재 비밀번호를 입력하고 새로 변경할 비밀번호를 두 번 입력해서 확인하는 듯하다.

 

 

이번 문제에서는 이 form을 활용하여 carlos의 password를 알아낼 것이다. 

우선 해당 form을 입력하면 어떤 모양의 packet이 만들어지는지 살펴보자.

 

 

Case 1 ) current-password right & new password mismatch

현재 입력된 값을 보면 username & current-password는 wiener:peter로 올바르게 입력되었지만

new-password-1 & new-password-2가 peterpan & pterpan으로 일치하지 않는다. 

 

즉 현재 비밀번호는 올바르지만 변경하고자 입력한 비밀번호 값이 서로 일치하지 않는 경우.

response로 사용자는 "New passwords do not match" 문구를 볼 수 있을 것이다.

 

 

Case 2 ) current-password wrong & new password mismatch

이번 경우에는 사용자가 입력한 현재 비밀번호 값과 변경하려고 입력한 새 비밀번호 간의 값이 모두 일치하지 않는 경우이다.

 

response에서 보이는 것 처럼 현재 password와 변경할 비밀번호 간의 값이 틀린 경우에는 

"Current password is incorrect" 문구가 출력된다. 

 

 

Case 3 ) current password wrong & new password match

세 번째 경우는 사용자가 변경하고자 입력한 새 비밀번호 값은 서로 일치하지만 사용자의 현재 비밀번호가 틀린 경우이다.

 

이럴 경우에는 별 다른 문구가 출력되지 않고 Logout 되는 걸 볼 수 있다. 

 

 

Case 4 ) 마지막 경우는 current password & new password match로 사용자가 입력한 값이

유효하고[current password] 일치하는 경우[new password 1 & 2]이다.

 

결과로는 당연히 사용자가 설정한 새 비밀번호로 값이 변경되는 것!

 

 

 

Change password form으로 분석해 본 결과, 활용할 수 있는 부분은 form 위에 출력되는 문구임을 예측할 수 있다. 

:) 공격자의 목표는 current-password를 알아내는 것.

 

:) current-password가 유효한 경우 new password 값이 서로 불일치해야 [= Case 1] 

"New password do not match" 문구가 출력된다. 

 

:) current-password가 유효하지 않은 경우 new password 값도 불일치해야 [= Case 2]

"Current password is incorrect" 문구가 출력된다. 

 

따라서 password list에 있는 password를 다 넣어보면서 brute force 공격을 실행할 때, payload로 들어간

password가 유효한 값인지 아닌지 알기 위해서는 new-password-1 & 2의 값이 틀리게 설정되어있어야 한다. 

 

 

wiener 계정으로 Change password 버튼을 눌렀을 때 만들어진 packet을 이용하여

username을 carlos로 조작하고 current-password는 payload 처리해 준다.

 

여기서 new-password-1 & 2는 의도적으로 다른 값을 설정해 주는 것이 포인트!!

{ new-password-1 = peterpan & new-password-2 = peterpean }

 

 

결과를 더 쉽게 구분하기 위해서 문구가 출력되는 부분을 Grep-Extract option에 추가해 준다.

 

 

그러고 나서 brute force attack을 실행한 결과

payload가 nicole일 때만 문구가 "New passwords do not match"인 걸 확인해 볼 수 있다.

 

Case 1에서 살펴봤듯이 해당 문구가 출력된다는 건

현재 비밀번호 값은 올바르지만 변경하고자 한 비밀번호 값이 서로 다르다는 걸 의미한다. 

 

따라서 carlos's password는 nicole이라는 걸 알아낸 것이다!!

 

 

wiener account에서 로그아웃 한 다음에 

carlos:nicole을 입력해 로그인하면 성공적으로 carlos의 My account page가 출력되는 걸 볼 수 있다!

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

Authentication - Other.Lab (3)  (0) 2023.05.28
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