Pikachu靶场:基于表单的暴力破解

Pikachu靶场:基于表单的暴力破解

实验环境以及工具

Firefox浏览器、Burp Suite、Pikachu靶场

实验原理

账号密码的强度取决于密码长度、复杂性、不可预测性。所有的密码都可以通过穷举的方法来进行破解,所以强度本身也可以用被破解的时长来衡量。使用如Burp Suite等工具可以根据密码字典来对密码进行暴力破解,字典的强度来决定破解的可行度和效率。

实验步骤

1.前期工作

先将Proxy中的intercept关闭,使其不进行拦截,让数据通过监听的端口。
在这里插入图片描述

先找到正确口令与错误口令页面返回结果的区别。

先输入正确口令
20210404151712423

返回一个login success
20210404151724768

这里我再账号密码均输入qqq

在这里插入图片描述
返回一个username or password is not exists~(后面会用到)
在这里插入图片描述

在Burp Suite里查看Proxy中HTTP history,可以看到一个POST,在Request中可以看到输入的username和password。在Response中可以看到username or password is not exists~

在这里插入图片描述
在这里插入图片描述
然后将文件发送到Intruder
在这里插入图片描述

2.使用Intruder进行破解

Intruder主要介绍如下图

在这里插入图片描述

2.1 Sniper(单字典,单position替换尝试)

使用Clear删除多余的变量,只留下账号和密码

20210404143627079

切换到Payloads,进行字典的设置,可以使用Simple list手动在下面添加,也可以使用Runtime file添加字典,这里使用Runtime file。
在这里插入图片描述

字典文件如下图(其中admin/123456是正确的的口令)

在这里插入图片描述

在这里插入图片描述

设置好了如下图,然后点击Start attack开始攻击

转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eC0akVl3-1617521685006)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210404144124911.png)]
查看攻击结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFBAUk7N-1617521685007)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210404144337616.png)]

在这里插入图片描述

Sniper模块进行了一个字典内所有秘钥的单position替换尝试,很显然没有找到用户名为admin,密码为123456的口令。

2.2 Battering ram(单字典,多个Position同个秘钥尝试)

将攻击模块切换为Battering ram

在这里插入图片描述

切换到Payloads,发现还是只能选一个Payload set,即一个字典,那么接着用之前的字典。

在这里插入图片描述

查看结果

在这里插入图片描述

发现username和password是同样的值,显然没有找到用户名为admin,密码为123456的口令。

2.3 Pitchfork(多个字典,同序号进行替换)

将模块切换为Pitchfork

在这里插入图片描述

这时候发现Payload set能够加入多个字典,这里只有两个变量,所以只能加入两个字典。

在这里插入图片描述

20210404145958257

查看结果,并且与字典进行对比

在这里插入图片描述

在这里插入图片描述

发现Pitchfork将字典中的秘钥根据序列号进行了一一对应,即字典1的序列为1的秘钥无法对应字典2序列为非1的秘钥。显然没有找到用户名为admin,密码为123456的口令。

2.4 Cluster bomb(多字典,多行对应多行的尝试)

切换为Cluster bomb模块

在这里插入图片描述

字典依旧使用之前的两个字典,然后单击Start attack开始攻击

在这里插入图片描述

在这里插入图片描述

然后单击length可以看到一个长度比较小的,因为密码错误(username or password is not exists~)和密码正确(login success)所弹出的字符串长度不一样,所以可以根据返回页面的长度来判断是否成功。

在这里插入图片描述

查看Response里的内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SGMvWf8-1617521685014)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210404152244666.png)]

下面尝试用另一种方法来判断是否成功。

在Intruder的Option中找到Grep-Match

清除多余的字符串,添加 username or password is not exists 这个字符串,这样会将所有返回 username or password is not exists 的页面进行标记,即打上flag。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pzr3BD3J-1617521685015)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210404152606915.png)]

Start attack开始攻击,然后点击新加上的行(username or password is not exists)进行排序,可以看到破解成功的口令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jW4fUJms-1617521685015)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210404153030580.png)]

总结

将Proxy的Intercept拦截关闭后,通过手动访问目标网页,然后提交表单后,在Proxy的HTTP history中找到最新的POST请求,将其发送到Intruder中进行破解。在使用Intruder破解时,要根据实际情况来选择模块和标记。好的字典能够提高破解的效率。

以下是一个基于 PHP 语言实现的暴力破解漏洞防御机制示例代码,可以在Pikachu靶场中使用: ```php <?php session_start(); // 开启会话 // 判断请求是否为POST请求 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 获取表单数据 $username = $_POST['username']; $password = $_POST['password']; $captcha = $_POST['captcha']; // 判断验证码是否正确 if (strtolower($captcha) !== strtolower($_SESSION['captcha'])) { echo '验证码错误!'; exit; } // TODO: 进行登录验证 } else { // 判断是否存在登录错误次数的会话变量 if (!isset($_SESSION['login_error_count'])) { $_SESSION['login_error_count'] = 0; } // 判断登录错误次数是否达到限制 if ($_SESSION['login_error_count'] >= 5) { echo '登录错误次数已达到上限,请稍后再试!'; exit; } // 生成验证码图片 $image = imagecreatetruecolor(100, 30); $bgcolor = imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $bgcolor); // 生成随机验证码 $captcha = ''; for ($i = 0; $i < 4; $i++) { $fontsize = 6; $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120)); $fontcontent = rand(0, 9); $captcha .= $fontcontent; $x = ($i * 100 / 4) + rand(5, 10); $y = rand(5, 10); imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); } // 保存验证码到会话中 $_SESSION['captcha'] = $captcha; // 输出验证码图片 header('Content-Type: image/png'); imagepng($image); // 销毁图片资源 imagedestroy($image); } ``` 上述代码中,在判断请求不是POST请求的分支中,增加了对登录错误次数的限制。首先判断是否存在登录错误次数的会话变量,如果不存在,则初始化为0。然后判断登录错误次数是否达到限制(这里设置为5次),如果达到限制,直接输出错误信息并退出程序。如果没有达到限制,则继续生成验证码图片并输出给客户端。 这种基于服务器端的暴力破解漏洞防御机制,可以有效防止自动化程序对表单进行暴力破解攻击。同时,通过限制登录错误次数,还可以防止攻击者使用暴力破解密码的方式进行攻击。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值