暴力破解

Brute Force

暴力破解一般指穷举法,穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。

一.low
首先进行代码审计,在DVWA目录下找到Brute Force文件夹,查看它的核心代码。

<?php 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 = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful $html .= "

Welcome to the password protected area {$user}

"; $html .= " "; } else { // Login failed $html .= "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>

1.sql注入
username:admin’ or ‘1=1
password:不写

绕过了验证,注入成功。本来语句中是这样的

SELECT * FROM users WHERE user = ‘ u s e r ′ A N D p a s s w o r d = ′ user' AND password = ' userANDpassword=pass’
当我们输入username之后就变成了这样

SELECT * FROM users WHERE user = ‘admin’ or ‘1=1’ AND password = ‘$pass’
所以,只要验证出用户名为admin就可以成功登录。

2.burpsuit
1.查看本地的IP地址

2.通过本地地址来登陆部署好的DVWA网站,登陆的账户名为admin,密码为password。

3.登陆以后点击DVWA Security,更改难度为low

4.在firefox的preferences–>settings修改代理为127.0.0.1:8080

5.打开burpsuite,一路next–>start burp,打开之后在proxy–>options设置代理为127.0.0.1:8080,然后在intercept设为ON

6.在DVWA的Burte force输入账号密码,随便输就行,在BurpSuite中进行抓包拦截

7.点击send to Intruder发送到intruder进行破解,快捷键是Ctrl +l,

8.在Intruder–>positions添加破解的变量

9.在payloads中添加字典,可以手动添加,也可以导入密码本

10.在positions中设置攻击方式

Sniper标签 这个是我们最常用的,Sniper是狙击手的意思。这个模式会使用单一的payload【就是导入字典的payload】组。它会针对每个position中$$位置设置payload。这种攻击类型适合对常见漏洞中的请求参数单独地进行测试。攻击中的请求总数应该是position数量和payload数量的乘积。

Battering ram – 这一模式是使用单一的payload组。它会重复payload并且一次把所有相同的payload放入指定的位置中。这种攻击适合那种需要在请求中把相同的输入放到多个位置的情况。请求的总数是payload组中payload的总数。简单说就是一个playload字典同时应用到多个position中

Pitchfork – 这一模式是使用多个payload组。对于定义的位置可以使用不同的payload组。攻击会同步迭代所有的payload组,把payload放入每个定义的位置中。比如:position中A处有a字典,B处有b字典,则a【1】将会对应b【1】进行attack处理,这种攻击类型非常适合那种不同位置中需要插入不同但相关的输入的情况。请求的数量应该是最小的payload组中的payload数量

Cluster bomb – 这种模式会使用多个payload组。每个定义的位置中有不同的payload组。攻击会迭代每个payload组,每种payload组合都会被测试一遍。比如:position中A处有a字典,B处有b字典,则两个字典将会循环搭配组合进行attack处理这种攻击适用于那种位置中需要不同且不相关或者未知的输入的攻击。攻击请求的总数是各payload组中payload数量的乘积。

11.点击 start attck,根据length排序,和其他不同的那个密码是对的。

二.medium
首先进行代码审计,在DVWA目录下找到Brute Force文件夹,查看它的核心代码。

<?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 mysql_escape_string() 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( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful $html .= "

Welcome to the password protected area {$user}

"; $html .= " "; } else { // Login failed sleep( 2 ); $html .= "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>

比起low级别的代码,medium里面添加了这一部分

p a s s = ( ( i s s e t ( pass = ((isset( pass=((isset(GLOBALS["___mysqli_ston"]) && is_object(KaTeX parse error: Expected group after '_' at position 10: GLOBALS["_̲__mysqli_ston"]…GLOBALS["___mysqli_ston"], $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? “” : “”));
mysql_real_escape_string这个函数会对字符串中的特殊符号(x00,n,r,’,”,x1a)进行转义,基本上能够抵御sql注入攻击。所以这里我们只用Burpsuite进行暴力破解。

步骤跟low难度里面的一样。

先打开DVWA,设置好代理,然后输入账号密码经行抓包。获取到如下内容

发送到intruder进行破解,先加入密码本

然后用sniper进行破解,找到不一样的那一串

所以密码为password,在DVWA上登陆成功

三.high
首先进行代码审计,在DVWA目录下找到Brute Force文件夹,查看它的核心代码。

<?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 = ((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 = stripslashes( $pass ); $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); $pass = md5( $pass ); // Check database $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful $html .= "

Welcome to the password protected area {$user}

"; $html .= " "; } else { // Login failed sleep( rand( 0, 3 ) ); $html .= "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } // Generate Anti-CSRF token generateSessionToken(); ?>

将DVWA调至high级别,发现用之前的暴力破解就不好使了,因为其使用了随机token机制来防止CSRF,使用了stripslashes函数和mysqli_real_esacpe_string来抵御SQL注入和XSS的攻击,从而在一定程度上防止了重放攻击,增加了爆破难度。但是依然可以使用burpsuite来爆破。

1.用burpsuite进行拦截,发现新增加了user_token参数,所以我们需要选择两个参数进行爆破。

2.设置两个参数password和user_token为变量,攻击类型选择pitchfork–它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),遍历所有的Payload.

3.在options里面设置参数,启用Grep-Extract,用于提取相应消息中的有用信息,点击Add,然后按下图设置。最后,将Redirections设置为Always。

4.在payload中,第一个参数跟之前一样添加字典

第二个参数,类型选择为Recursive grep–表示将服务器每次返回的数据来替换payload中的变量值,这里用来每次替换user_token的值。再将下面的初值设为token当前的值。

5.进行暴力破解,找到密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值