1. 项目概述:一份面向实战的漏洞挖掘“兵器谱”
看到这个标题,很多刚入行的朋友可能会觉得有点“标题党”,但作为一个在安全圈摸爬滚打了十多年的老鸟,我必须说,这背后反映的是一个非常真实且迫切的需求。网络安全漏洞挖掘,听起来高大上,但很多新人,甚至一些工作一两年的从业者,面对浩如烟海的攻击面和技术栈,常常感到无从下手,不知道从哪里“挖”起。他们可能学了一堆理论,看了很多漏洞原理,但一到实战,面对一个真实的系统、一个陌生的应用,大脑还是一片空白。这份所谓的“40个姿势”清单,其核心价值不在于数字本身,而在于它试图为这种迷茫提供一个系统化的、可操作的切入点地图。它不是教你从零到一发明一种新的攻击技术,而是帮你把已知的、成熟的、高成功率的攻击思路,按照不同的目标、不同的技术维度进行归类整理,让你在实战中能快速“对号入座”,像查字典一样找到可能的测试方向。这本质上是一份经过提炼的“攻击模式”或“测试用例”集合,目的是降低实战门槛,提升测试的系统性和覆盖率。
这份清单适合谁?首先是安全测试的初学者和中级从业者,他们需要快速建立对漏洞挖掘的全局观和手感。其次是企业的内部安全团队或渗透测试工程师,用于在红蓝对抗、渗透测试或代码审计中,作为检查清单(Checklist),避免遗漏常见的攻击向量。甚至对于开发人员,了解这些“姿势”也能在编码阶段就规避掉大量安全隐患。它的目标很明确:让你看完之后,面对任何一个新的目标,都能立刻想到至少三到五种可以尝试的切入点,而不是干瞪眼。接下来,我将结合自己多年的实战和带团队的经验,对这些“姿势”进行深度拆解,不仅告诉你“是什么”,更重点剖析“为什么”以及“怎么用”,并补充大量官方文档不会写的实操细节和避坑指南。
2. 漏洞挖掘的核心思路与分类框架
在罗列具体方法之前,我们必须先建立正确的挖掘思路。漏洞挖掘不是漫无目的地瞎碰,而是有策略、有层次的信息收集和逻辑推理过程。我把整个流程抽象为四个递进的阶段:信息测绘、攻击面枚举、漏洞模式匹配、深度利用与绕过。这份“40个姿势”清单中的每一项,都可以归入这个框架的某个环节。
2.1 从“侦察”到“打击”的完整链条
信息测绘
是地基。你的目标是什么?是一个IP地址、一个域名、一家公司还是一个特定的人?这个阶段的目标是尽可能全面地收集与目标相关的所有数字资产和关联信息。这不仅仅是简单的
ping
一下或者
nmap
扫个端口。它包括子域名枚举(利用证书透明度日志、DNS爆破、搜索引擎语法)、关联资产发现(通过Whois信息、ASN编号、云服务商标签查找同一主体下的其他IP段)、目录/文件扫描、技术栈指纹识别(Web框架、中间件、操作系统、前端库版本)、以及从GitHub、网盘等公开渠道泄露的代码、文档、配置文件。这个阶段越细致,你发现的攻击面就越广。很多高危漏洞,比如暴露的
.git
目录、备份文件、测试环境地址,都是在这个阶段被发现的。
攻击面枚举 是在测绘的基础上,识别出每一个可能接受用户输入、进行逻辑处理或对外提供服务的“入口点”。对于一个Web应用,这包括所有的URL参数(GET/POST)、HTTP头(如Cookie、User-Agent、X-Forwarded-For)、上传功能点、API接口、WebSocket连接、第三方组件(如编辑器、图表库)等。对于网络服务,则是开放的所有端口及其对应的协议(如SSH, FTP, RDP, Redis, MongoDB等)。对于移动应用,则是所有的本地存储、Intent通信、导出的组件等。这个阶段要做的就是列出一张详尽的“门和窗”的清单。
漏洞模式匹配 是核心的“姿势”应用阶段。根据前面识别出的攻击面类型和技术栈信息,从你的“兵器谱”(即漏洞知识库)中选取合适的“武器”进行测试。例如,发现一个上传点,就匹配文件上传漏洞的测试姿势;发现一个查询参数,就匹配SQL注入、XSS、SSRF等测试姿势;发现一个JSON格式的API,就匹配反序列化漏洞测试姿势;发现使用了特定的框架(如Struts2, ThinkPHP),就匹配该框架历史漏洞的利用姿势。这个过程是半自动化的,需要工具辅助,但更依赖测试者的经验判断。
深度利用与绕过 是在发现漏洞迹象或初步利用成功后,进一步提权、横向移动、获取核心数据或绕过防御措施(如WAF、输入过滤)的阶段。这需要更高级的技巧,比如混淆攻击载荷、利用不常见的协议、组合多个低危漏洞形成杀伤链等。
2.2 40个姿势的宏观分类
基于上述框架,我们可以将这40个姿势大致分为以下几类,这有助于你在实战中结构化地思考:
- 信息收集类姿势 :专注于扩大攻击面。例如:利用证书透明度(CT)日志挖掘子域名、通过GitHub搜索敏感信息泄露、利用Shodan/Censys进行全网资产测绘、通过JS文件提取新的API接口和参数等。
- Web通用漏洞类姿势 :针对Web应用的经典漏洞。例如:各种注入(SQLi, NoSQLi, Command Injection)、跨站脚本(XSS,包括存储型、反射型、DOM型)、跨站请求伪造(CSRF)、服务器端请求伪造(SSRF)、文件包含(LFI/RFI)、文件上传绕过、XML外部实体注入(XXE)等。
- 业务逻辑漏洞类姿势 :这类漏洞与具体业务功能强相关,自动化工具很难发现。例如:越权访问(水平越权、垂直越权)、业务流程绕过(如支付漏洞、抽奖逻辑漏洞)、竞争条件、密码重置逻辑缺陷、验证码绕过等。
- 中间件/框架/组件类姿势 :针对特定第三方软件的已知漏洞或错误配置。例如:Apache Struts2、Spring Framework、ThinkPHP的历史RCE漏洞利用;Redis、MongoDB未授权访问;Nginx错误配置导致的路径穿越或CRLF注入;Docker API未授权访问等。
- 网络服务与协议类姿势 :针对非Web端口的攻击。例如:SMB协议相关的永恒之蓝系列漏洞利用、SSH弱口令或公钥登录、FTP匿名访问、RDP的BlueKeep漏洞、SNMP协议信息泄露等。
- 客户端与移动端姿势 :包括浏览器漏洞、Office文档漏洞、PDF阅读器漏洞,以及Android/iOS应用的逆向、组件暴露、数据存储不安全等。
- 云与基础设施姿势 :随着云原生普及,这类姿势越来越重要。例如:AWS S3存储桶配置错误导致数据泄露、Kubernetes Dashboard未授权访问、云函数(Serverless)的权限配置错误、容器镜像仓库公开等。
- 社会工程学与钓鱼类姿势 :虽然偏“人”,但也是重要的攻击向量。例如:伪造登录页面的钓鱼、鱼叉式邮件攻击、利用公开信息进行身份冒充等。
这个分类不是绝对的,很多姿势会跨类别。但有了这个框架,你就知道在面对一个目标时,应该按什么顺序、从哪些维度去尝试这些“姿势”。
3. 关键姿势深度解析与实战要点
接下来,我将挑选几类最具代表性、实战中出现频率最高的“姿势”,进行深度拆解,并附上我个人的实操心得和避坑指南。
3.1 Web通用漏洞的“老炮儿”与“新秀”
SQL注入
:这绝对是元老级的漏洞,但远未过时。姿势的核心在于“猜”和“绕”。猜数据库类型(通过报错信息、函数差异如
substring
vs
substr
)、猜列数(
order by
)、猜输出点(
union select
)。但现代应用都有WAF,所以“绕”的技巧更重要。我的经验是:
-
注释符绕过
:
/*!50000select*/这种内联注释在MySQL中常被WAF忽略。 -
编码绕过
:双重URL编码、十六进制编码、Unicode编码。例如,将
SELECT编码为%53%45%4c%45%43%54。 -
等价函数/语句替换
:
sleep()可以用benchmark()替代;substr()可以用mid(),left(),right()替代。 -
HTTP参数污染(HPP)
:提交
id=1&id=2 union select 1,2,3,不同中间件解析参数顺序不同,可能绕过对单个参数的检测。
注意:盲注(Boolean-Based/Time-Based)在真实环境中更为常见,因为错误信息通常被屏蔽。这时候
sqlmap的--level和--risk参数调高,并结合--tamper脚本(如space2comment,randomcase)是必须的。
SSRF(服务器端请求伪造) :这是近年来非常火爆的漏洞类型,危害极大,因为它可以让攻击者将服务器作为跳板,攻击内网系统。挖掘SSRF的关键在于寻找所有可能触发服务器对外发起网络请求的功能点:
-
图片、文件、PDF的在线处理或预览
:参数中带有
url=、file=、path=等。 - Webhook设置、回调通知 :系统需要向一个外部URL发送状态更新。
- 从远程URL导入数据、订阅RSS 。
-
数据库连接功能
:某些应用允许通过URL连接数据库,如
jdbc:mysql://attacker-controlled-host:3306/test。 发现疑似点后,不要只用http://your-vps-ip来测试,要分层测试:
-
先测试协议处理差异:尝试
file:///etc/passwd,gopher://,dict://。 -
测试绕过技巧:利用DNS重绑定技术、利用IPv6地址、利用
@符号(http://expected-host@attacker-host)、利用短域名或十进制IP编码。 - 探测内网信息:利用Burp Suite的Collaborator功能或自己搭建的DNSLog平台,观察服务器是否尝试解析特定的内网域名或IP。
文件上传漏洞 :核心思路是“绕过检测”。检测分前端JS校验、服务端Content-Type校验、文件头校验、后缀名黑/白名单、文件内容检测(如图片二次渲染)。对应的绕过姿势:
- 前端绕过 :直接抓包改包,或禁用JS。
-
Content-Type绕过
:将
Content-Type改为image/jpeg,image/png等。 -
文件头绕过
:在木马内容前添加合法的图片文件头,如
GIF89a。 -
后缀名绕过
:
-
黑名单绕过:尝试
.php5,.phtml,.phps,.php7等。 -
大小写、点号、空格绕过:
.Php,.php.,.php(末尾空格)。 -
双写、特殊解析绕过:
.php.jpg(配合Apache的AddType错误配置),.php%00.jpg(截断,现在较少见)。
-
黑名单绕过:尝试
-
.htaccess攻击
:如果服务器是Apache且允许上传
.htaccess,可以上传一个包含AddType application/x-httpd-php .jpg的.htaccess文件,使所有.jpg文件被当作PHP解析。 - 竞争条件攻击 :有些系统会先保存文件,再进行安全检查,不合格则删除。可以在文件被保存但未删除的极短时间内访问并执行它。
3.2 业务逻辑漏洞:考验“黑客思维”的战场
这类漏洞没有通用的扫描器能完美发现,全靠测试者对业务的理解和“刁钻”的思维。
越权访问 :分为水平越权(访问同级别其他用户的数据)和垂直越权(访问更高级别用户的功能)。测试关键在于修改请求中标识用户或权限的参数。
-
ID遍历
:修改订单ID、用户ID、文档ID等,看是否能访问他人数据。例如,
/api/order/123改为/api/order/124。 -
功能直接访问
:普通用户界面没有“添加管理员”的按钮,但直接构造请求访问
/admin/createUser接口,可能因为后端只验证了前端菜单权限,没验证接口权限。 - 参数污染 :一个请求可能包含多个权限校验点,修改其中一个可能绕过。例如,修改Cookie中的用户ID,但请求体中的ID不变,后端如果只校验了其中一个,就会出问题。
实操心得:测试越权时,一定要准备至少两个不同权限的账号(如UserA和UserB,或User和Admin)。用UserA的凭证登录,然后尝试操作UserB的数据或管理员的功能。Burp Suite的“Compare Site Maps”功能可以对比两个账号访问的URL差异,快速发现潜在越权点。
支付/订单逻辑漏洞 :
-
金额篡改
:抓取支付请求,尝试修改
amount、total_price等参数为负数、0或极小的正数(如0.01)。 -
数量篡改
:修改商品
quantity为负数,可能导致总额计算错误,甚至“买”东西还“赚”钱。 - 重复提交 :网络延迟时快速多次点击提交订单,可能导致同一笔支付被处理多次,但只扣一次款。
- 流程绕过 :不经过支付页面,直接跳转到支付成功后的回调页面或订单完成页面。
- 优惠券/积分逻辑 :无限领取优惠券、积分兑换比例错误、兑换次数无限制等。
密码重置漏洞 :这是逻辑漏洞的重灾区。
- 验证码爆破 :重置密码的短信/邮箱验证码如果是4-6位数字,且无次数限制和失效时间,可被暴力破解。
- 验证码回显 :验证码直接在响应包中返回。
- 邮箱/手机号篡改 :在发送验证码的步骤,将参数中的邮箱或手机号改为攻击者控制的,验证码就会发到攻击者这里。
- Token弱验证 :重置密码的Token直接放在URL中,且与用户名不绑定,导致可以重置任意用户密码。
-
跳过验证步骤
:直接访问设置新密码的页面(如
/reset-password?token=xxx),可能无需验证旧密码或验证码。
3.3 信息收集:被低估的“核武器”
很多人觉得信息收集枯燥,不如直接上漏洞扫描器刺激。但根据我的经验,一次成功的渗透,70%的功劳要归于细致的信息收集。
子域名挖掘
:这是扩大攻击面的第一步。除了传统的字典爆破(使用
subbrute
,
altdns
等工具),更要利用“被动”资源:
-
证书透明度日志
:使用
crt.sh网站或CertSpotterAPI,可以找到为目标域名签发的所有SSL证书,其中常包含大量子域名,甚至内部域名。 -
DNS历史记录
:通过
SecurityTrails,ViewDNS等平台,查询域名的DNS解析历史,可能会发现已被删除但应用还在运行的子域名。 -
搜索引擎语法
:
site:example.com -www可以搜索主域名下的其他内容。 -
JS文件分析
:爬取网站所有JS文件,用正则表达式(如
/[a-zA-Z0-9.-]+\\.example\\.com/g)提取其中可能硬编码的API域名、子域名。
GitHub信息泄露 :这简直是“宝藏库”。使用GitHub高级搜索语法:
-
filename:.env example.com搜索包含.env文件(常有数据库密码、API密钥)的仓库。 -
extension:sql example.com搜索SQL文件。 -
“API_KEY” example.com或“password” example.com搜索硬编码的密钥。 - 不仅要搜公司名,还要搜相关产品名、项目代号、员工可能使用的个人邮箱前缀。 找到泄露信息后,要评估其有效性(是否过时、是否测试环境)和危害性(是生产数据库密码还是无关紧要的测试密钥)。
端口与服务探测
:不要只用默认的
nmap -sS -sV
。对于大型网络,先进行快速端口发现(
-p-
太慢,可以用
masscan
),再对开放端口进行精细化的版本探测和脚本扫描。
- 非标准端口 :Web服务不一定在80/443,可能在8080、8000、3000等。数据库也可能在非标准端口。
-
服务识别
:识别出服务后,要立刻关联其常见漏洞。比如看到
6379端口开放,马上想到Redis未授权访问;看到27017,想到MongoDB未授权访问;看到9200,想到Elasticsearch未授权访问。 - Banner信息 :服务返回的Banner信息可能直接暴露版本号,进而关联已知漏洞。
4. 实战流程:从目标到漏洞的完整推演
假设我们拿到一个目标:
redteam.target.com
。我们如何系统化地应用这些“姿势”?
4.1 第一阶段:全方位信息测绘
-
子域名枚举 :
# 使用subfinder, assetfinder等工具进行被动收集 subfinder -d redteam.target.com -silent | tee subdomains.txt # 使用altdns进行字典爆破和置换 altdns -i subdomains.txt -o data_output -w words.txt -r -s resolved_subdomains.txt # 使用httpx验证存活并获取标题、状态码 cat resolved_subdomains.txt | httpx -title -status-code -tech-detect -o live_subdomains.txt从结果中,我们可能发现
admin.redteam.target.com,api.redteam.target.com,dev.redteam.target.com,vpn.redteam.target.com等多个子域。 -
端口扫描与服务识别 :
# 对主域和关键子域进行全端口扫描(根据情况调整速率) sudo masscan -p1-65535 203.0.113.10 --rate=1000 -oL ports.txt # 对扫描出的开放端口,用nmap进行详细探测 sudo nmap -sV -sC -p 80,443,8080,22,6379 -oA detailed_scan 203.0.113.10假设发现
api.redteam.target.com:8080运行着Apache Tomcat/8.5.4。 -
目录与文件扫描 :
# 使用gobuster或dirsearch进行目录爆破 gobuster dir -u https://redteam.target.com -w /usr/share/wordlists/dirb/common.txt -t 50可能发现
/backup/,/admin/,/phpinfo.php,/config.json等敏感路径。 -
技术栈指纹识别 :
-
查看HTTP响应头中的
Server,X-Powered-By。 -
查看页面源代码中的注释、引用的JS/CSS库(如
jquery-1.11.1.min.js)。 -
使用Wappalyzer浏览器插件或
whatweb命令。 得知该站使用PHP 7.2、Nginx 1.18、ThinkPHP 5.0框架。
-
查看HTTP响应头中的
4.2 第二阶段:针对性漏洞探测
根据第一阶段的信息,我们开始匹配“姿势”:
-
针对ThinkPHP 5.0 :立刻搜索该版本的已知漏洞。发现存在一个远程代码执行漏洞(
s=index/think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id)。尝试利用,成功执行命令。 (姿势:特定框架漏洞利用) -
针对Tomcat服务 :访问
http://api.redteam.target.com:8080/manager/html,尝试弱口令爆破(admin/admin, tomcat/tomcat等)。如果失败,检查是否有样例应用,如/examples/servlets/servlet/SessionExample,可能存在已知漏洞。 (姿势:中间件默认配置与弱口令) -
针对主站Web应用 :
-
SQL注入
:对所有查询参数(如
/product?id=1)、搜索框进行注入测试。使用sqlmap的--random-agent和--tamper绕过WAF。 -
文件上传
:寻找头像上传、附件上传功能。尝试上传一个包含Webshell的图片马(使用
exiftool将代码写入图片EXIF信息),并配合文件包含漏洞执行。 (姿势组合:文件上传+文件包含) -
越权测试
:注册两个普通用户A和B。用A登录,查看个人订单的URL是
/my/order/1001。尝试修改为/my/order/1002访问B的订单。 (姿势:水平越权) -
信息泄露
:检查JS文件,发现一个API端点
/internal/api/v1/users,直接访问返回了用户列表(因为缺乏鉴权)。 (姿势:敏感接口未授权访问)
-
SQL注入
:对所有查询参数(如
4.3 第三阶段:深度利用与权限提升
假设通过ThinkPHP RCE拿到了一个Webshell,权限是
www-data
。
-
信息收集(主机内)
:
whoami && id cat /etc/passwd uname -a cat /etc/issue ps aux netstat -antp find / -perm -4000 -type f 2>/dev/null # 查找SUID文件 -
权限提升
:
- 如果发现内核版本较旧,搜索对应的本地提权(LPE)漏洞,如DirtyCow。
-
如果发现
sudo -l显示当前用户可以以root身份运行某些命令而不需要密码,如/usr/bin/vim,则可以sudo vim -c '!sh'提权。 -
检查数据库配置文件(如
config.php,.env),可能存有数据库密码,尝试连接数据库,看是否有存储的敏感信息或能否通过数据库提权(如MySQL UDF提权)。 -
检查定时任务(
crontab -l),看是否有权限写入的脚本,可以写入反弹shell。 -
检查
~/.ssh/目录,看是否有可用的私钥,用于横向移动。
5. 高级技巧、常见问题与避坑指南
5.1 绕过WAF(Web应用防火墙)的进阶思路
现代WAF越来越智能,单纯编码可能无效。需要组合拳:
-
分块传输编码(Chunked Transfer Encoding)
:利用
Transfer-Encoding: chunked,将攻击载荷拆分成多个小块,可能绕过基于正则表达式的检测。 - 协议层混淆 :将HTTP请求转换为HTTP/2,或者使用畸形的HTTP请求格式,某些WAF可能解析不一致。
- 多维度混淆 :同时使用多种编码(如HTML编码+URL编码+Base64),并插入大量无用空白字符、注释、换行符来干扰WAF的语法分析。
- 利用WAF规则盲区 :研究特定WAF(如Cloudflare, AWS WAF, ModSecurity)的默认规则集,寻找其不检测或检测逻辑薄弱的边界情况。例如,某些WAF只检测GET/POST参数,不检测Cookie或自定义HTTP头中的攻击载荷。
5.2 内网横向移动的“三板斧”
一旦突破边界进入内网,目标就是获取域控或核心数据。
-
凭证窃取与重用
:使用
Mimikatz(Windows)或从内存、文件、注册表中提取密码哈希和明文密码。人们习惯在不同系统使用相同或相似密码。 -
漏洞利用
:使用
MS17-010(永恒之蓝)、CVE-2021-1675(PrintNightmare)等漏洞攻击内网中未打补丁的Windows机器。使用nmap的smb-vuln-*脚本进行扫描。 -
中间人攻击与协议降级
:在局域网内实施ARP欺骗,结合
Responder工具抓取NTLMv1/v2哈希。或者强制SMB、LDAP等协议使用较弱的加密方式,便于破解。
5.3 漏洞挖掘中的“雷区”与伦理
- 法律边界 : 绝对不要 在未获得明确书面授权的情况下,对任何系统进行漏洞挖掘。你的测试行为必须严格限定在授权范围内(IP、域名、时间)。即使是“众测”(Bug Bounty)平台,也要仔细阅读其规则,只测试列入范围的目标。
- 影响评估 :在测试过程中,尤其是使用自动化扫描器或进行压力测试(如爆破)时,要评估可能对目标业务造成的影响(如宕机、数据污染)。尽量在业务低峰期进行,并使用限速等温和手段。
- 数据保护 :在测试中偶然获取到的用户隐私数据(如手机号、邮箱、身份证号)、商业数据,必须严格保密,不得下载、保存、传播。在报告漏洞时,对敏感信息进行打码处理。
- 报告撰写 :一份好的漏洞报告需要清晰描述漏洞位置(URL、参数)、复现步骤(每一步的请求和响应,最好有截图或视频)、潜在危害、修复建议。这能极大提升漏洞被确认和修复的效率。
5.4 新手常犯的错误与提升建议
-
错误1:过度依赖自动化工具
。把
AWVS或Nessus扫一遍就以为完成了。工具只能发现已知的、明显的漏洞。业务逻辑漏洞、新型的绕过技巧,全靠人工分析。 -
错误2:浅尝辄止
。发现一个注入点,用
sqlmap跑出数据就停了,没有进一步尝试写文件、执行命令(如--os-shell)。发现一个XSS,弹个框就停了,没有深入挖掘是否能窃取Cookie、发起CSRF攻击。 - 错误3:不注重信息收集 。拿到一个主站就开始怼,忽略了子域名、关联公司、GitHub泄露这些可能更容易突破的“侧门”。
-
提升建议
:
- 建立知识体系 :系统学习OWASP Top 10,理解每一类漏洞的原理、利用和防御。
- 刻意练习 :在合法的靶场环境(如DVWA, WebGoat, HackTheBox, VulnHub)中反复练习,把每一个漏洞都“玩透”。
- 阅读分析报告 :多看各大SRC(安全应急响应中心)和众测平台公开的优秀漏洞报告,学习别人的挖掘思路和技巧。
- 参与社区 :加入安全社区,与人交流,关注最新的漏洞动态和攻击技术。
漏洞挖掘是一场攻击者与防御者之间永不停歇的“猫鼠游戏”。这份“40个姿势”清单是你的武器库地图,但真正的战斗力来源于你对每一件武器原理的深刻理解,以及在复杂实战环境中灵活组合运用它们的经验。保持好奇心,保持学习,永远从防御者的角度去思考如何攻击,你才能在这个领域走得更远。最后记住,技术是用来建设和保护的,心中的底线和手中的授权,比任何漏洞都重要。

297

被折叠的 条评论
为什么被折叠?



