Lab: 2FA broken logic

Lab: 2FA broken logic

https://portswigger.net/web-security/authentication/multi-factor/lab-2fa-broken-logic

 

Lab: 2FA broken logic | Web Security Academy

This lab's two-factor authentication is vulnerable due to its flawed logic. To solve the lab, access Carlos's account page. Your credentials: wiener:peter ...

portswigger.net

 

etc-image-0


사용자 2단계 인증 페이지 취약점

 

carlos 사용자의 account 페이지 접근 시 문제 해결

사용자 계정 wiener / peter

피해자 carlos

힌트: carlos는 웹사이트에 직접 로그인을 시도하지 않음

[기본 설정] 프록시 설정, ACCESS THE LAB의 주소를 Burp Suite에 설정

 

(1) 블로그 내 My account로 이동하여 사용자(wiener)로 로그인합니다.

etc-image-1

 

(2) 로그인이 바로 되지 않고 인증코드를 입력해야 합니다.

상단 Email client로 이동하여 인증코드를 확인합니다.

etc-image-2
2차 로그인
etc-image-3
인증코드 확인
etc-image-4
로그인 성공

 

(3) 패킷을 확인합니다.

login은 1차 로그인 패킷이고 login2는 2차 로그인(인증코드) 패킷입니다.

etc-image-5
1차 로그인(/login)
etc-image-6
2차 로그인(/login2)

=> login2에서 verify를 통해 wiener 계정을 입력받고 있습니다.

=> carlos는 직접 로그인을 하지 않는다고 하였으니 username과 password에 직접적으로 입력하면 안 되고, login2에 있는 verify를 사용할 것이라고 유추

 

(4) calros의 2차 로그인 임시코드를 받기 위해 2차 로그인(/login2, status code: 200)을 Repeater로 전송합니다.

etc-image-7

 

(5) verify를 carlos로 변경하고 send를 클릭하여 요청을 전송합니다.

=> calros는 1차로그인 없이 2차로그인 인증번호 발급

etc-image-8

 

(6) 로그아웃하고 사용자(wiener) 재로그인 합니다. 인증코드를 올바르지 않은 값을 입력하여 패킷을 수집합니다.

etc-image-9
올바르지 않은 인증코드
etc-image-10
올바르지 않은 인증코드 입력 패킷 확인

=> 올바르지 않은 패킷이므로 Incorrect가 뜹니다.

=> 인증코드가 숫자 4자리이기 때문에 브루트포스 공격이 가능합니다.

 

(7) 2차 로그인에 성공했던 패킷(Status code:302)을 Intruder로 보냅니다. 

etc-image-11

(7)-1 verify를 carlos로 변경합니다. 바꾸고자 하는 값을 드래그하고 ADD를 클릭한 후 Payloads로 이동합니다.

etc-image-12

(7)-1-1 Payload type을 Brute focer로 설정하고 Character set을 0123456789로 설정합니다.

etc-image-13

=> 0~9까지 총 1만번의 패킷을 전송합니다.

=> Attack > Pause를 눌러 중단합니다.

=> 시간 오래걸림...

=> commnunity edition에서는 이렇게 찾기 어려움

 

(7)-2 Turbo Intruder를 사용하려고 합니다.

참고영상: https://www.youtube.com/watch?v=iYbM89TuZkw

(7)-2-1 설치방법은 다음과 같습니다.

Extensions > BApp Store > turbo 검색 > Turbo Intruder Install

etc-image-14

(7)-2-2 /login2 패킷을 Turbo Inturder로 전송합니다.

etc-image-15

(7)-2-3 스크립트 코드를 수정하고 실행합니다.

etc-image-16

=> 처음에 25개를 동시에 연결하고, 초당 200개의 요청 및 pipeline을 False로 설정하여 실행

=> verify=carlos, mfa-code=%s 로 설정해 줍니다.

=> 하단 attack을 클릭하면 스크립트 코드가 실행됩니다.

 

(7)-2-4  결과를 확인합니다.

etc-image-17

=> 인증코드는 1686입니다.

 

(7)-3 인증코드 값에서 show response in browser를 클릭하여 주소를 복사합니다.

etc-image-18

 

(8) 문제해결

(7)-3에서 복사한 주소로 이동하면 문제해결이 됩니다.

etc-image-19