DVWA系列Brute Force
DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。
brute Force "暴力**"是指黑客利用密码字典,使用穷举法猜解出用户口令,是现在最为广泛使用的攻击手法之一,如2014年轰动全国的12306“撞库”事件,实2质2就2是2暴力**攻击。
1、首先打开DVWA(可利用metasploitable2靶机)登录(admin、 password)
2、在view source中观察不同安全等级的代码,可以发现如下信息。
Low Brute Force Source
<?php
if( isset( $_GET['Login'] ) ) {
$user = $_GET['username'];
$pass = $_GET['password'];
$pass = md5($pass);
$qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
$result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );
if( $result && mysql_num_rows( $result ) == 1 ) {
// Get users details
$i=0; // Bug fix.
$avatar = mysql_result( $result, $i, "avatar" );
// Login Successful
echo "<p>Welcome to the password protected area " . $user . "</p>";
echo '<img src="' . $avatar . '" />';
} else {
//Login failed
echo "<pre><br>Username and/or password incorrect.</pre>";
}
mysql_close();
}
?>
low级别是一个简单的登录的代码,仅仅对密码进行了MD5加密。没有任何过滤。
Medium Brute Force Source
<?php
if( isset( $_GET[ 'Login' ] ) ) {
// Sanitise username input
$user = $_GET[ 'username' ];
$user = mysql_real_escape_string( $user );
// Sanitise password input
$pass = $_GET[ 'password' ];
$pass = mysql_real_escape_string( $pass );
$pass = md5( $pass );
$qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
$result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );
if( $result && mysql_num_rows($result) == 1 ) {
// Get users details
$i=0; // Bug fix.
$avatar = mysql_result( $result, $i, "avatar" );
// Login Successful
echo "<p>Welcome to the password protected area " . $user . "</p>";
echo '<img src="' . $avatar . '" />';
} else {
//Login failed
echo "<pre><br>Username and/or password incorrect.</pre>";
}
mysql_close();
}
?>
medium级别的代码和low级别的代码比较不同点在于加了层mysql_real_escape_string( );
mysql_real_escape_string();
http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp(函数的解释和使用方式)
由此可见该函数的功能为防止SQL Injection攻击,
1、也就是你必须验证用户的输入
2、操作数据的时候避免不必要的字符导致错误
High Brute Force Source
<?php
if( isset( $_GET[ 'Login' ] ) ) {
// 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 );
$qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
$result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' );
if( $result && mysql_num_rows( $result ) == 1 ) {
// Get users details
$i=0; // Bug fix.
$avatar = mysql_result( $result, $i, "avatar" );
// Login Successful
echo "<p>Welcome to the password protected area " . $user . "</p>";
echo '<img src="' . $avatar . '" />';
} else {
// Login failed
sleep(3);
echo "<pre><br>Username and/or password incorrect.</pre>";
}
mysql_close();
}
?>
high级别的代码和medium级别相比又加了stripslashes()函数
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
对于这个可以先弱口令、万能密码测试。如果无果,则进行暴力**。
3、首先配置burp suite,我使用的是这个版本的burp。此处解释下burp的使用,https://blog.****.net/weixin_38079422/article/details/80729158
4、正式进行暴力**,输入猜测的用户名和密码(根据已经收集的相关信息)
使用burp 截包
右键发送到intruder
给需要测的部分加$符,然后添加字典
点击start attack
等待,得出结果。
可以看到password的响应包长度(length)“与众不同”,可推测password为正确密码,手工验证登陆成功。