Authentication 실습(5) - 2FA broken logic (PortSwigger Academy)
2FA 인증 로직의 결함을 이용해 password brute-force 이후 MFA 코드를 brute-force하여 계정에 접근하는 공격
Lab: 2FA broken logic
Lab Link: 2FA broken logic
핵심 포인트
이 lab의 취약점은 2FA 인증 단계에서 brute-force를 막는 로직이 제대로 동작하지 않는다는 점이다.
일반적인 인증 흐름은 다음과 같다.
- username / password 인증
- MFA 코드 검증
- 두 단계 모두 성공해야 로그인 완료
하지만 이 lab에서는 MFA 코드 입력 단계에서 시도 횟수 제한이 없으며 brute-force 공격이 가능하다.
랩 설명에서 이미 victim username이 carlos로 제공되기 때문에
공격자는 다음과 같은 순서로 계정에 접근할 수 있다.
carlos계정 password brute-force- 로그인 시도
- MFA 코드 brute-force
Wordlist 준비
이번 실습에서는 PortSwigger에서 제공하는 password wordlist를 사용한다.
Password: https://portswigger.net/web-security/authentication/auth-lab-passwords
Solution
1. Carlos password brute-force
먼저 로그인 요청을 확인한다.
Burp Proxy에서 로그인 요청을 확인한 뒤
POST /login 요청을 Burp Intruder로 전송한다.
username을 carlos로 고정하고
password 파라미터에 payload position을 설정한다.
PortSwigger에서 제공한 password wordlist를 이용해 공격을 실행한다.
공격 결과를 확인하면 대부분 동일한 응답을 반환하지만
특정 요청에서 Status Code 302가 반환되는 것을 확인할 수 있다.
302 응답은 로그인 성공 후 다음 단계로 이동했다는 의미다.
따라서 해당 password: 123qwe가 Carlos 계정의 실제 password라는 것을 알 수 있다.
2. Carlos 계정 로그인
찾아낸 password로 로그인한다.
1
2
Username: carlos
Password: <bruteforce로 찾은 password>
로그인에 성공하면 MFA 코드 입력 페이지로 이동한다.
3. 2FA 요청 확인
MFA 페이지에서 임의의 코드를 입력한다.
그러면 다음과 같은 요청이 발생한다.
1
2
3
4
POST /login2 HTTP/1.1
Host: vulnerable-website.com
mfa-code=1234
이 요청을 Burp Intruder로 전송한다.
4. MFA 코드 brute-force
Intruder에서 mfa-code 파라미터에 payload position을 설정한다.
이제 4자리 숫자 범위로 brute-force 공격을 수행한다.
Payload type은 Brute forcer로 설정,
characer set은 0123456789, 그리고 length를 4로 설정해준다.
그러면 아래와 같이, 우리가 원하는 네 자리 숫자 0000부터 9999까지 시도해볼 수 있다.
1
2
3
4
5
0000
0001
0002
...
9999
대부분의 요청은 동일한 응답을 반환하지만
정상 코드가 입력된 요청에서는 Status Code 302가 반환된다.
5. MFA 인증
302 응답이 반환된 요청의 MFA request를 보면 값이 1325인걸 알 수 있다. 이 코드값을 웹에서 입력 해서 로그인에 성공하면 lab이 해결된다.
정리
이 lab의 핵심은 MFA 단계에서도 brute-force 공격이 가능하다는 점이다.
정상적인 구현에서는 다음과 같은 보호 장치가 필요하다.
- MFA 코드 입력 횟수 제한
- 로그인 세션과 MFA 인증 단계의 강한 연결
- brute-force 방지 로직
하지만 이 lab에서는 이러한 보호 장치가 없기 때문에
다음과 같은 방식으로 계정에 접근할 수 있었다.
carlospassword brute-force- Carlos 계정 로그인
- MFA 코드 brute-force
결과적으로 2FA가 존재함에도 불구하고 계정 탈취가 가능해진다.




