MySQL File priv to SSRF/RCE

从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

这是来自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不可写,特别是对于MySQL版本高于v5.0.67的情况,该过程会有所不同。在这种情况下,必须使用可写的替代路径。

这些过程的自动化可以通过工具(如SQLMap,支持UDF注入)来实现,并且对于盲SQL注入,可以利用输出重定向或DNS请求欺骗技术。

从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于