jinja2模板注入_SSTI的服务端模版注入

0x1 前言

SSTI(服务端模版注入),或者对其还不够了解,在此之前建议去阅读一下James Kettle写的一篇 文章 问题出在开发者定义一个404错误页面,该开发者选择使用字符串格式化将URL动态添加到模版字符串中并返回到页面中,用户对模板是可控的。

0x2 测试步骤

定义一个错误页面。

定义了一个模板字符串。

使用格式化字符串的方式将URL动态添加到模版字符串中并返回在页面上。

用户对模板是可控的。

08272312fb3a9b1893bb0a1effe9d3a2.png

3cf51f7b8bb3e964315a6afbff1dbfe2.png

触发一个XSShttp://127.0.0.1:5000/

b1b694ba02f5ecccaa1e75046f383753.png

Jinjan2 基础语法{% ... %}

{{ ... }}

{# ... #}

模版引擎成功解析http://127.0.0.1:5000/aaa{{2+2}}

5cbc789f558faf8d07687f9b822cf5e5.png

鸡肋拒绝服务攻击request 是Flask模版的一个全局对象,其代表 “当前请求对象(flask.request)”,在request 对象中有一个environ对象名。

request.environ 对象是一个与服务器环境相关的对象字典,字典中一个名为 shutdown_server 的方法名分配的键为 werkzeug.server.shutdown 。

注射 {{ request.environ['werkzeug.server.shutdown']() }} 会造成拒绝服务。

获取配置项目信息config 也是 Flask模版中的一个全局对象,它包含了所有应用程序的配置值。

{{ config.items() }} // 查看配置项目的信息

输入:http://127.0.0.1:5000/a{{ config.items() }}

8a9bd725d3c958d04fdb1e25555bf10d.png

4d210b0ff26fb35bf6d21452b184fe5f.png

config是一个类字典对象,它的子类包含很多方法:from_envvar, from_object, from_pyfile, root_path。Flask/config.py

def from_object(self, obj):

fc1ce87ead8751c8ba3d4875f12982b2.png1. from_object 遍历新加模块中的所有大写的变量的属性并添加属性

2. 并且这些添加到config对象的属性都会维持他们本来的类型

3. 验证:我们将 {{ config.items() }} 注入到存在SSTI漏洞的应用中,注意当前配置条目

4. 注入 {{ config.from_object('os') }}。这会向config对象添加os库中所有大写变量的属性

5. 再次查看 {{ config.items() }} ; os 模块中大写变量的属性成功添加属性cf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值