ErrorFlask | Werkzeug Debug页面 |
题目是ErrorFlask
我们想到和werkzeug debug画面有关

- 访问首页
/?number1=1&number2=2
返回 not ssti,flag in source code~3,这里已经在提示“flag 在源码里”。

- 构造报错,触发 Werkzeug Debug 页面
例如访问:
/?number1=a&number2=2
或
/?number1=1

Flask/Werkzeug 开启调试模式,例如 debug=True。
请求处理过程中出现未捕获异常。
应用没有用自定义错误处理器把异常拦截掉。
这个题中并不是 SSTI 触发了 Debug 页面,而是参数被强制转换为整数:
int(num1) + int(num2)
因此访问:
/?number1=a&number2=2
会触发:
ValueError: invalid literal for int()
异常未被捕获,加上后端启用了 debug=True,所以 Werkzeug 返回了 Debug 页面,并在 traceback 中泄露了源代码和 flag。
普通错误不一定显示 Debug 页面:
404:通常是正常错误响应,不一定触发 Debug 页面。
400:如果被 Flask 正常处理,也不会触发。
try/except 捕获的异常:不会触发。
自定义 @app.errorhandler(500):可能只返回自定义页面。
生产环境 debug=False:通常只返回通用 500 Internal Server Error。
所以更准确地说:任何导致 Flask 请求处理流程中产生“未捕获异常”的输入,都可能触发 Debug 页面;但不是所有错误都会触发。 SSTI 只是其中一种可能导致异常或执行代码的方式,本题的核心漏洞是调试模式导致的错误页面和源码泄露。

浙公网安备 33010602011771号