码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2014-10-30 22:12:48      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   color   os   ar   使用   

目录

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

bubuko.com,布布扣

http://xxxxx:8080/mysql/add_db.php

bubuko.com,布布扣

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 

bubuko.com,布布扣

fixed code

find /zhenghan/vulpoc/wdcp/lanmp/www/wdlinux/wdcp/mysql -type f -print0 | xargs -0 md5sum 

bubuko.com,布布扣

通过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

 

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

标签:des   style   blog   http   io   color   os   ar   使用   

原文地址:http://www.cnblogs.com/LittleHann/p/4063267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!