因为最近要学习python的注入,所以再次写次记录。
如果不清楚什么是模板注入,请看我上一篇文章
根据提示,是python的模板
什么是模板注入呢?
为了写 html 代码的时候方便,很多网站都会使用模板,先写好一个 html 模板文件,
比如:
```python
def test():
code = request.args.get(‘id‘)
html = ‘‘‘ <h3>%s<h3> ‘‘‘%(code) return render_template_string(html) ```
这段代码中的 `html` 就是一个简单的模板文件,当开发者想要这个模板对应的样式 时,可以直接用 `render_template_string` 方法来调用这个模板,从而直接把这个样 式渲染出来。
而模板注入,就是指 **将一串指令代替变量传入模板中让它执行** ,以这段代码为 例,我们在传入 `code` 值时,可以用 `{{}}` 符号来包裹一系列代码,以此替代本应是 参数的 `id` :
‘‘‘
http://..../?id={{代码}} ‘‘‘
验证漏洞,可以看见1+1被成功执行了,接下来可以想办法拿flag了。
查看一下所有的模块,/{{[].__class__.__base__.__subclasses__()}},找到我需要调用的site._Printer(‘os‘),列在72位。
通过`__subclasses__()[71].__init__.__globals__[‘os‘].popen(‘命令 行语句‘).read()` 来进行命令执行
原文:https://www.cnblogs.com/nu0l/p/13280433.html