dedecms审计

分析源码首页

文件包含 nclude/common.inc.php

使用了$$有可能存在变量覆盖的问题

进一步文件上传分析

_RunMagicQuotes()   使用addslashes()过滤数据

if($_FILES){require_once(DEDEINC.'/uploadsafe.inc.php');} 用来过滤上传  进行分析

黑名单

进行分析文件上传检测方法

!empty(${$_key.'_name'} 若上传的文件名不为空,则继续执行

preg_match("#.(".$cfg_not_allowall.")$#i",${$_key.'_name'}) || !preg_match("#.#", ${$_key.'_name'})

后缀名在黑名单 或者没有符号.继续

搜索DEDEADMIN函数,定义函数适用于后台

首先,服务端MIME content-Type检测

strtolower 所有字符转为小写。文件将通过getimagesize()来获取图像信息,当上传的文件为图片时,将会通过getimagesize()二次验证传入的是否为图片

后台index文件分析

index加载dede/config.php

config.php加载common.inc.php和加载管理员登录

检测csrf和xss

文件上传

抓包获取文件上传的文件

处理上传功能的文件为dede/archives_do.php,rchives_do.php加载config.php, config.php加载common.inc.php

回到之前分析的文件uploadsafe.inc.php进行过滤

漏洞验证

任意用户登录

会员中心模块的入口文件为member/index.php

首先判断uid是否为空

当$uid为空时

当$uid为空时,判断用户的登陆状态,如果未登陆就加载登陆框,如果已经登陆,则展现对应用户的个人主页

当$uid不为空时,会加载config_space.php文件

config_space.php文件主要为登录账户的信息模块

首先从member/index.php发现加载了config.php,在config.php获取登录userlogin.class.php的加载

serlogin.class.php发现cms判断用户登录,M_ID值判断大于0即为登陆状态

common.inc.php定义了使用外部变量方法进行变量声明

故发现uid可控

MemberLogin文件主要为cookie的保存,文件主要为会员的一些东西

管理员不能从前台登录

用户账号密码验证成功后保存cookie

全局搜索PutCookie

这里利用了md5方法生成cookie,cookie无法破解生成

通过之前发现的M_ID判断用户登录,定位M_ID

M_ID的值将来自于cookie,M_ID还会通过GetNum()或intval()转换成整数类型,GetNum()用于接收整数,GetCookie()用于获取cookie值

漏洞复现

注册一个名为admin1的用户

修改数据

直接通过登陆框登陆admin用户是进不了个人主页的,因为dedecms默认禁止admin用户登陆会员中心。如果通过方法却可以实现amdin用户登陆

任意用户密码修改漏洞

功能点位于会员中心找回密码处

分析member/resetpassword.php

resetpassword.php中 主要有变量$dopost进行判断,且$dopost可控,$dopost默认为空,会加载resetpassword.htm,用于显示找回密码的页面

$dopost == "getpwd",主要为找回密码界面

之后的为密码的二次验证

$dopost == "safequestion,其中$row['safequestion']为数据库数据问题,$row['safeanswer']为数据库答案,这里思考,若safequestion为空即没有安全问题,数据库默认的safequestion="0",safeanswer=""(这里分析注册页面)

safequestion="0",但是不能传入$safequestion为0,这样会导致empty()判断为空,最终被赋值为空。

使用弱类型比较==字符型的0.0或00,进行绕过

safequestion=00&safeanswer=

验证成功会进入到sn函数,进行对临时密码进行判定

定位sn函数,member/inc/inc_pwd_functions.php,文件主要为发送验证码,程序首先利用函数传输过来的mid拼接上SQL语句进入#数据库检测

发送邮件用到newmail,对其进行定位,传入的$send为N,会下发重置密码的链接,进行密码修改操作。这里会把临时密码给泄露出来

回到member/resetpassword.php,发现用户传输的临时key和数据库存储的pwd进行对比,如果一样则会成功修改密码

漏洞利用

http://localhost/DedeCMS/uploads/member/resetpassword.php?dopost=safequestion&safequestion=0e1&safeanwser=&id=1

拿到临时key,访问,绕过验证

http://localhost/DedeCMS/uploads/member/resetpassword.php?dopost=getpasswd&id=2&key=28SKBIgs

XSS

xss漏洞主要主要注意一些输出类函数

分析qrcode.php,首先加载common.inc.php会注册全局变量

文件进行加载$tplfile = DEDETEMP1ATE.'/plus/qrcode.htm';

这里使用$dtp->SetVar('type',$type);进行动态传参数

对qrcode.htm文件进行访问,其文件是一个二维码文件

这里没有对xss进行过滤

http://localhost/DedeCMS/uploads/plus/qrcode.php?id=1&type=%22%3E%3CScRiPt%3Ealert(1)%3C/ScRiPt%3E

url重定向

常见重定向参数

redirect    redirect_to     redirect_url     url jump     jump_to       target   link   linkto     domain   do

进行全局搜索函数

发现download.php文件存在对$link做了base64解码

http://localhost/DedeCMS/uploads/plus/download.php?open=1&link=aHR0cDovL3d3dy5iYWlkdS5jb20%3D

跳转到百度



原文地址:https://www.cnblogs.com/bingtang123/p/15136374.html