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

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

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

Carsaid

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

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

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

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

    • 实验室做题记录
    • 服务器端

    • 客户端

    • 高级主题

      • 不安全的反序列化

      • GraphQL API漏洞

      • 服务端模板注入

        • 从业者-基本的服务端模板注入
        • 从业者-基本的服务端模板注入-代码上下文
          • 题目
          • 实操
            • 找文档
            • 开始实验-检测服务端模板注入
            • 脱离原有上下文
            • 执行任意代码
        • 从业者-借助文档信息-服务端模板注入
        • 从业者-记录在案的漏洞载荷-未知语言的服务端模板注入
        • 从业者-用户提供的对象-导致信息泄露的服务器端模板注入
        • 专家-沙箱环境中的服务端模板注入
        • 专家-使用自定义漏洞载荷的服务端模板注入
      • Web缓存投毒

      • HTTP主机头攻击

      • HTTP请求走私

      • OAuth身份验证漏洞

      • JWT攻击

      • 原型链污染

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

从业者-基本的服务端模板注入-代码上下文

# 实验室:基本的服务端模板注入(代码上下文)

# 题目

由于此实验室不安全地使用 Tornado 模板,因此容易受到服务端模板注入的攻击。若要解决实验室问题,请查看 Tornado 文档以了解如何执行任意代码,然后从 Carlos 的家目录中删除morale.txt文件。

你可以使用以下凭据登录到自己的帐户:wiener:peter

提示

仔细查看 “preferred name”(首选名称)功能。

实验室-从业者

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

- 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

# 实操

# 找文档

通过搜索引擎,可以很容易地找到 Tornado 的官方文档:https://www.tornadoweb.org/en/stable/ (opens new window)

我在其中搜索关键字 “shell”,试图找到一些有效信息。

Not Found Image

然后我发现了 5 个可以用于执行系统命令的函数:

# 1
retcode = call(["ls", "-l"])

# 2
check_call(["ls", "-l"])

# 3
check_output(["ls", "-l", "/dev/null"])

# 4
import subprocess
subprocess.getoutput('ls /bin/ls')

# 5
import subprocess;subprocess.getstatusoutput('ls /bin/ls')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

先记着,说不定待会有用呢。

Not Found Image

# 开始实验-检测服务端模板注入

点击 “ACCESS THE LAB” 进入实验室。

Not Found Image

一个博客站点。

Not Found Image

使用题目中提供的用户名和密码进行登录,访问账户页面,你可以看到一个名为 “Preferred name” 的功能。

原来这才是题目中提到的功能,我还傻傻的跑去 Tornado 文档里面搜。

点击 “Submit” 并捕获一个请求数据包。

Not Found Image

在数据包中可以看到一个名为blog-post-author-display的 POST 参数,这个参数翻译成中文貌似是 “博客提交作者展示”。

参数值是user.first_name,是不是很像一个模板?

Not Found Image

注入以下表达式:

{{7*7}}
1

注入点有了,输出点在哪里呢?

Not Found Image

根据参数名称的指引,随便进入一篇博客,然后发表一个评论。

在评论作者名称处,可以看到注入的结果49。而且两边的括号被当作字符串了,说明该注入点原本就位于括号之中。

{{注入点}}
1
Not Found Image

# 脱离原有上下文

尝试注入<img>,此时的目标上下文变为:

{{<img>}}
1
Not Found Image

网页返回错误信息,无效的语法。

Not Found Image

注入以下表达式,尝试闭合并脱离原有的上下文:

}}<img>

# 形成
{{}}<img>}}
1
2
3
4
Not Found Image

返回错误信息,空白的表达式。难道是指左边被闭合的那个?

Not Found Image

改为注入以下表达式,提供一个数字1:

1}}<img>

# 形成
{{1}}<img>}}
1
2
3
4
Not Found Image

这次网页正常解析,原上下文中的右括号}}被当作了普通字符串。

Not Found Image

# 执行任意代码

在这篇文章 (opens new window)中,我找到了在 Tornado 中执行系统命令的方法。

Not Found Image

按照文章所说,注入以下表达式:

1}}{% import os %}{{ os.popen("id").read() 
1
Not Found Image

然后刷新网页,成功执行id命令并返回了执行结果。

Not Found Image

另外,os.system()函数也可用于执行系统命令:

1}}{% import os %}{{ os.system('rm -rf /home/carlos/morale.txt') }}
1

注入以上命令,删除目标文件。

Not Found Image

刷新网页,触发并解析表达式。

学过编程的应该都知道,数字0表示程序正常完成运行并退出。而这里刚好显示了一个0,说明注入的命令成功执行了。

Not Found Image

回到页面顶部,横幅已经出现。

实验完成。

Not Found Image
编辑 (opens new window)
从业者-基本的服务端模板注入
从业者-借助文档信息-服务端模板注入

← 从业者-基本的服务端模板注入 从业者-借助文档信息-服务端模板注入→

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