方法二:SQL注入
<?php
if( isset( $_GET[ 'Login' ] ) ) { $user = $_GET[ 'username' ];
$pass = $_GET[ 'password' ]; $pass = md5( $pass );
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
if( $result && mysqli_num_rows( $result ) == 1 ) { $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"];
echo "<p>Welcome to the password protected area {$user}</p>"; echo "<img src=\"{$avatar}\" />"; } else { echo "<pre><br />Username and/or password incorrect.</pre>"; }
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); }
?>
|
通过观察上面的代码可以发现在下面语句
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
|
可以通过admin ‘#绕过

Command Injection
命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
源代码
<?php
if( isset( $_POST[ 'Submit' ] ) ) { $target = $_REQUEST[ 'ip' ];
if( stristr( php_uname( 's' ), 'Windows NT' ) ) { $cmd = shell_exec( 'ping ' . $target ); } else { $cmd = shell_exec( 'ping -c 4 ' . $target ); }
echo "<pre>{$cmd}</pre>"; }
?>
|
PHP stristr()函数
PHP php_uname()函数
ping -c 4 这里的4是指设置完成要求回应的次数。

CSRF
跨站请求伪造漏洞
本质就是在不知情的情况下执行请求
GET和POST俩种类型
主要是看抓包能不能抓到参数并且修改
<?php
if( isset( $_GET[ 'Change' ] ) ) { $pass_new = $_GET[ 'password_new' ]; $pass_conf = $_GET[ 'password_conf' ];
if( $pass_new == $pass_conf ) { $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 );
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';"; $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>' );
echo "<pre>Password Changed.</pre>"; } else { echo "<pre>Passwords did not match.</pre>"; }
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); }
?>
|
这里可以通过构造链接的方法:
http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
当受害者点击了这个链接,他的密码就会被改成123456

但这种连接容易被人看出来,也可以通过写一个简单的html页面来攻击
因为前面改了123456所以这里用password
这时用123456来登陆就不行了
