找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 197|回复: 0

☆ buuctf -- Basic-4 BUU BRUTE 1

[复制链接]

2万

主题

162

回帖

18万

积分

管理员

积分
184732
发表于 2022-9-15 17:13:29 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
buuctf -- Basic-4 BUU BRUTE 1
简单fuzz后可知是一个四位密码的爆破,brupsuite或者脚本都可以解决。网上有很多简单的教学。但是该题有一个问题就是会报429请求过多的错误。使用brupsuite线程开高了会触发报错,导致错过很多测试,线程开低的话速度又很慢。脚本的话速度就快很多了。参考了一下别人的脚本,但是他并没有处理429错误,于是这里改进一下:
[Python] 纯文本查看 复制代码
import time
import requests

url="http://23b71b6s-f202-4f59-9ab1-q19fcv1cda91.node4.buuoj.cn:81/?username=admin&password="

for i in range(6400, 7000):
    res = requests.get(url + str(i))
    print(" Try :" + str(i))
    if "429" in res.text:
        time.sleep(0.5)
        i = i-1
        continue
    if res.text != "密码错误,为四位数字。":
        print(res.text)
        break

当遇到429错误时会休息一段时间(0.5s)并重新测试这次的密码。

原作者脚本地址:https://blog.csdn.net/qq_40432713/article/details/122577082


最近研究一下白帽子安全,主要关注WEB安全,在做完了常规的靶场xsslab、SQLI、DVWA、Pikachu后,了解了白帽子安全的基础知识。进一步开始用一些CTF来练习。本文是从BUUCTF网站上,去解一个WEB的Flag的详细记录。
0x00 打开BUUCTF,打开靶机
BUUCTF的地址在这里:BUUCTF在线评测 (buuoj.cn),进入后选择Basic->BUU BRUTE1.

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


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

在进行爆破之前,分析一下这个登录界面的登录过程。如果在用户名和密码都未知的情况下,进行用户名、密码的组合尝试爆破,那么尝试次数非常庞大,假设用户名字典有10000个用户名,密码字典有10000个密码,那么意味着要进行10000*10000次的尝试。
如果能够单独先测试用户名,得到用户名后再测试密码,那么尝试次数会大幅度地降低,把尝试次数减少到10000*m+10000次(m为探测出的合法用户名数)。
能够做出判断的依据,是用户名错误、密码错误上,能不能从response中得到差异,只要能找到差异,就能够单独的进行用户名测试、单独进行密码测试。我们看看这一题中,差异在哪里(It's really obvious since it's a course!).
输入
    用户名:test
    密码:1
回应:
        用户名错误。

输入
    用户名:admin
    密码:1
回应:
        密码错误,为四位数字。

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

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

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

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

下面是BurpSuite断住的HTTP数据:


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

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

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

如下图:

a.Payload type

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

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

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


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

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

  • admin是一个合法的用户名

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


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

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

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


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

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

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

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

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



from: https://blog.csdn.net/bill_fang/article/details/126576938



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-5-5 09:13

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表