漏洞概要 关注数(24) 关注此漏洞
>
漏洞详情
披露状态:
									2014-06-19:	细节已通知厂商并且等待厂商处理中
									2014-06-24:	厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
									2014-08-18:	细节向核心白帽子及相关领域专家公开
									2014-08-28:	细节向普通白帽子公开
									2014-09-07:	细节向实习白帽子公开
									2014-09-14:	细节向公众公开
								
简要描述:
一起交了吧,后台注入+后台getshell。注入的话低权限就行了。
'pc_version' => 'V9.5.6',	//phpcms 版本号
'pc_release' => '20140522',	//phpcms 更新日期
详细说明:
我曾交过一个后台getshell( WooYun: PHPCMS后台Getshell ),看看phpcms怎么修复的。
这是后台编辑自定义url规则的代码(/phpcms/modules/admin/urlrule.php:47),关键看其中怎么过滤后缀的:
关键就是这两句话:
$_POST['info']['urlrule'] = rtrim(trim($_POST['info']['urlrule']),'.php');
$_POST['info']['urlrule'] = str_replace('.php','',$_POST['info']['urlrule']);
先去除了右边所有的“.php”中任意一个字符。然后再把.php清空。
其实就是比之前那个多了一个str_replace。
那么如果我的文件名是“xxxx.p.phphp .php”的话,首先去除右边的.php变成“xxxx.p.phphp ”,然后再替换.php为空,依旧变成“xxxx.php ”,拿shell方法和之前提交的一样。
然后注入,注入的话比较多,举个栗子,编辑文字处(/modules/content/content.php:151):
将$_POST['info']带入update函数,跟一下update函数:
再跟进这里面的update方法:
主要是$fields[] = $this->add_special_char($k).'='.$this->escape_string($v);这句,其实就是将key的值两边加反引号`,value的值两遍加单引号。
我们的POST数据是经过addslashes了的,但只有值经过了addslashes,键没有任何过滤。所以我们在POST数组的键中加入单引号就会报错:
漏洞证明:
拿shell步骤就不详细说了,看图吧:
注意此时要改“内容页”的url规则。
然后发表一篇内容,其中包含shell,在栏目的位置要把内容页url规则选成刚才改的那个。
然后生成一下内容页的静态,访问即可见shell:
注入的话低权限就可以了,只要编辑权限,能够有内容板块的管理权限:
如图,注入的时候记得要用/*!50000select*/替代select,因为内部会过滤一下select:
此类后台注入还有很多,基本都是类似这种直接将$_POST变量传入update或insert函数:update($_POST:
修复方案:
自己看咯~
版权声明:转载请注明来源 phith0n@乌云
>
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2014-09-14 12:32
厂商回复:
最新状态:
暂无

 
                 
                        





