MySQL 文件权限到 SSRF/RCE
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
这是来自 https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/ 的 MySQL/MariaDB/Percona 技术摘要。
通过 SQL 函数进行服务器端请求伪造 (SSRF)
在 SQL 带外数据外泄的探索中,LOAD_FILE()
函数通常用于发起网络请求。然而,该函数受到其运行的操作系统和数据库启动配置的限制。
secure_file_priv
全局变量如果未设置,默认为 /var/lib/mysql-files/
,限制文件访问仅限于此目录,除非设置为空字符串 (""
)。此调整需要修改数据库的配置文件或启动参数。
假设 secure_file_priv
被禁用 (""
),并且授予了必要的文件和 file_priv
权限,则可以读取指定目录外的文件。然而,这些函数进行网络调用的能力高度依赖于操作系统。在 Windows 系统上,由于操作系统对 UNC 命名约定的理解,可以进行对 UNC 路径的网络调用,这可能导致 NTLMv2 哈希的外泄。
此 SSRF 方法仅限于 TCP 端口 445,并且不允许修改端口号,尽管可以用来访问具有完全读取权限的共享,并且如先前研究所示,可以窃取哈希以进行进一步利用。
通过用户定义函数 (UDF) 进行远程代码执行 (RCE)
MySQL 数据库提供了从外部库文件使用用户定义函数 (UDF) 的功能。如果这些库在特定目录或系统的 $PATH
中可访问,则可以从 MySQL 中调用它们。
该技术允许通过 UDF 执行网络/HTTP 请求,前提是满足几个条件,包括对 @@plugin_dir
的写访问、file_priv
设置为 Y
,以及禁用 secure_file_priv
。
例如,可以加载 lib_mysqludf_sys
库或其他支持 HTTP 请求的 UDF 库以执行 SSRF。这些库必须传输到服务器,可以通过对库内容进行十六进制或 base64 编码,然后写入适当的目录来实现。
如果 @@plugin_dir
不可写,过程会有所不同,尤其是对于 v5.0.67
以上的 MySQL 版本。在这种情况下,必须使用可写的替代路径。
这些过程的自动化可以通过支持 UDF 注入的工具如 SQLMap 来实现,对于盲 SQL 注入,可以利用输出重定向或 DNS 请求走私技术。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。