• 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

    跳转到百度



  • 相关阅读:
    JavaScript常用正則表達式
    详尽解析window.event对象
    DWR的类却无法在js里用
    javascript控制小数点精度
    49. Group Anagrams
    48. Rotate Image
    64. Minimum Path Sum
    63. Unique Paths II
    62. Unique Paths
    53. Maximum Subarray
  • 原文地址:https://www.cnblogs.com/bingtang123/p/15136374.html
Copyright © 2020-2023  润新知