Docker中启动LocalDVWA容器,准备DVWA环境。在浏览器地址栏输入http://127.0.0.1,中打开DVWA靶机。自动跳转到了http://127.0.0.1/login.php登录页面。输入默认的用户名密码admin:password登录。单击页面左侧的DVWA Security,进行安全级别设置,如图3-18所示。
图3-18 DVWA安全级别
DVWA的安全级别有4种,分别为Low、Medium、High和Impossible。先选择最低的安全级别,单击Submit按钮确认选择。
单击页面左侧的BruteForce按钮,进入暴力破解测试页面,单击View Source按钮,如图3-19所示。
图3-19 Low Brute Force源代码
获取的代码如下:
<?php if( isset( $_GET[ 'Login' ] ) ) { // Getusername $user =$_GET[ 'username' ]; // Getpassword $pass =$_GET[ 'password' ]; $pass =md5( $pass ); // Checkthe 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 echo"<p>Welcome to the password protected area {$user}</p>"; echo"<img src="{$avatar}" />"; } else { //Login failed echo"<pre><br />Username and/or passwordincorrect.</pre>"; } ((is_null($___mysqli_res =mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
从代码中可以看出,服务器没有对输入的用户名和密码做任何的检查,直接就进行了SQL查询。这种情况用SQL注入也非常的方便,但这里测试的是暴力破解。
浏览器启用SwitchyOmega的Burp Suite模式,启动Burp Suite监听本地的8080端口。在页面中任意输入一个用户名和密码,如图3-20所示。
图3-20 DVWA发送数据到Burp Suite
关闭浏览器其他的标签页,避免干扰。启动Burp Suite,打开Proxy标签页的Intercept项,将项目按钮调整成Intercept is on,如图3-21所示。
图3-21 Burp Suite拦截
回到DVWA页面中,单击Login按钮。浏览器向服务器127.0.0.1发送数据,通过127.0.0.1:8080端口,被Burp Suite拦截。Burp Suite显示拦截下来的数据,如图3-22所示。
图3-22 拦截的数据
在Raw的文本框中单击鼠标邮件,在弹出的菜单中选择Send toIntruder选项,Burp Suite将拦截得到的数据发送给了Intruder,进行选择、分析,如图3-23所示。
图2-23 Send Data to Intruder
单击Burp Suite的Intruder标签,选择Positions项目。这里是暴力破解的主战场,可以看到Intruder已经将页面发送数据中所有可爆破的参数都标示出来了,如图2-24所示。
图2-24 Intruder项目
这里所有标示出来的参数都是可以用于暴力破解的。实际上只需要暴力破解username和password这两个参数就可以。单击Clear$按钮。清除所有备选目标,然后选择需要暴力破解的两个参数username和passowrd,单击Add$按钮,将这两个攻击目标的参数标示起来,如图2-25所示。
图3-25 选择暴力破解目标
再来看看Intruder项目的攻击模式Attack type。Intruder的攻击模式有4种。分别为Sniper、Battering ram、pitchfork、Cluster Bomb模式。
Sniper是狙击模式,这种模式适合单一的目标参数破解。以本次破解为例,如果已知了用户名username,那就只需要暴力破解密码password就可以了。这就是单一的目标参数破解。只需要给一个字典,Intruder就用这个字典中的所有密码测试一遍。假设已给出密码字典为[a, b, c, d],破解方式为:
Password ------------- a b c d
Battering ram是撞击模式,这种模式不管有多少个目标参数破解,都只用一个密码字典。以本次破解为例,有两个目标参数需要破解,Intruder将密码字典中的密码同时给这两个目标,假设已给出密码字典为[a, b, c, d],破解方式为:
username | password a | a b | b c | c d | d
Pitchfork是交叉模式,这种模式中有多少个目标参数,就需要给多少个密码字典。以本次破解为例,有两个目标参数需要破解。假设给出的2个字典分别包含的是[1, 2]和[a, b, c, d]。Intruder将破解2次,破解方式为:
username | password 1 | a 2 | b
Cluster bomb是集束炸弹模式,这种模式的中有多少目标参数,就需要多少个密码字典。以本次破解为例,有两个目标参数需要破解。假设给出的2个字典分别包含的是[1, 2]和[a, b, c, d]。破解方式为:
username | password 1 | a 1 | b 1 | c 1 | d 2 | a 2 | b 2 | c 2 | d
本次破解有2个目标参数username和password,需要2个字典。选择Cluster bomb模式,如图3-26所示。
图3-26 Attack Type
单击Payloads标签,为目标设置字典。第一个目标参数是username,用户名一般就是[root, admin, administrator],将这几个用户名输入到第一个目标参数的密码字典中去,如图3-27所示。
图3-27 输入用户名到字典
第2个目标参数是password,将创建的weak_top25.txt文件作为密码字典就可以了,如图3-28所示。
图3-28 载入文件作密码字典
所有设置完毕后,单击Startattack按钮开始破解。最后得到的结果如图3-29所示。
图3-29 Low安全级别的破解
Length是从服务器返回数据的长度。只有一个长度与众不同,那这个用户名和密码必定是正确的。测试一下,回到DVWA的Brute Force项目,输入用户名和密码admin:password,单击Login按钮,返回的结果如图3-30所示。
图3-30 测试结果
验证用户名密码可用。暴力破解成功。
有兴趣的欢迎一起读这本书《11招玩转网络安全——用Python,更安全》