(又被黑)基于MySql的弱口令入侵

下午另一台服务器也突然报警,经过核查后,确认被黑,MMP,我觉得这是挑衅呀,没办法先清除木马程序,感觉真是多事之秋啊。

通过异常进程确认到木马文件,然后停止后自动重启,先检查crontab,果然多了一个异常的定时任务:

1
*/3 * * * * root /etc/cron.hourly/cron.sh

这个名字起得就不评价了,明显就是个外来者,然后立刻停止cron服务:

1
$ /etc/init.d/cron stop

然后先结束掉异常进程,移除恶意程序,接着分析定时任务执行的脚本/etc/cron.hourly/cron.sh,结果发现:

1
2
cp /lib/udev/udev /lib/udev/debug
/lib/udev/debug

找到文件并删除掉,然后检查系统日志等,发现都被清除了,检查用户列表,移除掉非法的用户,检查是否存在其他登陆方式,至此完成。

随后心里就很纳闷,这是一台纯后端的web服务器,只运行了一些tomcat,只有一些接口服务。服务器用户密码肯定是够安全的,猜解成功难度又非常大,那么到底是哪里引起的入侵呢? 如果不找出来那么就算清除了,下次还是会直接被入侵进来,只能先系统的查一查。

先检查一下当前服务器的端口情况:

1
netstat -tnlpu

异常端口

发现了一个3306,咱们都应该知道,这是Mysql数据服务的接口。可是,这个服务器规划的时候只安装java环境,有专门的数据服务器的呀,叫来同事一问才知道,前段时间为了测试一个公司产品(附带mysql程序包),就随手在这台服务器上测试了一下,然后就没停止,密码是弱口令。

心里咯噔一下,既然是弱口令,那么就会有猜解提权的风险,立马检查这款产品中mysql的配置,
产品配置

哈哈,谁改的root,拖出去祭天。既然权限这么高,就会无限放大dumpfile或者outfile的风险,继续检查确认下是否是UDF(user defined function),到lib/plugin目录看到
猜猜这是啥

果不其然,如果使用过sqlmap就知道附带的UDF库就是 8040大小的。

到这里就应该能确认问题了,临时停止MySql服务,防止再次被入侵。

基于MySql的弱口令入侵

既然提到了这个,也就当做给大家敲个警钟,之所以让我细思极恐的是,这个是公司级的销售产品,捆绑Mysql服务这个无可厚非,可是配置上的不严谨,容易造成其他风险(不排除我们拿到的程序包是被修改过的)。

关于入侵的,这个就不具体的去说了,现在网上工具一大堆,假设你知道了一台服务器的MySql密码,并且还是root权限运行的,那么就可以试试sqlmap来进行渗透,获取一个os-shell就可以为所欲为了,工具教程有说明,其实就一条语句就完成渗透了(现在能做工具的都是大牛牛牛~)

获取os-shell
1
sqlmap.py -d "mysql://username:password@ip:3306/test" --os-shell

最后提一下,为什么使用root运行会有风险? 我们可以做个试验,连接一台mysql服务器,然后在Mysql shell中执行一个命令:

1
2
select 'daniel' into dumpfile '/tmp/daniel';
#Query OK, 1 row affected

猜猜会发生什么? 对的,这个时候会在服务器上/tmp/目录中生成一个daniel的文件,如果是root运行,那么就可以有权限写入到任何路径。

既然已经有了写文件的权限,那么就可以使用UDF提权啦。

后记
其实以前一直使用工具,自己也用C#写过简单工具(比不上大牛们的),主要是好玩儿。最后主要简述下UDF提权的步骤,有兴趣的同学可以尝试自己开发工具。

  1. 假设已经通过各种手段获取到口令。
  2. udf库写入到plugin文件夹。执行两条语句:show variables like "%plugin%";show 文件内容 into dumpfile 路径;
  3. 调用udf库执行命令。

前提:使用root,权限够高,其实作为开发人员,很容易就会使用root的,为什么?因为网上的安装教程都是修改配置为root,哈哈。