本人对于bottle框架下中无大括号ssti的一些思考以及内存马的挖掘
SimpleTemplate
SimpleTemplate是bollte框架下的一款模板渲染引擎其内置了相当多的函数,也有一些不同于jinja2的trick如下
include 文件读取

这个函数我们从介绍可以发现其是导入一个子模板,并将结果导入模板,虽然他的官方文档写的是
py
1 | % include('header.tpl', title='Page Title') |
但是其并没用对导入的模板文件进行检测,所以当我们输入
{{include(app.py)}}
就可以进行任意文件读取,好像只有web目录
% 与<%
Bollte的模板是SimpleTemplate 模板引擎,里面有一个挺有趣的操作就是<%%>与%,我们可以利用上面的来执行python代码。

这样我们再SSTI时就会有很多的操作。
像如下demo。
py
1 | from bottle import template, Bottle,request,error |
当我们传入的值为%0A% print(1)%0A
可以发现终端成功输出1
剩下的怎么执行命令我就不赘述了
内存马的挖掘
首先我先给出一篇https://forum.butian.net/share/4048
上面的这篇文章已经很详细的给出了挖掘的一些内存马,所以我们只要简单的修改即可
像下面这样
plaintext
1 | % from bottle import Bottle, request |
因为我们执行的是任意py代码所以我们能做到的不只是普通的内存吗,还可以做到请求头回显,以及404,500等硬编码的错误回显
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 L的博客!