某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

    • 高级主题
    • 不安全的反序列化

    • Web LLM攻击

    • GraphQL API漏洞

    • 服务端模板注入

      • 服务端模板注入
      • 利用服务端模板注入漏洞
        • 利用服务端模板注入漏洞
        • 阅读
          • 学习基本模板语法
          • 阅读有关安全隐患的信息
          • 查找已知漏洞
        • 探索
          • 开发人员提供的对象
        • 创建自定义攻击
          • 使用对象链构造自定义漏洞载荷
          • 使用开发人员提供的对象构造自定义漏洞
    • Web缓存投毒

    • HTTP主机头攻击

    • HTTP请求走私

    • OAuth身份验证漏洞

    • JWT攻击

    • 原型链污染

    • 基本技能

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 高级主题(翻译)
  • 服务端模板注入
carsaid
2023-11-12
目录

利用服务端模板注入漏洞

翻译

原文:https://portswigger.net/web-security/server-side-template-injection/exploiting

- name: 翻译
  desc: 原文:https://portswigger.net/web-security/server-side-template-injection/exploiting
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# 1利用服务端模板注入漏洞

在本节中,我们将更仔细地研究一些典型的服务端模板注入 (opens new window)漏洞,并演示如何使用我们的高级方法 (opens new window)来利用这些漏洞。将此过程付诸实践之后,你可以潜在地发现 和 利用各种不同的服务端模板注入漏洞。

一旦发现服务端模板注入漏洞,并确定目标所使用的模板引擎之后,成功利用该漏洞通常涉及以下过程。

  • 阅读 (opens new window)
    • 模板语法 (opens new window)
    • 安全文档 (opens new window)
    • 已知漏洞 (opens new window)
  • 探索环境信息 (opens new window)
  • 创建自定义攻击 (opens new window)

# 2阅读

除非你已经对模板引擎了如指掌,否则 “阅读其文档” 通常是第一步。虽然这可能不是最令人兴奋的、消磨时间的方式,但重要的是不要低估 文档 这个可靠的信息来源。

# 2.1学习基本模板语法

学习基本语法 以及 关键函数和变量处理显然很重要。即使是像学习 如何在模板中嵌入本地代码块 这样简单的事情,有时也会很快导致漏洞被利用。例如,一旦你知道正在使用基于 Python 的 Mako 模板引擎,实现远程代码执行就可以像这样简单:

<%
                import os
                x=os.popen('id').read()
                %>
                ${x}
1
2
3
4
5

在非沙箱环境中,实现远程代码执行并使用它来读取、编辑或删除任意文件,在许多常见的模板引擎中同样简单。

实验室-从业者

基本的服务端模板注入 >>

- name: 实验室-从业者
  desc: 基本的服务端模板注入 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

实验室-从业者

基本的服务端模板注入(代码上下文) >>

- name: 实验室-从业者
  desc: 基本的服务端模板注入(代码上下文) >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic-code-context
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 2.2阅读有关安全隐患的信息

除了提供如何创建 和 使用模板的基础知识外,文档还可能提供某种 “安全性” 章节。这一章节的名称会有所不同,但它通常会概述 人们应该避免使用模板时 进行的所有潜在危险的事情。这可能是一个宝贵的资源,甚至可以作为一种备忘单,了解你在审计期间应该寻找哪些行为,以及如何利用它们。

即使没有专门的 “安全” 章节,如果特定的内置对象 或 函数可能造成安全风险,文档中几乎总是会有某种警告。该警告可能不会提供太多细节,但至少,它应该将这个 特定的内置功能 标记为需要审查的内容。

例如,在 ERB 中,文档显示你可以列出所有目录,然后读取任意文件,如下所示:

<%= Dir.entries('/') %>
<%= File.open('/example/arbitrary-file').read %>
1
2

实验室-从业者

借助文档信息的服务端模板注入 >>

- name: 实验室-从业者
  desc: 借助文档信息的服务端模板注入 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-using-documentation
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 2.3查找已知漏洞

利用 服务端模板注入漏洞 的另一个关键方面是,善于在线查找其他资源。一旦你能够识别目标正在使用的模板引擎,你就应该浏览 Web 以查找其他人已发现的任何漏洞。由于一些主要模板引擎被广泛使用,有时可以找到记录良好的漏洞载荷,你可以调整这些漏洞载荷,以攻击你自己的目标网站。

实验室-从业者

未知语言的服务端模板注入,记录在案的漏洞载荷 >>

- name: 实验室-从业者
  desc: 未知语言的服务端模板注入,记录在案的漏洞载荷 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-in-an-unknown-language-with-a-documented-exploit
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 3探索

此时,你可能已经通过文档,偶然发现了一些可行的漏洞利用行为。如果没有,下一步是探索环境,并尝试发现你有权访问的所有对象。

许多模板引擎公开某种类型的 “self” 或 “environment” 对象,其作用类似于 包含模板引擎支持的所有对象、方法和属性的命名空间。如果存在这种对象,则可以使用它来生成范围内的对象列表。例如,在基于 Java 的模板语言中,有时可以使用以下注入,来列出环境中的所有变量:

${T(java.lang.System).getenv()}
1

这可以创建一个潜在有趣对象 和 方法的候选列表,以便进一步研究。此外,对于Burp Suite Professional (opens new window)用户,Intruder 提供了一个用于暴破变量名的内置单词列表。

# 3.1开发人员提供的对象

需要注意的是,网站除了包含模板提供的内置对象以外,还包含 Web 开发人员针对特定站点的自定义对象。你应该特别注意这些非标准对象,因为它们及其可能包含敏感信息 或 可利用的方法。由于这些对象在 同一网站中的不同模板之间 可能会有所不同,因此请注意,在找到利用对象的方法之前,你可能需要在每个 不同模板的上下文中 研究该对象的行为。

虽然服务端模板注入可能会导致 远程代码执行和完全接管服务器,但在实践中,这并不总是可以实现的。然而,即使你排除了远程代码执行,这不一定意味着没有其他类型的漏洞。你仍然可以利用 服务端模板注入漏洞 进行其他高严重性攻击(例如文件路径遍历 (opens new window))来访问敏感数据。

实验室-从业者

服务器端模板注入,通过用户提供的对象进行信息泄露 >>

- name: 实验室-从业者
  desc: 服务器端模板注入,通过用户提供的对象进行信息泄露 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-with-information-disclosure-via-user-supplied-objects
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 4创建自定义攻击

到目前为止,我们主要研究了 “重用记录在案的漏洞载荷” 或 “使用模板引擎中的已知漏洞” 来构建攻击。但是,有时你需要构建自定义漏洞载荷。例如,你可能会发现模板引擎在沙箱中解析模板,这可能会使攻击变得困难,甚至无法利用。

确定攻击面后,如果没有明显的方法来利用该漏洞,则应继续使用传统的审计技术,检查每个函数之中是否存在可利用的行为。有条不紊地完成此过程之后,你有时能够构建复杂的攻击,甚至能够攻击更安全的目标。

# 4.1使用对象链构造自定义漏洞载荷

如上所述,第一步是确定你有权访问的对象和方法。有些对象可能会立刻引起人们的兴趣。通过结合你自己的知识 和 文档中提供的信息,你应该把 想要审查的对象 集中放在一个候选列表中。

在研究对象的文档时,要特别注意这些对象 授予哪些方法访问权限,以及它们返回哪些对象。通过深入文档,你将发现可以被链接在一起的对象和方法组合。将正确的对象和方法链接在一起,有时会允许你访问危险功能和敏感数据,这最初看起来遥不可及。

例如,在基于 Java 的模板引擎 Velocity 中,你可以访问ClassTool对象并调用$class。通过研究文档,你可以链接$class.inspect()方法和$class.type属性来获取对任意对象的引用。在过去,这已经被用于在目标系统上执行 shell 命令,如下所示:

$class.inspect("java.lang.Runtime").type.getRuntime().exec("这里有坏东西")
1

实验室-专家

沙箱环境中的服务端模板注入 >>

- name: 实验室-专家
  desc: 沙箱环境中的服务端模板注入 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-in-a-sandboxed-environment
  bgColor: '#001350'
  textColor: '#d112fe'
1
2
3
4
5
6

# 4.2使用开发人员提供的对象构造自定义漏洞

默认情况下,一些模板引擎在安全、封闭的环境中运行,以尽可能降低相关风险。尽管这使得 利用此类模板进行远程代码执行 变得困难,但由开发人员创建 并 公开于模板中的对象,可以提供更进一步、不那么容易审查的攻击面。

然而,尽管官方通常为 模板引擎 内置了大量文档,但几乎可以肯定的是,自定义对象根本没有文档。因此,要想利用这些漏洞,你需要手动调查网站的行为,以识别攻击面,并相应地构建自己的自定义漏洞载荷。

实验室-专家

使用自定义漏洞载荷的服务端模板注入 >>

- name: 实验室-专家
  desc: 使用自定义漏洞载荷的服务端模板注入 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-with-a-custom-exploit
  bgColor: '#001350'
  textColor: '#d112fe'
1
2
3
4
5
6
编辑 (opens new window)
服务端模板注入
Web缓存投毒

← 服务端模板注入 Web缓存投毒→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式