Werkzeug / Flask Debug
即时可用的漏洞评估与渗透测试设置。从任何地方运行完整的渗透测试,提供 20 多种工具和功能,从侦察到报告。我们不替代渗透测试人员 - 我们开发自定义工具、检测和利用模块,以便让他们有更多时间深入挖掘、获取 shell 并享受乐趣。
控制台 RCE
如果调试处于活动状态,您可以尝试访问 /console
并获得 RCE。
互联网上还有几个漏洞,比如这个或metasploit中的一个。
Pin 保护 - 路径遍历
在某些情况下,/console
端点将受到 pin 的保护。如果你有 文件遍历漏洞,你可以泄露生成该 pin 所需的所有信息。
Werkzeug 控制台 PIN 漏洞
在应用程序中强制出现调试错误页面以查看此内容:
在尝试访问 Werkzeug 的调试接口时,会遇到关于“控制台锁定”场景的消息,指示需要一个 PIN 来解锁控制台。建议通过分析 Werkzeug 的调试初始化文件 (__init__.py
) 中的 PIN 生成算法来利用控制台 PIN。可以从 Werkzeug 源代码库 学习 PIN 生成机制,但建议通过文件遍历漏洞获取实际服务器代码,以避免潜在的版本差异。
要利用控制台 PIN,需要两组变量,probably_public_bits
和 private_bits
:
probably_public_bits
probably_public_bits
username
: 指发起 Flask 会话的用户。modname
: 通常指定为flask.app
。getattr(app, '__name__', getattr(app.__class__, '__name__'))
: 通常解析为 Flask。getattr(mod, '__file__', None)
: 表示 Flask 目录中app.py
的完整路径(例如,/usr/local/lib/python3.5/dist-packages/flask/app.py
)。如果app.py
不适用,尝试app.pyc
。
private_bits
private_bits
uuid.getnode()
: 获取当前机器的 MAC 地址,str(uuid.getnode())
将其转换为十进制格式。要 确定服务器的 MAC 地址,必须识别应用使用的活动网络接口(例如,
ens3
)。如果不确定,泄露/proc/net/arp
以找到设备 ID,然后 从/sys/class/net/<device id>/address
提取 MAC 地址。可以按如下方式将十六进制 MAC 地址转换为十进制:
get_machine_id()
: 将/etc/machine-id
或/proc/sys/kernel/random/boot_id
中的数据与/proc/self/cgroup
的第一行在最后一个斜杠(/
)之后的部分连接起来。
Last updated