웹 해킹/portswigger

버프스위트를 이용한 웹 해킹, 인증 취약점: 2단계 인증(2FA, Two-Factor Authentication)의 취약점

코드라니(CODERANY) 2026. 4. 23. 08:50

다중 요소 인증의 취약점

이 섹션에서는 다중 요소 인증 메커니즘에서 발생할 수 있는 몇 가지 취약점을 살펴보겠습니다. 또한 다중 요소 인증의 이러한 취약점을 악용하는 방법을 보여주는 몇 가지 대화형 실습도 제공합니다.

많은 웹사이트는 사용자 인증을 위해 비밀번호를 이용한 단일 요소 인증에만 의존합니다. 그러나 일부 웹사이트는 사용자가 여러 인증 요소를 사용하여 신원을 증명하도록 요구합니다.

대부분의 웹사이트에서 생체 정보를 검증하는 것은 현실적으로 어렵습니다. 하지만 사용자가 알고 있는 정보  소유하고 있는 정보를 기반으로 하는 필수 또는 선택적 2단계 인증(2FA) 방식이 점점 더 보편화되고 있습니다 . 이러한 방식은 일반적으로 사용자가 기존 비밀번호와 함께 소지하고 있는 물리적 장치에서 전송되는 임시 인증 코드를 입력하도록 요구합니다.

공격자가 비밀번호와 같은 지식 기반 요소를 하나 획득하는 것은 때때로 가능하지만, 다른 경로를 통해 또 다른 요소를 동시에 획득하는 것은 훨씬 어렵습니다. 이러한 이유로 이중 인증은 단일 인증보다 훨씬 안전합니다. 그러나 모든 보안 조치와 마찬가지로 이중 인증 역시 구현 방식에 따라 안전성이 달라집니다. 제대로 구현되지 않은 이중 인증은 단일 인증과 마찬가지로 무력화되거나 완전히 우회될 수 있습니다.

또한 다중 요소 인증의 모든 이점을 누리려면 서로 다른 여러 요소를 검증해야 한다는 점에 유의해야 합니다. 동일한 요소를 두 가지 다른 방식으로 검증하는 것은 진정한 이중 요소 인증이 아닙니다. 이메일 기반 이중 요소 인증이 그 예입니다. 사용자는 비밀번호와 인증 코드를 입력해야 하지만, 코드를 확인하는 데에는 사용자가 자신의 이메일 계정 로그인 정보를 알고 있어야만 가능합니다. 따라서 지식 인증 요소가 단순히 두 번 검증되는 것에 불과합니다.

2단계 인증 토큰 

인증 코드는 일반적으로 사용자가 물리적인 기기에서 읽어옵니다. 보안 수준이 높은 많은 웹사이트에서는 이제 RSA 토큰이나 온라인 뱅킹 또는 업무용 노트북에 접속할 때 사용하는 키패드와 같은 전용 기기를 사용자에게 제공합니다. 이러한 전용 기기는 보안을 위해 특별히 설계되었을 뿐만 아니라 인증 코드를 직접 생성할 수 있다는 장점도 있습니다. 또한 웹사이트에서 구글 인증 앱과 같은 전용 모바일 앱을 같은 목적으로 사용하는 경우도 흔합니다.

반면에 일부 웹사이트는 사용자의 휴대전화로 인증 코드를 문자 메시지로 전송합니다. 이는 기술적으로는 "소유하고 있는 무언가"를 확인하는 방식이지만, 악용될 소지가 있습니다. 첫째, 코드가 기기 자체에서 생성되는 것이 아니라 SMS를 통해 전송되기 때문에 코드가 가로채일 가능성이 있습니다. 또한, 공격자가 피해자의 전화번호가 적힌 유심 카드를 부정하게 입수하여 유심 카드를 바꿔치기하는 유심 스와핑의 위험도 존재합니다. 공격자는 피해자에게 전송되는 모든 문자 메시지, 즉 인증 코드가 포함된 메시지까지 모두 수신할 수 있게 됩니다.

2단계 인증 우회

때때로 이중 인증 구현에 결함이 있어 완전히 우회될 수 있는 경우가 있습니다.

사용자가 먼저 비밀번호를 입력하고, 별도의 페이지에서 인증 코드를 입력하도록 요청받는 경우, 사용자는 인증 코드를 입력하기 전에 이미 "로그인된" 상태가 됩니다. 따라서 첫 번째 인증 단계를 완료한 후 "로그인된 사용자 전용" 페이지로 바로 이동할 수 있는지 테스트해 보는 것이 좋습니다. 간혹 웹사이트에서 두 번째 인증 단계를 완료했는지 여부를 확인하지 않고 페이지를 로드하는 경우가 있습니다.

 

https://portswigger.net/web-security/learning-paths/authentication-vulnerabilities/vulnerabilities-in-multi-factor-authentication/authentication/multi-factor/lab-2fa-simple-bypass

1. 본인 계정에 로그인하세요. 2단계 인증 코드가 이메일로 발송됩니다. 이메일 클라이언트 버튼을 클릭하여 이메일을 확인하세요.
계정 페이지로 이동하여 URL을 메모해 두세요.

 


2. 계정에서 로그아웃하고, 피해자의 계정 정보를 사용하여 로그인하세요.


3. 인증 코드를 입력하라는 메시지가 나타나면 URL을 수동으로 변경하여 해당 페이지로 이동하세요 /my-account. 페이지가 로드되면 문제가 해결된 것입니다.

결함 있는 이중 인증 로직

때때로 2단계 인증의 논리적 결함으로 인해 사용자가 초기 로그인 단계를 완료한 후 웹사이트가 동일한 사용자가 두 번째 단계를 완료하는지 제대로 확인하지 못하는 경우가 있습니다.

예를 들어, 사용자는 첫 번째 단계에서 다음과 같이 평소 사용하는 자격 증명으로 로그인합니다.

POST /login-steps/first HTTP/1.1
Host: vulnerable-website.com
...
username=carlos&password=qwerty

그러면 사용자는 계정과 관련된 쿠키를 할당받은 후 로그인 프로세스의 두 번째 단계로 이동합니다.

HTTP/1.1 200 OK
Set-Cookie: account=carlos

GET /login-steps/second HTTP/1.1
Cookie: account=carlos

인증 코드를 제출할 때 요청은 이 쿠키를 사용하여 사용자가 어떤 계정에 액세스하려고 하는지 확인합니다.

POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=carlos
...
verification-code=123456

account이 경우 공격자는 자신의 자격 증명을 사용하여 로그인한 다음 인증 코드를 제출할 때 쿠키 값을 임의의 사용자 이름으로 변경할 수 있습니다 .

POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=victim-user
...
verification-code=123456

공격자가 무차별 대입 공격으로 인증 코드를 탈취할 수 있다면 이는 매우 위험합니다. 공격자는 사용자의 비밀번호조차 모른 채 사용자 이름만으로 임의의 사용자 계정에 로그인할 수 있게 되기 때문입니다.

1. 버프 스위트의 브라우저를 실행한 상태에서 본인 계정에 로그인하고 2FA 인증 프로세스를 살펴보세요. POST /login2요청 에서 verify매개변수가 어떤 사용자의 계정에 접근하는지 확인하는 데 사용되는 것을 알 수 있습니다.


계정에서 로그아웃하고, Burp Repeater에 요청을 보냅니다 . GET /login2의 매개변수 verify값을 carlos로 변경하고 요청을 보냅니다. 이렇게 하면 Carlos에게 임시 2FA 코드가 생성됩니다.


로그인 페이지로 이동하여 사용자 이름과 비밀번호를 입력하세요. 그런 다음 유효하지 않은 2FA 코드를 제출하세요.
POST /login2Burp Intruder에 요청을 보내세요 .

Burp Intruder에서 verify매개변수 설정을 carlos로 변경하고 페이로드 위치를 mfa-code매개변수에 추가합니다. 검증 코드를 무차별 대입 공격합니다. (무료에서는 너무 오래걸리니 500개씩 잘라서 공격하는 것을 추천)

추가. Brute forcer로 할 수도 있지만, 유료버전이 아니면 1만개를 다 수행하려면 4시간도 부족하다..

브라우저에 302 응답을 로드하고, 카를로스 계정의 세션 토큰을 복사합니다.

'내 계정'을 클릭하여 과제를 해결하세요.(방법1, 2)

방법1.

방법2.

2FA 인증 코드 무차별 대입 공격

비밀번호와 마찬가지로 웹사이트는 2단계 인증 코드에 대한 무차별 대입 공격을 방지하기 위한 조치를 취해야 합니다. 특히 이 코드가 대개 4자리 또는 6자리 숫자로 이루어져 있기 때문에 더욱 중요합니다. 적절한 무차별 대입 공격 방지 대책이 없다면 이러한 코드를 해킹하는 것은 매우 쉽습니다.

일부 웹사이트는 사용자가 일정 횟수 이상 잘못된 인증 코드를 입력하면 자동으로 로그아웃시키는 방식으로 이를 방지하려고 합니다. 하지만 숙련된 공격자는 Burp Intruder용 매크로를 만들어 이러한 다단계 과정을 자동화할 수 있기 때문에 실제로는 효과적이지 않습니다. Turbo Intruder 확장 프로그램 또한 이러한 목적으로 사용될 수 있습니다.