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。

 

posted @ 2021-04-27 13:09  Erichas  阅读(99)  评论(0)    收藏  举报