BUUCTF Brute 1使用BurpSuite爆破详解

最近研究一下白帽子安全,主要关注WEB安全,在做完了常规的靶场xsslab、SQLI、DVWA、Pikachu后,了解了白帽子安全的基础知识。进一步开始用一些CTF来练习。本文是从BUUCTF网站上,去解一个WEB的Flag的详细记录。

0x00 打开BUUCTF,打开靶机

BUUCTF的地址在这里:BUUCTF在线评测 (buuoj.cn),进入后选择Basic->BUU BRUTE1.

952db95b661479416197f5521a7c608f.png

选择BUU BRUTE 1后,创建靶机。

fef21b63a4a3ba86cc343ffb1ab182d7.png

点击其中的靶机URL,即可打开靶机,进入对应的WEB程序。

ce7445720ef5fea2c0a718f5d1eeac2f.png

Now, let's go to hack it!

0x01 对登录过程的初步分析

在进行爆破之前,分析一下这个登录界面的登录过程。如果在用户名和密码都未知的情况下,进行用户名、密码的组合尝试爆破,那么尝试次数非常庞大,假设用户名字典有10000个用户名,密码字典有10000个密码,那么意味着要进行10000*10000次的尝试。

如果能够单独先测试用户名,得到用户名后再测试密码,那么尝试次数会大幅度地降低,把尝试次数减少到10000*m+10000次(m为探测出的合法用户名数)。

能够做出判断的依据,是用户名错误、密码错误上,能不能从response中得到差异,只要能找到差异,就能够单独的进行用户名测试、单独进行密码测试。我们看看这一题中,差异在哪里(It's really obvious since it's a course!).

6e536fd45d7fde4def549e48ca60e8b9.png

抓包看一下,会单独提示”用户名错误“,因此估计可以单独进行用户名的猜测爆破,找到合法的用户名。

找到合法的用户名后,即可指定合法用户名,再对密码进行爆破。

0x02 对用户名进行爆破,寻找合法用户名

打开靶机,输入一个用户名和密码;在BurpSuite上打开网络拦截,断住由浏览器访问靶机上的HTTP数据。

c6d0138ba9c79107e8b9b833a90de8fb.png

下面是BurpSuite断住的HTTP数据:

4c7216bbe7f271b33e0bb6b7f417e40c.png

可以看到主要的可测试参数username和password。先对username进行爆破测试,密码维持me123456,不进行尝试。

为了对username进行爆破,对其添加payload positions,如下图:

50808adcca7e0363cb44ce8b0a4ee416.png

下一步设置payloads的值,即确定用户名字典,以进行用户名的批量测试。

如下图:

a306b0102da13461bfb2b17afb793794.png

a.Payload type

    由于我们是从用户名字典文件里,提取探测的用户名列表;所以类型选择Simple List即可。后面的Reqeuest Count,提示的是进行探测的payload的数量。

b. Payload Options
    由于从文件里导入用户名列表,所以选择”Load",选择好字典文件,自动会把文件里的内容加载得到列表里。

设置好position和payload后,启动爆破,start attack! But... 很快我们看到了不期望的情况:

b800e461a5a0e6d2cf80526c0539382b.png

Too Many Reqests! 服务端检测到过快的登录尝试,进行了屏蔽。猜测是短时间爆破的次数太多了,对应的解决方法,是减少并发线程数和每次访问的时间间隔。经过几次尝试,确定合理的线程数是1(单线程),时间间隔为100毫秒,即1秒钟进行10次尝试,不会导致服务端进行访问拦截。经过测试,找到了合法的用户名:

9700eebf1b4be2033ce0ac1441302be9.png

根据Length进行排序,找到返回长度显著异于其它请求的payload,打开对应的Response,内容为“ 密码错误,为四位数字”。 说明这个payload里的用户名,用户名合法,只是密码错误了。经过这个过程我们确定了两个重要信息:

  1. admin是一个合法的用户名

  2. 密码是四位数字,从0000到9999.

依据这两个重要信息,进行下一步密码的爆破测试。

0x03 对登录密码的爆破,寻找正确的密码

在有了过程2的两个信息后,确定了下一步进行爆破的方向:对用户admin进行密码的探测。先对payload position进行修改,把尝试的位置,从用户名专项密码;同时把用户名设置为admin。

eaa86a0fdc11781f0966f803b53d8230.png

下一步设置payloads内容,清除上一步选择的用户名信息,设置密码的探测内容,由于密码为4为整数,所以在payload type里,我们选择类型为Numbers。如下图:

7f0bfc76d6cb6cef0b14a885a538a539.png

由于是四位整数,所以最小值为0,最大值为9999,设置递增步长为1,以探测每一个从0到9999的数字;由于密码为4位,所以对应不足四位的,需要以0补齐四位数。设置Min integer digits和Max integer digits的长度为4,设置小数点位数Min(Max) fraction digits为0. 此时可以在Example里,看到对应的payload的生成格式。

为了避免被服务端因访问频繁而阻断,依据探测name时的经验,设置线程数为1,访问间隔为100毫秒:

7bd8cc3df82cfebb6ed68e724923fd7d.png

OK, Lets start attack! 我们从attack结果里,很快发现了一个与众不同的payload:

5d2574685b1da346aaedd701630f44e6.png

打开Response,看到内容:登录成功。flag{xxxx-xxx}, 拿着flag去靶机的页面输入,闯关成功。

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值