当前位置: 首页 > news >正文

Web应用模糊测试完全指南

Fuzzing Web Apps Full Guide

前言

在这篇博客中,我将解释如何使用ffuf进行目录发现、子域名枚举、暴力破解攻击、参数挖掘等操作。

速查表

ffuf

  • FUZZ:放置payload的位置
  • -u:目标URL
  • -w:字典文件
  • -fc:过滤响应头
  • -fs:过滤响应大小
  • -mc:匹配响应代码
  • -p:请求之间的暂停秒数
  • -t:线程数

字典
我将使用seclists进行所有枚举操作。

目标
我们的目标网站:http://ffuf.me

基础内容发现

我们将进行基本的目录和文件枚举

ffuf -u http://ffuf.me/cd/basic/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/basic/FUZZ:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt:: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________class                   [Status: 200, Size: 19, Words: 4, Lines: 1, Duration: 68ms]
development.log         [Status: 200, Size: 19, Words: 4, Lines: 1, Duration: 63ms]
:: Progress: [4727/4727] :: Job [1/1] :: 543 req/sec :: Duration: [0:00:08] :: Errors: 0 ::

我们找到了/class/development.log

递归模糊测试

ffuf -u http://ffuf.me/cd/recursion/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -recursion
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/recursion/FUZZ:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt:: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________admin                   [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 65ms]
[INFO] Adding a new job to the queue: http://ffuf.me/cd/recursion/admin/FUZZ
[INFO] Starting queued job on target: http://ffuf.me/cd/recursion/admin/FUZZ
users                   [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 67ms]
[INFO] Adding a new job to the queue: http://ffuf.me/cd/recursion/admin/users/FUZZ
[INFO] Starting queued job on target: http://ffuf.me/cd/recursion/admin/users/FUZZ
96                      [Status: 200, Size: 19, Words: 4, Lines: 1, Duration: 76ms]
:: Progress: [4727/4727] :: Job [3/3] :: 330 req/sec :: Duration: [0:00:08] :: Errors: 0 ::

我们找到了/admin/users/96

添加扩展名

当我们访问/logs时得到403,所以我们将尝试模糊测试日志文件。

ffuf -u http://ffuf.me/cd/ext/logs/FUZZ -e .log -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/ext/logs/FUZZ:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt:: Extensions       : .log :: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________users.log               [Status: 200, Size: 19, Words: 4, Lines: 1, Duration: 70ms]
:: Progress: [9454/9454] :: Job [1/1] :: 581 req/sec :: Duration: [0:00:17] :: Errors: 0

非404页面

这次不存在的页面返回200,所以我们可以通过状态码进行过滤。

ffuf -u http://ffuf.me/cd/no404/FUZZ -e .log -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -fs 669
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/no404/FUZZ:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt:: Extensions       : .log :: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500:: Filter           : Response size: 669
________________________________________________secret                  [Status: 200, Size: 25, Words: 4, Lines: 1, Duration: 94ms]

参数挖掘

这次页面因为缺少参数而返回400

ffuf -u "http://ffuf.me/cd/param/data/?FUZZ=data" -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/param/data/?FUZZ=data:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt:: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________debug                   [Status: 200, Size: 24, Words: 3, Lines: 1, Duration: 77ms]

速率限制

这次端点有每秒50个请求的速率限制,超过后我们会收到429状态码。

所以我将启动50个线程,并在每个线程的每个请求后暂停1秒。这样我们总共每秒有50个请求。

我将只显示200和429状态码。

ffuf -u http://ffuf.me/cd/rate/FUZZ -p 1 -t 50 -mc 200,429  -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/rate/FUZZ:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt:: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 50:: Delay            : 1.00 seconds:: Matcher          : Response status: 200,429
________________________________________________oracle                  [Status: 200, Size: 19, Words: 4, Lines: 1, Duration: 74ms]

管道

我们将测试几个用户的IDOR漏洞。

首先我们将迭代1到1000

seq 1 1000 | ffuf -u http://ffuf.me/cd/pipes/user?id=FUZZ -w -
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/cd/pipes/user?id=FUZZ:: Wordlist         : FUZZ: -:: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________657                     [Status: 200, Size: 13, Words: 3, Lines: 1, Duration: 64ms]
:: Progress: [1000/1000] :: Job [1/1] :: 571 req/sec :: Duration: [0:00:02] :: Errors: 0 ::

如果需要,我们也可以对数字进行base64编码

seq 1 1000 | hashit b64 | ffuf -w - -u http://ffuf.me/cd/pipes/user2?id=FUZZ

或者进行md5哈希

seq 1 1000 | hashit md5 | ffuf -w - -u http://ffuf.me/cd/pipes/user3?id=FUZZ

虚拟主机发现

简单来说,虚拟主机是在单个服务器上托管多个域的方法。

我们试图发现在我们目标服务器上可能托管了哪些其他服务器,从而扩大我们的攻击面。

我们可以通过模糊测试Host头来实现这一点,因为它负责确定我们试图访问哪个服务器,并过滤响应大小。

ffuf -u http://ffuf.me/ -H "Host: FUZZ.ffuf.me" -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-20000.txt -fs 1495
/'___\  /'___\           /'___\              
/\ \__/ /\ \__/  __  __  /\ \__/              
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\              
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/              
\ \_\   \ \_\  \ \____/  \ \_\                \/_/    \/_/   \/___/    \/_/              
v2.1.0-dev
________________________________________________:: Method           : GET:: URL              : http://ffuf.me/:: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-20000.txt:: Header           : Host: FUZZ.ffuf.me:: Follow redirects : false:: Calibration      : false:: Timeout          : 10:: Threads          : 40:: Matcher          : Response status: 200-299,301,302,307,401,403,405,500:: Filter           : Response size: 1495
________________________________________________redhat                  [Status: 200, Size: 15, Words: 2, Lines: 1, Duration: 89ms]

暴力破解攻击

捕获请求

POST /login HTTP/1.1
Host: 10.10.10.10
Content-Length: 37
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Content-Type: application/json
Origin: http://10.10.10.10
Referer: http://10.10.10.10/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close{"username":"USERFUZZ","password":"PASSFUZZ"}

用占位符文本替换字段

有不同的攻击模式,类似于burp的intruder

ffuf -request request.txt -request-proto http -mode clusterbomb -w /path/to/users/file.txt:USERFUZZ -w /path/to/password/file.txt:PASSFUZZ -mc 200

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.zskr.cn/news/49812.html

相关文章:

  • 【HT-086-Div.2】错乱的集合
  • WEditor的使用方法
  • 感情粉末沿着试管边缘 在祝福中逐渐分解 加热认知离子重新排列 于底部悲伤沉淀
  • flask: 抛出异常
  • 雪地奔驰全等级提升所需经验一览
  • 2025皮肤亚健康管理品牌最新专业推荐:科技赋能健康美新生态
  • 深入解析:Vue3 路由配置和使用与讲解(超级详细)
  • HubSpot如何规模化推进AI编码助手应用
  • 完整教程:OpenHarmony内核基础:LiteOS-M内核与POSIX/CMSIS接口
  • 常量指针 和 指针常量 - const pointer and pointer to const
  • 11.14模拟赛
  • 实用指南:云计算生态及学习方向和就业领域方向
  • 2025年11月徐州AI GEO平台综合评测与权威推荐
  • 2025年国内徐州宣传片公司品牌权威推荐榜单
  • 好题集 (2) - LG P4550 收集邮票
  • 腾讯元宝如何导出内容为文档
  • 洛谷 P4242. 树上的毒瘤
  • Number Theory
  • 实用指南:【STM32】RTC实时时钟
  • 探索乐泰胶水:性能与适用场景全解析
  • 【System Beats!】第七章 链接
  • 实用指南:接口测试 | 使用Postman实际场景化测试
  • 应用程序建立的数据库连接,也就是非交互式连接 是什么时候开始的?什么时候结束?连接结束后 会影响应用程序操作db失败吗? 还有就是如果连接关闭了 会立马重新建立新的连接吗?
  • #题解#洛谷P1884#二维离散化#
  • HarmonyOS应用配置文件与资源组织深度解析 - 教程
  • 2025厨房/无烟管/商用/复合式/内循环/小型/油烟净化/一体机推荐榜:上海多环五星领跑 全场景适配解锁餐饮 / 家用净化新体验
  • 2分钟选刊!值得农林环境人收藏的6个期刊!境科研人必备!
  • 2025武汉车出租厂家推荐榜:防撞车出租/高空车出租/登高车出租/服务体验与高性价比深度解析
  • 2025试验机厂家推荐榜:万能试验机/高低温试验机/钢丝绳试验机专精之选
  • 革命你的 Git 提交消息 - GIM 1.8.0 发布了!