도카이트

[DVWA] Insecure CAPTCHA (Medium) 본문

Web/DVWA

[DVWA] Insecure CAPTCHA (Medium)

dodoh4t 2022. 5. 26. 20:49
728x90
반응형

페이지 화면

[DVWA - Insecure CAPTCHA]

- 소스코드를 바로 확인해보자 !

 

 

소스코드

// Check CAPTCHA from 3rd party
    $resp = recaptcha_check_answer(
        $_DVWA[ 'recaptcha_private_key' ],
        $_POST['g-recaptcha-response']

// Did the CAPTCHA fail?
    if( !$resp ) {
        // What happens when the CAPTCHA was entered incorrectly
        $html     .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
        $hide_form = false;
        return;
    }
    else {
        // CAPTCHA was correct. Do both new passwords match?
        if( $pass_new == $pass_conf ) {
            // Show next stage for the user
            echo "
                <pre><br />You passed the CAPTCHA! Click the button to confirm your changes.<br /></pre>
                <form action=\"#\" method=\"POST\">
                    <input type=\"hidden\" name=\"step\" value=\"2\" />
                    <input type=\"hidden\" name=\"password_new\" value=\"{$pass_new}\" />
                    <input type=\"hidden\" name=\"password_conf\" value=\"{$pass_conf}\" />
                    <input type=\"hidden\" name=\"passed_captcha\" value=\"true\" />
                    <input type=\"submit\" name=\"Change\" value=\"Change\" />
                </form>";
        }

// Check to see if they did stage 1
    if( !$_POST[ 'passed_captcha' ] ) {
        $html     .= "<pre><br />You have not passed the CAPTCHA.</pre>";
        $hide_form = false;
        return;
    }

- Low 난이도와 달라진 코드 부분만 짜깁기하여 가져왔다 !

- g-recaptcha-response 값을 POST 방식으로 요청하여 reCAPTCHA를 검증 하는듯 하다.

- $resp 변수의 값이 일치하지 않는 경우, CAPTCHA가 올바르지 않다는 에러를 출력한다.

- <pre> 태그 부분부터가 CAPTCHA가 정상적으로 통과될 시의 로직인 듯하다.

- step 값을 2로, password_new와 _conf 값을 요청받고, passed_captcha 값을 true로,

  Change 값을 Change로 POST 방식을 통해 요청받는 듯 하다.

 

 

새로 추가된 부분과 변경된 부분들을 코드를 통해 충분히 살펴보았으니 바로 우회를 시도해보자!

늘 그래왔듯이 패킷 변조를 하기 위해 Burp Suite를 실행한다 !

 

 

Burp Suite를 통한 Packet Intercept

[Burp Suite를 통한 패킷 변조]

- 변경할 password를 입력한 후, reCAPTCHA 인증을 하지 않고 Change 버튼을 클릭하여 submit한다.

- 이 때 패킷을 Intercept하면, step 값이 1이며, g-recaptcha-response는 값이 설정되어 있지 않은 것을 확인할 수 있다.

- 위 소스코드 분석에서 확인한 바와 같이 reCAPTCHA 통과 조건에 맞게 step 값을 2로, g-recaptcha-response를

  passed_captcha=true로 값을 변조하여 패킷을 Forward 해준다.

 

 

패스워드 변경 완료 화면

[패스워드 변경 성공]

- reCAPCHA 인증을 하지 않았음에도, 인증이 우회되어 패스워드가 변경되었다.

 

 

패스워드 변경 확인

[패스워드 변경 확인]

- 패스워드 변경 검증을 위해 CSRF 탭의 Test Credentials를 이용하였다.

- 설정한 패스워드로 정상적으로 변경이 완료되었음을 확인할 수 있다!

728x90

'Web > DVWA' 카테고리의 다른 글

[DVWA] Blind SQL Injection (Medium)  (0) 2022.05.26
[DVWA] SQL Injection (Medium)  (0) 2022.05.26
[DVWA] File Upload (Medium)  (0) 2022.05.26
[DVWA] File Inclusion (Medium)  (0) 2022.05.26
[DVWA] CSRF (Medium)  (0) 2022.05.26
Comments