1、DVWA通关——Brute Force(暴力破解)

文章目录

  • 一、关于burp的四种模式
    • 1.1 Sniper(狙击手)
    • 1.2 Battering ram(攻城锤)
    • 1.3 Pitchfork(草叉模式)
    • 1.4 Cluster bomb(集束炸弹)
  • 二、LOW
    • 2.1 通关思路
    • 2.2 代码分析
  • 三、Medium
    • 3.1 通关思路
    • 2.2 代码分析
  • 四、high
    • 4.1 通关思路
    • 4.2 代码分析
  • 五、总结

  暴力破解的成功概率,一方面取决于被攻击系统是否有防暴力破解机制,防暴力破解机制是否高效,另一方面取决于攻击者的字典以及计算机性能。

一、关于burp的四种模式

1.1 Sniper(狙击手)

  这个模式会使用单一的payload组。它会针对变量位置设置payload。例如:

(1)添加了一个参数的话,并且假设payload有500个的话,那就执行500次。
在这里插入图片描述
(2)添加了两个参数的话,就会挨着来,第一个参数开始爆破时,第二个不变。如此这样,会进行500+500次,总共1000次爆破。
在这里插入图片描述

1.2 Battering ram(攻城锤)

  和狙击手差不多,一个参数的话都一样,只不过如果添加了两个参数的话,就使用同样的payload一起进行爆破。总共会进行500次爆破。
1、DVWA通关——Brute Force(暴力破解)_第1张图片

1.3 Pitchfork(草叉模式)

  相比于Battering ram模式,Pitchfork的两个payload可以使用不同的字典。
1、DVWA通关——Brute Force(暴力破解)_第2张图片

1.4 Cluster bomb(集束炸弹)

  Cluster bomb不仅可以设置多个参数,而且在爆破一个参数的时候,其他参数都会固定。
1、DVWA通关——Brute Force(暴力破解)_第3张图片

二、LOW

2.1 通关思路

(1)首先观察页面,发现只要输入的用户名或者密码有一个错误,就回显“Username and/or password incorrect.”,多次输错密码,也没有提示用户被锁定不准继续尝试登录。因此,这关大概率没有防暴力破解机制。

1、DVWA通关——Brute Force(暴力破解)_第4张图片
(2)抓包 → \rightarrow "send to intruder" → \rightarrow 设置变量"usename"和"pawword",并选择"Cluster bomb"模式。
1、DVWA通关——Brute Force(暴力破解)_第5张图片
(3)点击"stack",根据"length"查看响应包。
1、DVWA通关——Brute Force(暴力破解)_第6张图片

2.2 代码分析

1、DVWA通关——Brute Force(暴力破解)_第7张图片
  几个函数:

  • mysql_query()函数:执行某个针对数据库的查询。
  • die() 函数:输出一条消息,并退出当前脚本。
  • mysql_num_rows()函数:返回结果集中行的数量,就是看有几行结果。
  • mysql_result()函数:返回 MySQL 结果集中一个单元的内容。

  代码将获取用户输入的用户名和密码并将其进行 md5 加密,然后使用 SQL SELECT语句进行查询。由于进行了 md5 加密,因此直接阻止了 SQL 注入,因为经过 md5 这种摘要算法之后 SQL 语句就会被破坏。

  注意到此时服务器只是使用了 isset() 函数验证了参数 Login 是否被设置,参数 username、password 没有做任何过滤,更重要的是没有任何的防爆破机制。

三、Medium

3.1 通关思路

(1)首先还是观察页面。medium和low大致是一样的,只要输入的用户名或者密码有一个错误,就回显“Username and/or password incorrect.”,并且多次输入错误的用户名和密码,也没有提示用户被锁定不准继续尝试登录。
1、DVWA通关——Brute Force(暴力破解)_第8张图片

  唯一不同的是,medium关卡输错用户名密码之后,会延迟一段时间再返回登录失败的结果。应该是服务器端做了登录失败情况下的sleep操作,企图通过延时降低暴力破解的效率。

(2)这关的通关方法和Low关一模一样,就是慢点,这里就不再赘述了。

2.2 代码分析

1、DVWA通关——Brute Force(暴力破解)_第9张图片

  几个函数:

  • mysql_real_escape_string()函数:转义在 SQL 语句中使用的字符串中的特殊字符,如\x00\n\r\'"\x1a

  Medium 级别的代码主要增加了 mysql_real_escape_string函数,该函数会对字符串中的特殊符号进行转义,从而对用户输入的参数进行了简单的过滤。而且,当登录验证失败时界面将冻结 2 秒,从而影响了爆破操作的效率。

四、high

4.1 通关思路

(1)随便输入用户名和密码,然后抓包,发现登陆时有token。
1、DVWA通关——Brute Force(暴力破解)_第10张图片
(2)遇到token,有三招:

  • 删除token后发包;
  • 使用同一个token,重放;
  • 使用burp得插件CSRF Token Tracker,根据规则从reponse报文中找到token并使其他模块发送报文时自动更新新的token。

第一招,删除token后发包,不行。
1、DVWA通关——Brute Force(暴力破解)_第11张图片
  第二招,重放,也不行。
1、DVWA通关——Brute Force(暴力破解)_第12张图片
  第三招,使用burp得插件CSRF Token Tracker 。在extensions中找到CSRF Token Tracker,并安装。
1、DVWA通关——Brute Force(暴力破解)_第13张图片
  勾选extension loaded

1、DVWA通关——Brute Force(暴力破解)_第14张图片

  Host就是请求包里面的那个host,Name指的是你要抓取返回页面中哪个标签的name属性。
在这里插入图片描述
1、DVWA通关——Brute Force(暴力破解)_第15张图片

  使用CSRF Token Tracker插件的原理:你提交用户名密码后,burp捕获这个数据包,然后你将这个数据包send to repeatersend发送给服务端,服务端发送响应包, CSRF Token Tracker插件捕获响应包中的user_token。大概意思是这样的。

(3)进行爆破。

  注意:抓到数据包后,直接send to intruderCSRF Token Tracker插件会自动从第一个相应包token的值。

1、DVWA通关——Brute Force(暴力破解)_第16张图片

1、DVWA通关——Brute Force(暴力破解)_第17张图片
1、DVWA通关——Brute Force(暴力破解)_第18张图片
1、DVWA通关——Brute Force(暴力破解)_第19张图片
1、DVWA通关——Brute Force(暴力破解)_第20张图片

4.2 代码分析

Brute Force Source
<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // 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 );

    // Check database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $result = mysql_query( $query ) or die( '
' . mysql_error() . '
'
); if( $result && mysql_num_rows( $result ) == 1 ) { // Get users details $avatar = mysql_result( $result, 0, "avatar" ); // Login successful echo "

Welcome to the password protected area {$user}

"
; echo "{$avatar}\" />"; } else { // Login failed sleep( rand( 0, 3 ) ); echo "

Username and/or password incorrect.
"
; } mysql_close(); } // Generate Anti-CSRF token generateSessionToken(); ?>

  几个函数:

  • isset():用于检测变量是否已设置并且非 NULL。
  • checkToken():自定义函数,判断请求包中的token和服务端保存的token是否一致。
  • stripslashes():去除\
  • mysql_real_escape_string():转义在 SQL 语句中使用的字符串中的特殊字符,如\x00\n\r\'"\x1a

  High 级别的代码使用了stripslashes 函数,会过滤输入的内容。同时使用了 Token 抵御 CSRF 攻击,在每次登录时网页会随机生成一个 user_token 参数,在用户提交用户名和密码时要对 token 进行检查再进行 sql 查询。

五、总结

  由于服务器没有对用户的输入次数进行限制,导致攻击者可以利用爆破的手段来进行攻击,通过穷举法将用户名、密码等信息爆出来。当攻击者结合社会工程学生成了庞大的字典时,爆破攻击的可能性将会被增大。对于爆破漏洞,开发者可以对用户的登陆次数设置阈值,当某用户名表示的用户的登录次数在一定时间内超过阈值时,就暂时锁定用户。也可以进行 IP 检测,如果某个 IP 的登录次数超过阈值也可以锁定 IP。当然还有一种我们熟悉的方式,就是设置只有人可以通过验证的验证码或者是其他的验证手法,来保证进行登录操作的是人而不是机器。

你可能感兴趣的:(DVWA,安全,php)