CAPTCHA 는 사람과 컴퓨터를 구별하기 위한 절차를 수행한다. 이번에는 이 CAPTCHA 가 포함되어 있는 로그인 페이지에서 아이디/패스워드를 크랙하는 공격을 수행해보겠다.
bee-box 환경에서 실습해보자!
Level - low, medium, high
로그인 페이지에서 로그인에 성공하면 위와 같은 메시지를 출력해준다.
CAPTCHA 문자는 제대로 입력했지만 아이디/패스워드를 잘못 입력했을 경우는 위와 같은 메시지를 출력해준다.
이제 이 출력 메시지를 이용하여 공격을 수행해보겠다. Burp suite 의 Intruder 기능을 이용하면 Brute Force 공격이나 사전 공격을 자동화하여 수행할 수 있다.
CAPTCHA 문자만 정확히 입력한 뒤 burf suite 를 통해 패킷을 잡고 Intruder 로 보내준다.
그리고 나서, Intruder 의 Positions 부분으로 이동하여 Clear 를 통해 기존의 설정을 지워주고 Position 부분에서 login 과 password 부분에만 페이로드를 선택해준다. Attack type 은 Cluster bomb 를 선택한다. Cluster bomb 는 Payload Position 만큼 Payload set을 설정한 뒤, 첫 번째 Payload set 을 반복 삽입하면서 동시에 두번째 Payload set을 차례대로 반복 삽입한다. 나중에 결과값을 보면 어떤 방식인지 확실히 알 수 있을 것이다.
그 다음 Payloads 부분에서 set 1(login) 과 set 2(password) 의 type 을 Simple list 로 설정하고 리스트들을 추가한다. 그러면 설정한 리스트들의 조합으로 로그인 정보를 찾아낼 것이다. brute force 공격은 시간이 오래 걸리기 때문에 이번에는 CAPTCHA 를 우회한다는 것에 의미를 두고 실습을 진행하겠다.
그 다음, Options 부분에서 Grep - Match 에 있는 기존의 예시들을 지워주고 아래와 같이 로그인 페이지의 실패 메시지를 추가해준다.
이제 우측의 Start attack 버튼을 눌러주면 공격이 수행된다.
위의 결과를 보면 attack type 을 Cluster bomb 로 설정했기 때문에 5 * 4 만큼의 결과가 나온다. 그리고 Greb - Match 에 설정해준 Invalid ... 문자열에 체크가 된 것은 로그인 결과 창에 그 문자열이 출력되었다는 것이다. 때문에 체크가 되어있지 않은 bee/bug 조합이 성공한 로그인 조합임을 알 수 있다.
bee/bug 조합의 Response 를 보면 "Successful login!" 메시지가 출력된 것을 볼 수 있다.
소스코드 분석
captcha.php 에서 랜덤 값을 만들어주고 captcha_box.php -> ba_captcha_bypass.php 순으로 값을 전달해준다.
medium, high level 일 때, captcha 값의 존재와 일치 여부를 확인한다. 이 captcha 값은 Reload 버튼이나 직접 로그인 버튼을 누르지 않는다면 값이 변하지 않기 때문에 공격이 가능했다.
'웹 취약점(bee-box)' 카테고리의 다른 글
Broken Authentication - Password Attack (0) | 2020.04.16 |
---|---|
Broken Authentication - Forgotten Function (0) | 2020.04.14 |
XSS - Stored(Change Secret) (0) | 2020.04.13 |
XSS - Stored(Blog) (0) | 2020.04.13 |
XSS - Reflected(User-Agent) (0) | 2020.04.13 |