2021/01/14 - [프로젝트/DVWA 실습] - DVWA 실습 #7 - Insecure CAPTCHA
문제 해결 방법
이번 단계에서는 비밀번호 변경 요청 및 확인 두 과정을 거쳐야 한다. 이는 실습 페이지에 step 파라미터로 전달되는 값으로 구분하는데 본래 정상적인 요청이라면 다음처럼 동작한다.
먼저 비밀번호 입력 폼에 변경될 비밀번호를 입력하고 CAPTCHA를 통과한다. 그리고 버튼을 클릭하면 CAPTCHA를 통과했다는 메시지가 출력되고 Change 버튼을 눌러 비밀번호 변경을 확정 짓는다. 이때 개발자 도구에서 전송된 요청 값을 보면 step 파라미터로 1이 들어간 것을 알 수 있다. 하지만 이는 입력 폼에 나타나지 않았는데 그렇다면 예전에 CSRF 토큰을 폼의 hidden 필드로 넣어서 전달했던 것처럼 숨겨진 필드로 존재하는 게 아닐까? 일단 계속 진행해 보기로 했다.
이후 비밀번호 변경 확인 페이지에서 step 파라미터에 2가 전달된 것을 볼 수 있다. 원래 개발자의 의도는 CAPTCHA로 step 1에서 인증한 후 비밀번호 변경을 확정짓는 step 2로 넘어오길 원한 것이겠지만 step 1을 거치지 않고 step 2로 진행한다고 해도 이를 인증하는 로직은 딱히 보이지 않는다. 그래서 CAPTCHA 자체는 문제가 없으니 이를 둘러싼 로직이 불충분하여 CAPTCHA를 우회할 수 있는 것이다.
HTML 코드를 살펴보니 역시 폼에 hidden 태그로 step 파라미터가 삽입된 것을 확인할 수 있었다.
그렇다면 이를 2로 수정하여 step 2 요청을 보내고 CAPTCHA 인증을 거치지 않고 비밀번호 변경 시도를 하면 어떻게 될까?
위 그림처럼 CAPTCHA를 아예 건들지도 않았음에도 불구하고 비밀번호가 변경되는 것을 볼 수 있었다. 즉 CAPTCHA를 우회할 수 있었으며 이것이 악용되면 CSRF 공격으로 로그인한 사용자 모르게 비밀번호를 변경시킬 수 있다.
'프로젝트 > DVWA 실습' 카테고리의 다른 글
DVWA 실습 #7-3 - Insecure CAPTCHA(high) (0) | 2021.01.15 |
---|---|
DVWA 실습 #7-2 - Insecure CAPTCHA(medium) (0) | 2021.01.15 |
DVWA 실습 #7 - Insecure CAPTCHA (0) | 2021.01.14 |
DVWA 실습 #6-3 - File Upload(high) (1) | 2021.01.14 |
DVWA 실습 #6-2 - File Upload(medium) (0) | 2021.01.14 |