CSRF防护(找到自己的点赞文章)

举报
Amrf 发表于 2019/12/12 17:01:29 2019/12/12
【摘要】 想找到一篇前几天在博客这边点赞的文章,愣是没找到入口,发现api/blog/get-vl可以获得某一篇博客自己是否点赞, 但是用restles测试发现总是返回false信息,与实际不符;怀疑是不是由于_csrf保护导致的就查了查csrf保护相关的机制; 查询记录:https://www.cnblogs.com/digdeep/p/4703298.htmlhttps://segmentfaul...

想找到一篇前几天在博客这边点赞的文章,愣是没找到入口,发现api/blog/get-vl可以获得某一篇博客自己是否点赞, 但是用restles测试发现总是返回false信息,与实际不符;怀疑是不是由于_csrf保护导致的就查了查csrf保护相关的机制;

在目标页面console里直接执行ajax请求就可以获得正确的结果,

感觉不是csrf导致的;

找到自己的所有点赞主要步骤分两步

  1. 登录博客之后,在console里执行下面的代码获取到所有的blogid,其中2788是博客总页数,可以在首页看到

var apiRoot = 'https://bbs.huaweicloud.com/api/blog/info';
var sumContent = '';
var getarray = [];
var blogObject = { };
        blogObject.page = 1;//默认从第一页开始
        blogObject.category = "all";//文章类别
        blogObject.tag = "";//选择标签
        blogObject.defaultUrl = "//static.huaweicloud.com";
        blogObject.bbsimg = "https://bbs.huaweicloud.com";
for(var i=1;i<=1394;++i){
	blogObject.page = i;
	getarray.push($.ajax({
            type: "post",
            data: blogObject,
            dataType: "json",
            url: apiRoot,
            success: function (data) {
                sumContent += data.content;
            }
	}));
}
var getarray1 = [];
$.when.apply($, getarray).done(function() { 
    for(var i=1395;i<=2788;++i){
    blogObject.page = i;
	getarray1.push($.ajax({
            type: "post",
            data: blogObject,
            dataType: "json",
            url: apiRoot,
            success: function (data) {
                sumContent += data.content;
            }
	}));
}
});

2.第二步,等第一步的请求完成之后,遍历所有blogid查询自己是否点赞

sumContent.match(RegExp('blogid="[^"]+"','g')).forEach(function(item, index){
	eval(item);
    var s = {};
    s._csrf = getAinfo();
    s.blogId = blogid;
    $.ajax({
        type: "post",
        url: 'https://bbs.huaweicloud.com/api/blog/get-vl',
        data: s,
        async: false,
        dataType: "json",
        success: function (data) {
        	if(data.is_vote){
				console.log('#'+blogid);
        	}
    	}
    });
});

当然上述的过程可能显得过于长了,尤其是第二步为了保证csrf过程使用了同步请求,可以考虑从自己的历史纪录先过滤出来自博客的链接,再使用第二步判断;或者对第一得到的结果,过滤出其中点赞数大于0的,再进行第二步;此外,由于第二步遍历时间过长,过程中登录可能失效,导致后续请求失败;https://bbs.huaweicloud.com/blogs/加上获取的blogid就是目标地址;

 查询记录:

https://www.cnblogs.com/digdeep/p/4703298.html

https://segmentfault.com/a/1190000007932293

https://medium.com/%40Skylinearafat/a-very-useful-technique-to-bypass-the-csrf-protection-for-fun-and-profit-471af64da276

https://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html

https://xz.aliyun.com/t/6176

https://bbs.huaweicloud.com/blogs/137394

https://bbs.huaweicloud.com/blogs/137380

https://bbs.huaweicloud.com/blogs/127451


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。