项目服务器硬件配置 模板,SSTI( 服务器模板注入)以及常见利用方式

fa2c2a8569f8cbcd33305eee26f770e8.png

0x00 前言

简单介绍下,由于模板引擎支持使用静态模板文件,并在运行时用HTML页面中的实际值替换变量/占位符,从而让HTML页面的设计变得更容易。当前广为人知且广泛应用的模板引擎有Smarty、Twig、Jinja2、FreeMarker和Velocity。

简而言之,我们如果在开发过程中,如果选择使用的字符串格式化将URL动态添加到模板字符串中并返回到页面中,这时用户对模板是可控的。

0x01 漏洞演示

根据清风师傅在文章中所提到的,我们原版来分析下:

42425527741d5d3f16b63a295c9756c5.png

7b3e0ab5dbcbab68eee75aa1ef3034f4.png

针对于模板可控,带入触发XSS

http://127.0.0.1:5000/alert(/xss/)

fdec0d4ead9e6d978b6c1d9de3656d29.png

Jinjan2 基础语法

{% ... %}

{{ ... }}

{# ... #}

模版引擎成功解析

http://127.0.0.1:5000/aaa{{1+2}}

eb6115e97369dff122d730d6ad547048.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() }}

b5cd40cc36eeb692dc380facb409f6b0.png

13df2142684468241cf418a3beb90274.png

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

Flask/config.py

def from_object(self, obj):

3fc1e4809f314e46b5b26db9174e2c9d.png

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

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

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

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

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

0x02 获取服务器shell

同步参考文章,这里面还是主要采用MSF的php马反弹shell(php有效载荷远程下载后,进行访问获取服务器shell权限)进行获取服务器权限

https://medium.com/@david.valles/gaining-shell-using-server-side-template-injection-ssti-81e29bb8e0f9

0x03 修复意见

针对于不同的模板引擎,该漏洞的修复方法会有所不同,但如果在传递给模板指令之前,对用户输入进行安全过滤的话,则可以大大减少这类威胁。此外,另一种防御方法是使用沙箱环境,将危险的指令删除/禁用,或者对系统环境进行安全加固。

0x04 参考连接

https://portswigger.net/blog/server-side-template-injection

https://nvisium.com/blog/2016/03/11/exploring-ssti-in-flask-jinja2-part-ii.html

喜欢 (12)or分享 (0)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值