포스트

Authentication 실습(1) - Username enumeration via subtly different responses (PortSwigger Academy)

로그인 실패 메시지의 미묘한 차이를 이용해 유효한 username을 식별하고 brute-force로 계정을 탈취하는 공격

Authentication 실습(1) - Username enumeration via subtly different responses (PortSwigger Academy)

Lab: Username enumeration via subtly different responses

Lab Link: Username enumeration via subtly different responses


핵심 포인트

이 lab의 취약점은 로그인 실패 응답이 완전히 동일하지 않다는 점이다.

표면적으로는 "Invalid username or password." 라는 에러 메시지를 반환한다.

하지만 실제로는 특정 username에 대해 응답 메시지에 미묘한 차이가 존재하며, 이 차이를 이용하여 유효한 username을 식별할 수 있다.

이후에 마찬가지로 password wordlist를 이용해 brute-force공격을 수행하면 계정에 로그인할 수 있다.

1. Wordlist 준비

이번 실습에는 PortSwigger Academy에서 제공한 아래 username과 password wordlist를 사용한다:
Username: https://portswigger.net/web-security/authentication/auth-lab-usernames
Password: https://portswigger.net/web-security/authentication/auth-lab-passwords


Solution

1. 로그인 요청 확인

먼저 아무 username과 password로 로그인을 시도한다.

Burp 에서 해당 요청을 확인하고 Brute-force 공격을 위해 Intruder 로 전송 해주자.


2. Username enumeration

Burp Intruder에서 username을 payload position으로 설정한다.

설명

Payload type은 Simple list를 선택, 이후 랩에서 제공된 username wordlist를 입력해주자.

설명

공격 시작.

설명

응답 간에 status code, response, length에서 큰 차이가 없는걸 볼 수 있다.

이때 공격자는 응답으로 돌아오는 로그인 에러 메시지의 일부분을 필터링 할 수 있다.

Grep - Extract 기능을 사용해 응답에서 에러 메시지를 추출해보자.

설명

설명

기본 응답 메시지인 invalid username or password.라는 문구로 필터링 해서, 응답이 다른 항목이 있다면 존재하는 유저일 가능성이 크다.

설명

username을 accounts로 입력했을때 메시지 맨 뒤에.이 없다는걸 확인할 수 있다.

따라서 우리는 accounts실제 존재하는 계정 이라고 유추할 수 있다.

3. Password Brute-force

이제 찾은 accounts를 username에 고정하고 password를 찾기 위해 brute-force를 진행한다.

마찬가지로 attack payload를 password로 변경,
PortSwigger에서 제공한 password wordlist를 사용하여 공격을 실행해준다.

결과:
설명

password는 비교적 쉽게 HTTP 응답 필터링 Redirect (302) 으로 654321 이라는걸 찾아낼 수 있었다.

이후에

1
2
Username: accounts
Password: 654321

찾아낸 계정 정보로 로그인 하면 사용자 페이지에 접근할 수 있고 lab이 마무리 된다.


정리

이 취약점의 핵심은 로그인 실패 응답이 완전히 동일하지 않다는 점이다.

겉으로 보기에는 같은 메시지를 반환하는 것처럼 보이지만
실제로는 공백, 문장 길이, 철자 등의 차이가 존재했다.

이 작은 차이만으로도 공격자는 유효한 username을 식별할 수 있다.

유효한 username을 확보한 뒤에는 password brute-force 공격을 수행해
계정 탈취가 가능해진다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.