首页 > 代码库 > WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss

WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss

目录

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-067447http://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.phpadd_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.pdfhttp://www.ibm.com/developerworks/cn/opensource/os-php-zend1/http://baike.baidu.com/view/772047.htmhttp://kb.zend.com/how-to-install-zend-optimizer-manually/http://www.zend.com/en/products/guard/downloads#Windowshttp://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

 

WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss