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

时间: 2024-10-13 10:17:54

WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss的相关文章

MySQL:MySQL日期数据类型、MySQL时间类型使用总结

MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式                日期范围------------  ---------  --------------------- -----------------------------------------datetime      8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 ~ 9999-12-31 23:59:5

Python/MySQL(四、MySQL数据库操作)

Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: 1 case when id>9 then ture else false 二.三元运算: 1 if(isnull(xx)0,1) 三.上下连表: select id,name from ta1 union 天然去重(检测上边的表和下边的表行内完全一样就只显示一行内容) select num,sname from tb2 ========================================== select

MySQL:MySQL日期数据类型、MySQL时间类型详解

一.MySQL 日期类型:日期格式.所占存储空间.日期范围 比较 日期类型        存储空间       日期格式                                       日期范围 ------------          ---------   ---------------------                      ----------------------------------------- datetime          8 bytes  

02: MySQL 索引类型 、 MySQL 存储引擎

day02一.mysql索引二.MySQL存储引擎+++++++++++++++++++++++++++++++++++一.mysql索引1.1 索引介绍 : 相当于 "书的目录" 5000页1~200 目录信息拼音排序部首排序笔画排序 201~5000 正文 1.2 索引的优点与缺点?优点 加快查询的速度缺点 占用物理存储空间,减慢写的速度. 姓名 性别 班级 年龄jimjimNULL 1.3 使用普通索引index:(在表中的字段上创建索引)使用规则?查看 desc 表名: key

6\MySQL 主从同步 、 MySQL 读写分离 、 MySQL 性能调优

day06一.mysql主从同步 二.数据读写分离三.MySQL优化++++++++++++++++++++++++++++++++一.mysql主从同步 1.1 主从同步介绍?从库服务器自动同步主库上数据(被客户端访问的数据库服务器做主库服务器)1.2 结构 54 55 systemctl start mysqld systemctl start mysqld主master数据库服务器 从slave数据库服务器 1.3 配置主从同步结构?1.3.1主库角色主机的配置1 用户授权mysql> g

MySQL 主从同步 、 MySQL 读写分离

一.mysql主从同步 二.数据读写分离三.MySQL优化++++++++++++++++++++++++++++++++一.mysql主从同步 1.1 主从同步介绍?从库服务器自动同步主库上数据(被客户端访问的数据库服务器做主库服务器)1.2 结构 54 55 systemctl start mysqld systemctl start mysqld主master数据库服务器 从slave数据库服务器 1.3 配置主从同步结构?1.3.1主库角色主机的配置1 用户授权mysql> grant

Database基础(六):实现MySQL读写分离、MySQL性能调优

一.实现MySQL读写分离 目标: 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 方案: 使用4台RHEL 7.2虚拟机,如下图所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100作为MyS

【MySQL】2、MySQL 创建数据库和表

2.MySQL 创建数据库和表 2.1.创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库. CREATE DATABASE database_name 为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数(用于向 MySQL 连接发送查询或命令). 2.2.创建表 CREATE TABLE 用于在 MySQL 中创建数据库表. CREATE TABLE table_name ( column_name1 data_type, column

29_MySQL读写分离 MySQL多实例 、MySQL性能调优

版本:5.7.28 mysql51:192.168.4.51 主mysql52:192.168.4.52 从mysql50:192.168.4.50 客户机 1.实现MySQL读写分离搭建一主一从结构配置maxscale代理服务器测试分离配置 1.1 搭建一主一从结构192.168.4.51 主192.168.4.52 从测试OK 1.2 实现mysql读写分离1.2.1 配置数据读写分离服务器:192.168.4.50]# wget https://downloads.mariadb.com/