一次在Linux下的MySQL提权-每周原创 - APT防御产品

一次在Linux下的MySQL提权-每周原创

   最近老同学跟我说他们公司的OA系统被入侵了,并且服务器经常死机以及流量异常,但是又没找到问题所在,想让我帮看看问题到底出在哪里。这种问题其实也不难解决,我第一反映就是让他去看日志,从日志去分析入侵痕迹。大概过了半个多小时他无奈的回了我一句日志被删除了。听到这里我就觉得服务器应该是被人提权了。普通的运维人员又对安全不太了解,加上那么多年的老同学了,为了让他不到人事部领取某表,只能帮他找到问题了。

    他把地址发过来之后打开就是一个典型的OA登录界面,经典得不能再经典,还没有验证码,看到这我就想是不是被撞库了。于是让他把数据库的帐号导出一份拿来跑弱口令,可是经过一个晚上的撞库还有弱口令之后发现并没有这样的问题存在,而且OA也要求必须使用8位数以上符合策略的密码。用WVS扫了一遍之后除了一个phpinfo以外也没发现问题,拿起Nmap扫了一圈除了80端口也没其他的开放端口了。然后搜索了一下相关的资料也没发现这个版本的OA系统有什么漏洞,难道让人给挖到0day了?于是就去问了情况,除了OA还有什么系统,结果从答案中看到了一丝丝希望,他告诉我为了方便管理有一个phpmyadmin。于是就问了这个地址,http://oa.xxxxx.cn/phpMyAdmin-2.11.3好家伙居然那么长,难怪什么都没找到。上网搜索了一下,phpmyadmin 2.11.3有一个万能密码登录漏洞,难道是因为这个?于是就尝试的登录了一下。
图片1.png 
既然能登录就说明是有戏,尝试一下MySQL的文件越权访问读取一下,绝对路径已经从之前的phpinfo中获取到了,那么我们就尝试读取一下,执行下面的命令看看有没有结果。
use test;
create table `localfile` ( `content` LONGTEXT );
LOAD DATA LOCAL INFILE '/usr/local/nginx-1.9.2/html/test.php' INTO TABLE `localfile` fields terminated by '' LINES TERMINATED BY '\0';
select `content` from `localfile`;
图片2.png 
证明了确实能读取文件,难怪服务器不安全了,存在这样低级的漏洞。既然都到这一步了那么索性就深入一下,尝试是否能拿下webshell。经过一个一个文件去读取,很快就找到了数据库连接文件。然后用root登录phpMyAdmin导出一个WEBSHELL到一个可写的WEB目录下。用菜刀连上去。Linux CentOS 2.6.32-504.23.4.el6.x86_64看了一下Linux的内核版本,还是比较高的2.6目前没有什么东东能溢出这个,至少我手上没有,然后看一下还有什么可利用的东西。当看到进程的时候似乎发现了点东西,或者是异常。
3.png 
MySQL数据库为了安全一般是以mysql用户启动的,在某些特殊情况下才会使用root去启动MySQL数据库,既然这样的话理论上来说权限就非常大了,可以使用UDF进行提权。从网上找了一个利用MySQL来执行命令的库文件,上传到服务器然后复制到MySQL的插件目录,发现没权限。对了,原来用菜刀是集成nginx的权限,并不是root不能对WEB以外的目录进行操作,那么就先把文件导入到数据库中,然后再使用数据库导出到MySQL的插件目录。然后用命令创建函数。发现提示无法创建。
4.png 
到网上搜索了一下原因说是需要重新编译才行,那只能找代码去编译了,搜了一下在网上搜索到了一份代码,拿到丢到服务器上去编译,还是报错。根据错误提示搜索了半天说是因为系统类型不同引起的,32位与64位的问题,在编译的时候需要加入-fPIC参数。加入了之后果然能顺利通过,再导出一份创建函数成功,执行了一下命令,终于拿下。
5.png
  1. 到这里也算给他一个交代了,让他删了phpMyAdmin然后对NGINX做加固不能跨目录访问其他文件以及去掉多余的组建让php无法执行命令,最好日志远程备份到服务器这样就应该差不多了。



转载请注明出处 APT防御产品 » 一次在Linux下的MySQL提权-每周原创

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址