R's Hacking Daily Log

Authentication - 2FA.Lab(2) 본문

Port Swigger/Authentication

Authentication - 2FA.Lab(2)

hanhxx 2023. 5. 21. 20:58

Lab - 2FA broken logic )

Lab으로 들어가 로그인 정보를 입력하면 

 

 

4글자 인증 코드를 입력하는 페이지가 출력된다. 

 

 

메일로 전송된 코드를 입력하면 

 

 

My account 페이지에서 로그인된 사용자 이름을 볼 수 있다.

 

 

이번 Lab의 목표는 carlos의 계정으로 로그인을 완료하는 것인데, 문제는 carlos의 비밀번호를 모른다. (?)

일단 위에서 본 페이지들을 정리해 보면

 

1) username & password를 입력하는 POST /login request

2) 1의 결과로 얻은 verify & session cookie를 포함하는 Get /login2 request

3) 2의 결과로 verify 된 사용자의 메일로는 코드가 전송되고, 코드를 입력하는 입력창 페이지가 출력된다. 

4) 입력된 코드는 POST /login2 requestmfa-code 값으로 들어가게 된다. 

 

 

Lab을 해결하기 위해서는 carlos 계정으로 로그인하기 위한 2차 인증 코드가 필요하다. 

그래서 Get /login request에서 verify 값을 carlos로 수정해 carlos에게 인증 코드가 전송되도록 한 다음

POST /login2 request로 Brute force 공격을 실행할 것이다. 

 

 

일단은 wiener 계정으로 로그인을 한 다음에 

 

 

GET /login2 request의 verify 값을 carlos로 수정해서 forward 한다. 

 

 

code를 보내는 request에서 

verify cookie를 carlos로 수정하고 mfa-code를 payload 처리해서 

 

 

0000~9999까지 4자리 코드가 생성되는 Brute force 공격을 실행한다. 

 

 

payload를 쭉 넣다 보면 response length가 다른 경우가 하나 나오는 데 

이때의 payload가 2차 인증을 위한 4-digit code이다. 

 

 

mfa-code에 0260을 넣고 packet을 보내면 carlos 계정으로 로그인에 성공한 걸 볼 수 있다. 

 

 

:) 첫 번째 lab은 2차 인증 여부를 확인하지 않아서 2차 인증이 전체적으로 우회되는 경우였다.

 

:) 이번 Lab은 2차 인증까지 검증되는 건 맞지만 

1차 로그인 단계를 완료한 사용자와 2차 코드 인증 단계를 완료한 사용자가 같은 사람인지를 확인하지 않았다.

 

:) 이 부분을 이용해 로그인은 wiener 계정으로 하고 code는 carlos 계정에 생성되도록 request를 처리해서 

코드 인증은 carlos 계정으로 한 것이다. 

 

:) 결과적으로 wiener라는 계정을 활용해 탈취하고자 한 carlos 계정을 얻은 것! 

 

(+) security code에 대한 brute force 공격도 적절하게 방지되지 못한 부분도 문제가 될 수 있다. 

 

 

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

Authentication - Other.Lab (2)  (0) 2023.05.27
Authentication - Other.Lab (1)  (0) 2023.05.23
Authentication - 2FA.Lab(1)  (0) 2023.05.21
Authentication - Lab(2)  (0) 2023.05.11
Authentication - Lab(1)  (0) 2023.05.07
Comments