DVWA V1.9:Brute Force(暴力破解)
Brute Force 介绍
密码破解是从计算机系统中存储或传输的数据中恢复密码的过程。
一种常见的方法是反复尝试对密码进行猜测。
用户经常选择弱密码。
不安全选择的例子包括字典中发现的单个单词、姓氏、任何太短的密码(通常被认为小于6或7个字符)或可预测的模式(例如交替元音和辅音,这被称为LeTalk,因此“密码”变成“p@ 55 W0RD”)。
创建针对目标生成的有针对性的词表,通常给出最高的成功率。
这里有一些公共工具,将基于公司网站、个人社交网络和其他常见信息(如生日或毕业年)的组合来创建词典。
最后一个办法是尝试所有可能的密码,称为蛮力攻击。
理论上,如果没有尝试次数的限制,暴力攻击总是成功的,因为可接受密码的规则必须是公开的;但是随着密码长度的增加,可能的密码的数量也会增加攻击时间。
Low 级别
核心代码
<?php
if( isset( $_GET[ 'Login' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Sanitise username input
$user = $_GET[ 'username' ];
$user = stripslashes( $user );
$user = mysql_real_escape_string( $user );
// Sanitise password input
$pass = $_GET[ 'password' ];
$pass = stripslashes( $pass );
$pass = mysql_real_escape_string( $pass );
$pass = md5( $pass );
// Check database
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
if( $result && mysql_num_rows( $result ) == 1 ) {
// Get users details
$avatar = mysql_result( $result, 0, "avatar" );
// Login successful
echo "<p>Welcome to the password protected area {
$user}</p>";
echo "<img src=\"{
$avatar}\" />";
}
else {
// Login failed
sleep( rand( 0, 3 ) );
echo "<pre><br />Username and/or password incorrect.</pre>";
}
mysql_close();
}
// Generate Anti-CSRF token
generateSessionToken();
?>
可以看到,服务器只是验证了参数Login是否被设置(isset函数在php中用来检测变量是否设置,该函数返回的是布尔类型的值,即true/false),没有任何的防爆破机制,且对参数username、password没有做任何过滤,存在明显的sql注入漏洞。
官方提示
开发商完全错过了任何保护方法允许任何人尝试他们希望的次数,登录到任何用户没有任何影响。
漏洞利用
方法一:
使用burp抓包,发到intruder模块,加载字典进行爆破。
根据返回长度可以判断password为密码,使用admin和password登录,是ok的。
方法二:
我们发现它存在sql注入漏洞,进行利用。
admin'