Dvwa--Brute Force
Low
我们先用burp抓包

发送给intruder,先clear清楚掉所选变量,在add标记username 和password

爆破模式选择集束炸弹,字典就选默认的usernames 和passwords,通过字典破解就可以成功爆破了。

Middle
看看middle的源码,里面多了mysqli_real_escape_string函数对sql中的特殊字符作转义: NUL(ASCII 0)、\n、\r、\、'、" 和 Control-Z。并不影响爆破,只是不能sql注入。
还增加了登录失败seelp 2s,只是会爆破的慢一些,原理方法一样。
High
增加了token验证
<?php if( isset( $_GET[ 'Login' ] ) ) { // Sanitise username input $user = $_GET[ 'username' ]; $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); // Sanitise password input $pass = $_GET[ 'password' ]; $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass ) : ((trigger_error("[MySQLConverterToo] Fix the c() call! This code does not work.", E_USER_ERROR)) ? "" : "")); $pass = md5( $pass ); // Check the database $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 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful $html .= "<p>Welcome to the password protected area {$user}</p>"; $html .= "<img src=\"{$avatar}\" />"; } else { // Login failed sleep( 2 ); $html .= "<pre><br />Username and/or password incorrect.</pre>"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
还是可以爆破
impossible的增加了账号锁定,爆破就不现实了

我们选择草叉攻击,在options里面找到grep-Extract,add然后先刷新一下,在选定到token并复制下来

接下来再找到redirections模块,选择always允许重定向

然后再payload里面选择密码字典,token的部分选择recursive grep(这是通过服务器返回的token值来代替每次请求payload中的值),复制上刚才粘贴的值(第一次请求的token值)

开始攻击,发现报错,原来是草叉攻击只能有开1个线程,设置为一个线程开始爆破

大概就是这样的一种结果,我这里出了些问题,难度只有impossible的,他是作了登录失败过多就会锁定15分钟,high里面是没有的,是可以通过这种方法爆破出来的。

这里简单看一下四个爆破模式的区别
Sniper 狙击手
单个单个的爆破,如果添加1个参数有100个payload就爆破100次,如果有2个参数那么爆破就是第一个爆破时候,第二个不变,第二个爆破时候第一个不变,也就是分开的爆破,总共是200次爆破。
Battering ram 攻城锤
1个参数时和狙击手一样,2个参数时就是一起进行爆破,同时遍历,也就是会爆破100次。
Pitchfork 草叉
必须至少两个参数例如paylaod1:a,b payload2:c,d 会进行两次爆破,一次时a,c,一次是b,d ,如果两个payload数量不一样,那么就会取最小的数量为准来爆破。
Cluster bomb 集束炸弹
相当于草叉的强力版本,会逐个地取值进行爆破,payload1和payload2的笛卡儿积,ab,ad,bc,bd。

浙公网安备 33010602011771号