news 2026/10/7 8:31:00

云时代两大RCE王牌:SSRF打云元数据与SSTI打模板引擎,hack-skills攻击链详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
云时代两大RCE王牌:SSRF打云元数据与SSTI打模板引擎,hack-skills攻击链详解

云时代两大RCE王牌:SSRF打云元数据与SSTI打模板引擎,hack-skills攻击链详解

【免费下载链接】hack-skillsHelping AI Agent become an awesome practical hacker!项目地址: https://gitcode.com/gh_mirrors/ha/hack-skills

如果你做安全测试或CTF,一定听过这两个名字:**SSRF(服务器端请求伪造)**和SSTI(服务端模板注入)。在云计算时代,它们已经从"普通Web漏洞"升级为"拿云凭据、直接RCE"的王牌级漏洞——SSRF 可以驱动服务器去请求169.254.169.254这个云元数据地址,把云厂商的临时密钥读出来;SSTI 则能让模板引擎替你执行任意系统命令。本文基于 hack-skills 这个 AI Agent 安全知识库中的两大技能文档,用最通俗的方式拆解这两条通往 RCE(远程代码执行)的攻击链,帮你快速建立完整的思路框架。

一、先搞懂:SSRF 和 SSTI 为什么是"云时代王牌"?

💡 简单类比一下:

  • SSRF:你让服务器"帮忙打开一个网页",结果你给的网址其实是服务器自己机房里的门。服务器替你开门,你把机房里的东西(云凭据、内网管理面板、Redis)都看了一遍。
  • SSTI:网站用模板引擎渲染页面(比如把{{用户名}}替换成真实名字),如果攻击者的输入没被过滤,模板引擎就会把{{恶意表达式}}当成代码直接执行。

两者的共同点:最终都能实现 RCE——一个通过"读云凭据 → 拿到云账号控制权",一个通过"模板引擎直接执行命令"。

hack-skills 将这两类漏洞分别沉淀为独立的技能目录,每个目录包含主文档SKILL.md和配套的场景、载荷扩展文档:

  • SSRF 技能:skills/ssrf-server-side-request-forgery/SKILL.md
  • SSTI 技能:skills/ssti-server-side-template-injection/SKILL.md

二、SSRF 打云元数据:一条 URL 如何偷走云凭据

1. 找到 SSRF 入口:哪些参数会"代你发请求"

任何接收URL、IP、主机名的参数都可能是 SSRF 入口。常见的参数名有url、imageUrl、redirect、callback、src、dest等,更隐蔽的入口还包括:PDF/截图生成器、Webhook 配置字段、通过 URL 导入 CSV 等功能。

完整入口清单和验证方法见 skills/ssrf-server-side-request-forgery/SKILL.md 的第 1、2 节。

2. 打云元数据:169.254.169.254 是什么?

所有主流云厂商的虚拟机,都有一个"本地小门"提供元数据接口,包含实例信息、临时 IAM 凭据等:

云环境元数据入口
AWS EC2 (IMDSv1)http://169.254.169.254/latest/meta-data/
AWS EC2 (IMDSv2)需先 PUT 获取 token,再带 token 访问
Google Cloudhttp://metadata.google.internal/computeMetadata/v1/
Azurehttp://169.254.169.254/metadata/instance?api-version=...
阿里云http://100.100.100.200/latest/meta-data/
Kubernetes读取挂载的 ServiceAccount token 文件

⚠️关键技巧:AWS 的 IMDSv2 虽然要 token,但如果 SSRF 支持自定义请求头,攻击者完全可以自己完成"先 PUT 拿 token、再 GET 读凭据"的两步操作——这意味着 IMDSv2 并不能挡住 SSRF。

各云厂商的完整端点目录在 skills/ssrf-server-side-request-forgery/URL_PARSER_TRICKS.md 中有专门整理。

3. 绕过 IP 黑名单:同一个地址的"马甲"

很多应用会直接封掉127.0.0.1和169.254.169.254,但这个地址有几十种写法:

  • 十进制:2852039166(即 169.254.169.254 的数值形式)
  • 十六进制:0xa9fea9fe
  • 八进制:0251.0376.0251.0376
  • IPv6 映射:[::ffff:169.254.169.254]
  • DNS Rebinding:用TTL=0的域名,第一次解析返回公网 IP 通过检查,第二次解析返回内网 IP 完成攻击

DNS Rebinding 的完整时序分析和绕过矩阵,参考 skills/ssrf-server-side-request-forgery/SCENARIOS.md 第 2 节。

4. SSRF → Redis → RCE 经典链

当元数据打不动时,SSRF 还有另一条通往 RCE 的路:打内网 Redis。

  1. 用gopher://或dict://协议向内网 Redis(6379 端口)发送命令
  2. 让 Redis 把一段计划任务(crontab)写到/var/spool/cron/目录
  3. 计划任务到期执行,反弹 shell,RCE 达成

这条完整的真实案例链(含 WebLogic CVE-2014-4210 场景)在 skills/ssrf-server-side-request-forgery/SCENARIOS.md 第 1 节有完整拆解。

三、SSTI 打模板引擎:一行表达式如何变成任意命令执行

1. 探测:7*7 = 49 就够了

SSTI 探测的第一课:用数学题代替漏洞利用。发送{{7*7}},如果页面返回49而不是原文,说明 Jinja2 或 Twig 在服务端求值了;${7*7}返回 49 则是 FreeMarker / Velocity / Java EL;<%= 7*7 %>则是 ERB / EJS。

一个巧妙的区分技巧:发送{{7*'7'}}——返回7777777是 Jinja2(Python 字符串乘法),返回49是 Twig(PHP 强制转数字)。完整引擎指纹识别决策树见 skills/ssti-server-side-template-injection/ENGINE_PAYLOADS.md 第 1 节。

2. 引擎 → RCE 的对应关系

识别出模板引擎后,每条引擎都有成熟的 RCE 链,核心思路是"利用模板引擎访问底层运行时":

模板引擎技术栈RCE 核心思路
Jinja2Python / Flask通过config.__globals__拿到os模块,调用popen执行命令
FreeMarkerJava / Spring实例化freemarker.template.utility.Execute对象直接执行
TwigPHP / Laravel注册未定义过滤器回调到exec函数
VelocityJava反射调用java.lang.Runtime.exec()
ERBRuby / Rails<%= system('命令') %>直接执行
ThymeleafJava / Spring Boot借 SpEL 表达式T(java.lang.Runtime)执行

各引擎的完整 RCE 载荷矩阵在 skills/ssti-server-side-template-injection/ENGINE_PAYLOADS.md 中按引擎逐一整理。

3. 沙箱绕过:Jinja2 的高级玩法

Flask 等框架常用 Sandbox(沙箱)限制模板能力,但 Jinja2 沙箱有多条成熟逃逸路线:

  • MRO 子类遍历:''.__class__.__mro__[1].__subclasses__()可以列出对象体系的所有子类,找到subprocess.Popen后直接执行命令——这是不依赖 Flask 特定对象的"万能链"
  • 下划线被过滤:用十六进制编码attr('\x5f\x5fclass\x5f\x5f')代替__class__
  • 点号被过滤:改用[]下标写法

这些沙箱绕过技巧详细记录在 skills/ssti-server-side-template-injection/SKILL.md 第 4 节。

4. 真实 CVE 场景:SSTI 不止存在于 Web 表单

skills/ssti-server-side-template-injection/SCENARIOS.md 收录了多个真实案例,值得特别记住两个:

  • Jira SSTI(CVE-2019-11581):命令输出不出现在页面,而是出现在发给管理员的邮件里——这就是"盲 SSTI"的典型,需要借助 OOB 回连验证
  • Maccms 8.x 模板 eval:搜索框输入直接进入eval(),配合 base64 绕过引号过滤直接写 webshell

四、两条攻击链对比:何时用哪个?

维度SSRF 打云元数据SSTI 打模板引擎
前置条件存在可传 URL 的参数用户输入进入模板渲染
最终目标云凭据 → 云账号接管 / 内网服务 RCE直接 RCE
防御焦点URL 校验(黑名单/白名单)模板输入净化、避免render_template_string
核心难点绕过 IP 过滤与协议限制引擎指纹识别与沙箱绕过

💡 实战中两者常组合出现:先用 SSTI 拿到 RCE,再在服务器内直接请求元数据接口读云凭据;或者用 SSRF 打内网 Redis 落地 crontab,两条链殊途同归。

五、如何用 hack-skills 学习这两条链?

hack-skills 是一个面向 AI Agent 的可组合安全知识库,采用"主入口 → 分类入口 → 深度技能"的三层结构。对本文涉及的两大主题,推荐阅读路径:

  1. 主入口 skills/hack/SKILL.md:了解整套技能库的导航方式
  2. SSRF 主线:skills/ssrf-server-side-request-forgery/SKILL.md(快速开始 + 过滤器绕过决策树)→ SCENARIOS.md(CVE 案例与 DNS Rebinding 深挖)→ URL_PARSER_TRICKS.md(跨语言 URL 解析差异与全云厂商端点目录)
  3. SSTI 主线:skills/ssti-server-side-template-injection/SKILL.md(多语探测序列 + 各引擎 RCE 链)→ ENGINE_PAYLOADS.md(按引擎的指纹与载荷矩阵)→ SCENARIOS.md(Jira、Confluence、Spring Cloud Gateway 等真实 CVE 场景)

项目总览与结构说明见 README.md 和 README_CN.md。

结语

云时代的安全攻防,SSRF 和 SSTI 是绕不开的两条主线:SSRF 考验的是"URL 校验的完整性",SSTI 考验的是"模板边界的清晰性"。理解169.254.169.254的多种伪装形态、掌握7*7探测法和各引擎的 RCE 思路,你就掌握了从普通 Web 漏洞走向云环境 RCE 的完整路径。更多细节与真实案例,都藏在 hack-skills 的上述技能文档里,值得逐节精读。

【免费下载链接】hack-skillsHelping AI Agent become an awesome practical hacker!项目地址: https://gitcode.com/gh_mirrors/ha/hack-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 8:30:36

嵌入式 NPU 零拷贝实战:利用 rknn_create_mem 绕过主存搬移直通硬件

嵌入式 NPU 零拷贝实战&#xff1a;利用 rknn_create_mem 绕过主存搬移直通硬件在瑞芯微 RK3588 或 RK3568 等具备独立 NPU 的工业单板机上部署端侧轻量小模型&#xff08;SLM&#xff09;或高分辨率工业视觉时&#xff0c;很多开发者对推理性能的调优往往全部押注在“模型剪枝…

作者头像 李华
网站建设 2026/10/7 8:29:21

拦截 AI 生成的弱加密算法:MD5/SHA1 自动替换为安全散列

拦截 AI 生成的弱加密算法&#xff1a;MD5/SHA1 自动替换为安全散列在很多安全审计报告中&#xff0c;一个高频出现的低级漏洞让安全团队大跌眼镜&#xff1a;在 2026 年的今天&#xff0c;某些核心系统的密码存储或数据签名逻辑中&#xff0c;竟然依然赫然写着 crypto/md5 或 …

作者头像 李华