暴力破解法,或称为穷举法,是一种密码分析的方法,即将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试9999次就能找到正确的密码。理论上除了具有完善保密性的密码以外,利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。有些人运用计算机来增加效率,有些人辅以字典来缩小密码组合的范围。
1 low level
使用工具破解
Brupsuite Intruder模块 暴力破解测试
1.1 源码分析:
if( isset( $_GET[ 'Login' ] ) ) {
// Get username
$user = $_GET[ 'username' ];
// Get password
$pass = $_GET[ 'password' ];
$pass = md5( $pass );
// Check the 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
echo "<pre><br />Username and/or password incorrect.</pre>";
}
mysql_close();
}
查看源码,只验证了参数Login是否被设置,没有任何的防爆破机制。
2 medium level
使用工具破解
Brupsuite Intruder模块 暴力破解测试依然可以爆破
2.1 源码分析:
else {
// Login failed
sleep( 2 );
echo "<pre><br />Username and/or password incorrect.</pre>";
}
在low level源码的基础上做了修改,添加了登陆失败需等待2秒才返回结果,但依然无法防范爆破。
3 high level
通过Brupsuite Intruder抓包发现,除了原先的username,password,Login参数外,还新增了一个user_token参数。
3.1 分析:
1.user_token为了防止CSRF,在每次登陆过后都会失效然后返回一个新的user_token Value值用于登陆时提交,防止跨站请求伪造。
2.使用Brupsuite Intruder模块中的Recursive grep,对服务器响应内容中的user_token Value进行抓取用于下一次爆破时user_token参数的填充。
3.由于Intruder第0次请求会把抓取的原请求发送过去,再进行字典爆破,导致到利用字典爆破时,user_token参数会失效,从而服务器并不会返回响应内容。
4.经过测试发现,一旦提交错误的user_token参数,服务器会从新加载一次页面,并且会返回一个新的user_token Value,利用这一点,开启Intruder options中的允许Redirections 。
注:由于字典的第一次爆破会失效,用于从新加载页面,所以需把字典的第一个密码多提交一次。
5.Impossible level
暂时无解,全集终。