R's Hacking Daily Log

Authentication - Lab(2) 본문

Port Swigger/Authentication

Authentication - Lab(2)

hanhxx 2023. 5. 11. 13:00

Authentication - Lab (1)에 이어서 password 기반의 인증 체제에 대한 내용을 살펴보도록 하자. 

 

Flawed brute force protection

공격자는 성공적으로 계정을 해킹하기까지 무수히 많은 brute force 공격에 실패하게 된다.

따라서 brute force 보호는 프로세스를 자동화하기에 최대한 까다롭게 만들거나

로그인을 시도할 수 있는 속도를 늦추는 식으로 수행될 수 있다. 

 

 

** "프로세스를 까다롭게 만들다"는 말이 애매하게 들릴 수 있는 데 간단한 예시를 들자면!

이전 Lab 중에서 burp suite - Intruder를 이용해 brute force 공격을 했지만 response length가 다양하면서도

고유한 하나의 결과가 나오지 않아 결국 Grep - Extract를 사용한 경우가 있었다.

 

** 만약 server가 그 어떤 문구도 출력하지 않았다면 intruder를 사용해서 brute force를 실행했어도 일일이 결과를 확인해야 했다. 이처럼 공격자가 원하는 정보를 얻기까지 번거로움을 더하게 만든다고 생각하면 이해가 쉬울 듯하다!!

 

 

 

일반적인 방법으로는

1. 공격자가 접근하려고 시도한 계정이 여러 번 로그인에 실패할 경우, 일정 시간 동안 계정을 잠가 버리는 것. 

 

스마트폰도 pin이나 패턴을 정해진 횟수 이상 틀리면 일정 시간 동안 잠금해제가 불가능해지는 데 이런 경우가

위의 예시라 할 수 있다.

 

2. 빠르게 연속적인 로그인 시도를 하는 경우, 사용자의 ip를 차단

 

 

위의 두 가지 방법은 꽤나 효과적인 방법이지만 로직에 결함이 있는 경우에는 취약해질 수밖에 없다.

 

 

 

예를 들어,

여러 번 로그인에 실패하는 경우 ip가 차단되는 상황에서 로그인에 성공하는 계정이 있다면

로그인 시도 횟수가 초기화된다. 

 

다시말해, 공격자가 쉽게 자신의 계정을 만들 수 있다고 한다면

wordlist에 일정 간격으로 자신의 계정 정보를 넣어 brute force 공격을 실행할 수 있다.

그렇게 되면 로그인 시도 횟수를 초과해 계정이 잠겨버리기 전에 로그인 횟수를 초기화할 수 있게 된다.

 

정확히 이해하기 위해 Lab을 풀어보자!!

 

 

 

Lab ) Broken brute-force protection. IP block

lab에 들어가서 My account를 누르면 login 페이지가 나오게 된다. 

 

 

lab에서 기본적으로 알려준 공격자의 계정으로 로그인을 해보면

!! username = wiener & password = peter

 

My account 페이지가 나오면서 username이 출력되는 걸 볼 수 있다.

이번 lab의 목표는 공격자가 자신의 계정을 갖고 있고 대상 계정의 이름이 carlos일 때

carlos 계정의 password를 알아내 로그인하는 것!!

 

 

목표 달성을 위해 해볼 수 있는 걸 생각해 보면 lab에서 제공해 주는 passwordlist를 사용해서

brute force 공격을 하는 것인데 문제는 

최대 로그인 가능 횟수가 3번이라는 것이다.

로그인 실패 횟수가 3번을 넘어가게 되면 1분 동안 로그인을 하지 못하는 거 같다.

 

 

그렇다면 로그인이 가능한 계정을 이미 갖고 있는 상황이기 때문에 로그인 실패 횟수가 3번을 넘어가기 전에

공격자의 계정으로 로그인해 횟수를 초기화시키면 될 거 같다!

 

 

공격을 실행하기 위해서 [wiener 1번 + carlos 2번]을 반복해서 passwordlist에 있던 password 개수만큼 list를 만들었다.

passwordlist도 username list 순서에 맞게 [wiener의 비밀번호 + 후보 비밀번호 2개]를 나열해 준다. 

 

 

이렇게 만드는 이유는 carlos의 비밀번호를 알아내기 위해 brute force 공격을 하려고 하는 데 로그인 실패 횟수가

3번을 넘어가면 계정이 일정 시간동안 잠겨버리기 때문이다.

 

 

lab과 같이 두 개의 계정을 이용해서 여러 개의 비밀번호를 대조해 본다고 할 때 burp suite에서는 

 

 

list 순서대로 username과 password를 매칭하기 때문에 password list가 더 존재하더라도 실행되지 않는다. 

그래서 wiener & carlos를 password list에 맞춰서 만들어준 것!

 

 

만들어준 list는 payload options에 load 해서 넣어준 다음 공격을 시작하면

 

 

wiener 계정은 response 크기가 178이고 carlos 계정은 3066인 걸 볼 수 있다.

아마 carlos의 password가 알맞게 매칭된 request의 경우에는 wiener와 똑같이 178 크기의 response가 올 것이다.

 

 

모든 공격이 끝나고 확인해보니, response 크기가 178인 carlos의 request가 있는 걸 볼 수 있다.

!! username = carlos & password = dragon

 

 

알아낸 정보로 로그인을 하면 성공적으로 carlos 계정으로 로그인된 걸 볼 수 있다!! (OoO)

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

Authentication - 2FA.Lab(2)  (0) 2023.05.21
Authentication - 2FA.Lab(1)  (0) 2023.05.21
Authentication - Lab(1)  (0) 2023.05.07
Authenticaiton (2)  (0) 2023.05.07
Authentication (1)  (0) 2023.05.03
Comments