Flask debug=真正的利用

信息安全 Web应用程序 网络服务器 Python
2021-09-04 00:37:36

众所周知,Flask 的debug=True选项可以通过 werkzeug 调试器功能导致远程代码执行,甚至一些资源被黑客入侵我决定对其进行研究,结果发现如果应用程序由 uwsgi 或 gunicorn 等分叉应用程序服务器运行,则该技术不起作用。所以问题是:

  1. 是否有机会利用已debug=True启用的 Flask 应用程序,即使它由分叉应用程序服务器(gunicorn,uwsgi)运行?我不敢相信所有这些被黑资源在生产中都使用了内置的 Flask 网络服务器。
  2. 所有被黑网站是否直接运行 Flask 应用程序而不使用像 nginx + gunicorn/uwsgi + Flask 这样的“标准”方法?
1个回答

如果我们使用以下代码启用调试器:

app = flask.Flask(__name__)
app.debug = True

这只启用带有内置开发服务器的调试器。要将 Werkzeug 调试器与另一个 WSGI 服务器一起使用,我们必须显式包含中间件:

from werkzeug.debug import DebuggedApplication 
from waitress import serve
app = DebuggedApplication(app, evalex=True, pin_security=False)
serve(app, listen='*:8080')

当您这样做时,使用evalexpin_security选项如上所述,该应用程序很容易受到远程攻击。