某某河畔是郫县男子dota技术专修学校里各种骚男闷女无聊打发时间的地方。使用的是pw+php bluster搭建的。负责维护的童鞋几乎把pw的基础代码都改写过了,代码安全性还是比较高的。但是这次无情的被沦陷了。

详细说明:

1. 沦陷备份服务器
各种弱口令+cacti拿shell
访问http://xxx.xxxhome.net,使用弱密码admin/admin进入管理页面
上网找了几个cacti的漏洞,都没能利用上。于是自己开始下了一套cacti开始折磨。
看到install目录下有几个.php文件,顿时眼前一亮

clip_image001

把cacti的日志文件设置为这几个文件中的一个,重新登陆一下,可以看到日志确实被写进去了,那么只要想办法产生一些<?php这样的日志,就能执行代码了。最直接的想法那就是用<?php这样的用户去登录,有兴趣的同学可以继续深入,我反正没成功,cacti把尖括号神马的都过滤掉了。这条路暂时封死了。

clip_image002clip_image003

无聊之中,发现了同机器上竟然装了pma,尝试了下,默认密码竟然进去了。

clip_image004

数据库中的poller_command引起了我的兴趣,照理说这应该是一个会导致命令执行的地方。大致看了下源码,水平搓,没有看懂究竟是执行shell命令还是php命令,实践出真知,直接写一句吧。

clip_image005

clip_image006

等了5分钟,poller执行(试过的童鞋应该知道,啥命令都不会被执行,不知道为啥),虽然没有直接效果,但是却在log中成功写入了php代码。Then,get shell

clip_image007

2. 代码漏洞,拿到bbs的shell
通过观察,可以知道cacti的服务器同时还是备份服务器,bbs的代码被同步到了这个机器上。然后就是长期而苦逼的读代码的过程了。当然最直接的想法是去找调用了eval或者preg_replace这类直接能执行代码的地方。

clip_image008

下面要扯一下某某河畔的论坛的登录。某某河畔论坛登录采用的是usercenter方式认证,bbs作为uc的一个application存在,每次需要认证的时候产生一个rand,记录在session中,并把需要的相关参数拼接上rand、app_key计算md5散列后作为附加参数,通过用户浏览器GET传递给uc;uc验证用户登录授权是否合法之后,将用户uid拼接上rand和app_key计算md5作为附加参数,通过用户浏览器GET回bbs。
仔细观察登录验证的api代码,惊喜的发现一个eval。

clip_image009

回查调用代码,只要通过下面代码的检查就会执行到eval,数据库密码明写在代码中,那么只要在数据库中添加一个名为“xxx.eval($_REQUEST[cmd]);//”的api就可以执行代码了。接下来的写一句话,自是不提。

clip_image010

clip_image011

这次检测有几点感觉:
1. 很过管理密码保持默认的危害性非常大,你完全不知道什么时候这个应用会被发现并威胁到服务器安全。特别是各种内部系统会对外开放的时候。
2. 很多应用都是对外部数据防护得很好,而内部数据过于信任,根本就没有任何过滤措施。如这次cacti,可以任意指定log文件的位置,没有检查拓展名;没有检查数据库中commad的内容,直接将错误信息输出到log中;uc没有对api名做基本的检查,导致任意代码执行
3. 很多机器web目录权限总是设置不当
4. APT攻击几乎总能成功
5. 安全问题总是很难防护得很完善,一处被击破,处处都受影响

漏洞证明:

见漏洞详情

修复方案:

1. cacti不用就卸载掉
2. web目录的除了上传目录,都不应该让www用户有写权限,而上传目录应该限制死不能执行脚本
3. bbs验证登录时,需要判断referer,从非用户渠道获取是否真正成功登陆,以避免app_key泄漏带来的各种风险
4. 仅仅对于用户提交的数据严格过滤是不够的,对于来自数据库,session,文件这样的内部数据也要进行安全检查

来源 剑心@乌云
源链接

Hacking more

...