ErrorFlask | Werkzeug Debug页面 |

题目是ErrorFlask

我们想到和werkzeug debug画面有关

image

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

image

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

    /?number1=1

image

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 只是其中一种可能导致异常或执行代码的方式,本题的核心漏洞是调试模式导致的错误页面和源码泄露。

posted @ 2026-08-05 10:47  Dragon_Roar  阅读(14)  评论(0)    收藏  举报