<?php
if( isset( $_GET[ 'Change' ] ) ) {
// 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>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
CSRF의 구성 코드이다.
이렇게 비밀번호를 바꾸는 기능이 구현 되어있다.
이전에 했던 Brute Force 창에서 admin과 password로 로그인을 했었는데 이 비밀번호를 바꿀 수 있다.
CSRF 창에서 비밀번호를 qwer로 바꾸고 다시 로그인을 해보면
이렇게 qwer로 로그인을 할 수가 있다.
그래서 CSRF 공격은 어떻게 하는지 고민했는데
XSS(Stored) 창에 게시글을 올릴 수 있는 페이지가 있었다.
여기에 CSRF 공격 코드를 게시글로 올려서 게시글을 조회하면 비밀번호가 바뀌게 공격을 할 수 있다.
<img src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=ddd&password_conf=ddd&Change=Change">
이렇게 올려 놓으면 된다.
그런데 게시글을 올리려고 하면 문제가 생길텐데 Max Length가 50으로 정해져 있기 때문이다.
이렇게 maxlength를 500으로 바꾸고 공격 코드를 올리면 된다.
이렇게 ddd로 로그인을 할 수 있게 된다.
'웹해킹 > DVWA' 카테고리의 다른 글
DVWA File Upload(low) 롸업 (0) | 2023.11.07 |
---|---|
DVWA File Inclusion(low) 롸업 (0) | 2023.11.07 |
DVWA Command Injection(low) 롸업 (0) | 2023.11.06 |
DVWA Brute Force(low) 롸업 (0) | 2023.11.06 |
DVWA 환경 구축 (0) | 2023.11.06 |