目录
1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考
1. 漏洞描述
http://www.wooyun.org/bugs/wooyun-2010-067447
WDCP这个控制面板CMS提供了一个服务器管理的功能,但是对mysql/add_user.php这个脚本文件没有进行必要的身份验证,导致任意用户都可以访问这个接口
2. 漏洞触发条件
触发条件为0,任意用户可以直接访问这个接口,进行账户、数据库的添加
http://xxxxx:8080/mysql/add_user.php
http://xxxxx:8080/mysql/add_db.php
Relevant Link:
http://www.wooyun.org/bugs/wooyun-2010-067447 http://www.wdlinux.cn/wdcp/install.html
3. 漏洞影响范围
这个入侵漏洞修复的的场景是在wuyoo报告出漏洞之后,厂商已经进行了修复,并发布了修复后的、被zend加密后的文件,我们需要使用patch diff compare技术对patch后的代码和存在漏洞的文件列表进行对比,定位到本次漏洞事件的源头,存在漏洞的文件(因为存在漏洞的文件可能不只一个)
vul code
find /www/wdlinux/wdcp/mysql -type f -print0 | xargs -0 md5sum
fixed code
find /zhenghan/vulpoc/wdcp/lanmp/www/wdlinux/wdcp/mysql -type f -print0 | xargs -0 md5sum
通过diff,我们可以发现,其中只有2个文件的MD5值是不同的,也就是说官方对这2个文件进行了代码修复
add_user.php add_db.php
4. 漏洞代码分析
0x1: php zendoptimizer
php的zendoptimizer是基于zend的一种代码预编译实现模块,通过提前将代码预编译为一种zendoptimizer可以理解的中间语言,用空间换时间,甚至在zendoptimizer的优化下,并不需要额外的磁盘空间占用,基于预计算的思想可以显著地提高php应用程序的运行速度
Relevant Link:
http://www.zend.com/topics/Zend-Optimizer-User-Guide-v330-new.pdf http://www.ibm.com/developerworks/cn/opensource/os-php-zend1/ http://baike.baidu.com/view/772047.htm http://kb.zend.com/how-to-install-zend-optimizer-manually/ http://www.zend.com/en/products/guard/downloads#Windows http://kb.zend.com/how-to-install-zend-optimizer-manually/#.VFIs2vmUeKQ
0x2: code vul analysis
待审计的代码经过了zend加密,可以使用DeZender.exe进行解密,之后有时间了想研究一下php的zendoptimizer动态加解密的原理,和基于php扩展实现的DeZender的实现原理
<? require_once "../inc/common.inc.php"; if (isset($_POST[‘Submit_add‘])) { $user=chop($_POST[‘user‘]); $password=chop($_POST[‘password‘]); $dbname=chop($_POST[‘dbname‘]); check_user($user); check_string($password); check_string($dbname); //这里没有做任何的身份验证就直接进行高风险操作了 create_db_user($user,$password,$host); grant_db_user($user,$host,$dbname); mysql_add_user($user,$password,$host,$dbname,$rtime); optlog($wdcdn_uid,"增加mysql数据库 $user",0,0); str_go_url("数据库用户增加成功!",0); } $member_list=member_list(); $site_list=site_list(); $db_list=db_list(); require_once(G_T("mysql/add_user.htm")); ?>
5. 防御方法
官方给出了修复方案
Relevant Link:
http://www.wdlinux.cn/bbs/thread-37476-1-1.html
6. 攻防思考
1. 身份验证、权限授权属于web应用系统的边界安全,最佳安全实践应该是在web应用的入口点就进行严格的身份认证,而不应该将身份认证放在各个业务功能的子文件中,这是不合理的 2. 在网站的路由入口点进行强制的路由跳转,进行身份认证,通过认证后通过session来保持住当前认证状态,并且在所有的子页面都部署轻量级的身份认证session检测,如果检测结果为"未登录",则直接强制跳转到唯一的中心认证路由页面上 3. 通过这种中心化的防御思路,可以解决在子页面中单独部署身份认证代码导致的遗漏现象
Copyright (c) 2014 LittleHann All rights reserved