[웹해킹] CAPTCHA 공격 실습 - High 단계

이번에는 High 단계에서 실습해보자.

 

 

DVWA Security Level을 High로 설정한다. 이번에도 프록시 history 기능을 통해서 어떻게 전달 되는지 확인한다.CAPTCHA 메뉴로 가서 password는 normal을 입력하고, captcha 값을 입력해준다.

 

 

 

 

 

 

 

change 버튼을 누른다. 이번에는 두 단계에 걸치지 않고 바로 패스워드가 변경된다. 이제 Low, Medium 단계의 방식으로는 공격을 할 수 없게 되었다. 소스 코드를 한 번 살펴보자.

 

 

 

 

 

 

 

이 부분은 captcha가 실패했을 때 처리하는 부분이다. if문의 조건을 자세히 살펴보면 응답이 vaild 하지 않으면(!$resp->is_valid 부분) 뒤에 추가로 조건을 검사하고 있다. 그 조건은 'recaptcha response field의 값이 hidden value가 아니거나 user agent 헤더의 값이 recaptcha가 아니다' 라는 조건이다.

결국 이 조건을 다시 말하면 recaptcha response field 파라미터의 값이 hidden value 이고 user agent 헤더의 값이 recaptcha라면 괜찮다는 뜻이다. 이 값을 조작하여 요청을 전송해 본다.

 

 

 

 

 

 

이번에는 CAPTCHA가 제대로 입력되지 않았다는 것을 서버가 알아챘다. captcha에서 요구하는 값은 매 번 랜덤하게 생성되기 때문에 지금처럼 repeater로 옛날에 사용하던 값을 전송하더라도 이렇게 captcha가 틀렸다고 나오게 되는 것이다.

이번에는 recaptcha_response_field의 값을 바꾸고 user-agent 헤더의 값을 바꿔 본다. recaptcha_response_field에는 아까 소스에 나와 있었던  hidd3n_vaul3를 복사해 넣고 user-agent 부분도 reCAPTCHA 라고 입력한 후 Go를 누른다.

 

 

 

 

 

 

 

 

이번에는 패스워드가 변경되었다.


요청을 한 단계로 만든 것은 좋은 대응 방법이었지만 소스코드에서 본 것 처럼 특정한 값을 if문으로 검사하여 우회할 수 있는 코드를 넣은 것이 문제가 되었다. 이런 상황은 주로 개발자가 디버깅을 조금 더 편하게 하려고 할 때 발생 할 수 있다. 이런 코드가 포함되지 않도록 항상 주의 할 필요가 있다.

댓글

Designed by JB FACTORY