본문 바로가기

프로젝트/DVWA 실습

DVWA 실습 #7-2 - Insecure CAPTCHA(medium)

2021/01/14 - [프로젝트/DVWA 실습] - DVWA 실습 #7 - Insecure CAPTCHA

 

DVWA 실습 #7 - Insecure CAPTCHA

DVWA의 여섯 번째 실습 대상인 Insecure CAPTCHA다. 현재 문제에서는 CAPTCHA를 이용하여 비밀번호 변경 기능을 다른 프로그램이 공격하지 못하도록 방어하고 있다. 이 잘못 적용된 CAPTCHA 시스템을 악용

haruhiism.tistory.com

문제 해결 방법

이번 단계에서는 비밀번호 변경 과정(step 1, step 2) 사이에 인증 로직을 적용하기 위해 새로운 헤더가 추가되었다. 변경할 비밀번호를 입력하고 CAPTCHA를 통과하는 것까지는 동일하지만 step 2에 대한 요청에는 'passed_captcha' 파라미터가 true 값으로 설정되어있는 것을 확인할 수 있다.

이전 단계처럼 숨겨진 step 요소를 수정하면 다음처럼 CAPTCHA를 통과하지 못했다는 에러 메시지가 출력된다.

CAPTCHA를 수행하고 step 2로 넘어왔는지 바로 step 2로 넘어왔는지 어떻게 아는 것일까? 이는 파라미터 이름으로만 봐도 'passed_captcha'가 그 인증 토큰 역할을 수행한다는 것을 추측할 수 있다. 그래서 HTML 코드를 수정하여 passed_captcha라는 항목을 하나 만들어서 'true' 값을 삽입해주거나 Burp Suite같은 프락시 툴을 이용하여 요청을 수정하여 우회할 수 있다. 아래처럼 passed_captcha 항목에 true 값을 삽입한 후 step 항목도 2로 수정해서 비밀번호 변경 요청을 보냈더니 CAPTCHA를 수행하지 않아도 비밀번호가 변경된 것을 볼 수 있다.

이번 단계에서는 step 1과 step 2 사이의 인증을 구현하려고 했지만 노출된 파라미터로 인증하는 바람에 쉽게 우회되는 것을 볼 수 있었다. 그런데 굳이 비밀번호 변경 요청과 변경 확인 로직을 나누어야 할까? 그래서 다음 단계부터는 하나로 합쳐진다.