首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

或许是csrf攻击?

在之前的公司工作的时候,在技术交流会上听说了这个名词。在接触过xss后终于又见识到了黑科技。有时候感觉做技术真的是成佛成魔就在一念之间,有时候做着做着就发现作为好人的自己,其实自己手里早就有了凶器。

那就进入今天的正题。

后面我会简单介绍(copy百度)一下什么是csrf,再通过实际案例来体验一下一个简单的csrf攻击案例。

什么是csrf

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session

Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

举个例子

假如你刚登陆了QQ农场准备偷菜(呵呵你是gg还是mm你也在网上冲浪啊),这时候对你的浏览器来讲,它已经脸熟了你。浏览器保存了你的登录凭证,并且会在你任何一个需要这个凭证的时候帮你递给对应的服务器。

这时候隔壁王大哥给你发来一个链接,说让你帮忙去拼夕夕砍个价,家里孩子缺个奶瓶,再不砍价买个奶瓶孩子就要饿干了。

你想都没想就点了,然后就悲剧了。

这个链接利用了你的登录凭证,打开了QQ相册,把你的全套苍老师都拷走了。

怎样进行csrf攻击

看来这个才是重点,但我想像下面这样来具体讲解。

我也不知道这具体算不算csrf攻击,如果不算的话就当看着玩了。我会在搞完实验后将问题交公,让开发团队去寻找问题修补缺口。所以说要报警抓我的人就算了吧。

接下来……以一个H5跨平台app —— 大学印象 举例吧。

目标

让表白墙用户都说自己是猪

接口

首先我们需要借助工具抓取接口来来往往的数据包,来看一下原理是怎么样的。

抓包工具,windows下使用fiddler,mac下使用charles。

手机和电脑连到同一个wifi,开启代理。趁大家都在睡午觉,发个表白墙。

发了表白墙之后,在charles中就抓到了对应的数据包。

在数据包中我们观察到,token是登录凭证,content是表白墙内容,name是表白对方的名字。有这些就够了。

也就是说,我在任何地方,只要发送了这个数据包,就可以在app内新增一条表白墙。

接下来,我们需要找到token存在哪里。

本地存储

进行下一步之前我们需要知道一个基本原理,那就是h5 app可以在本地存储中缓存一些数据。然后我找到了h5 api文档。

作为h5的特性,或许有一些需要持久存储的内容就在这里。不妨试一试。

使用hbuilder新建一个mui页面,在plusReady之后尝试取一下本地存储中的token。

还好hbuilder有本地调试功能,同样在一个局域网下,直接扫码就可以访问局域网页面了。

好…接下来用大学印象扫码试试…

代码已经开始run起来了……好激动

漂亮。token拿到手了

到了这里我就不禁好奇,本地存储里究竟还有其他什么东西呢?这个在后面再讲。我们先实现全民变猪功能。

功能实现

有了token之后就相当于什么都有了,接下来我们伪造页面。

functionhack(){

mui.ajax('http://this is a api',{

data:{

token:token,

content:'我'+name+'就是一只小猪',

name:'我自己',

school_code:412

},

dataType:'json',//服务器返回json格式数据

type:'post',//HTTP请求类型

timeout:10000,//超时时间设置为10秒;

success:function(xxx){

document.write('谢谢你帮我。

'+JSON.stringify(xxx));

},

error:function(xhr,type,errorThrown){

}

});

}

这个hack函数放在页面里,我们再扫码试试。

看样子是成功了,我们打开表白墙看看吧。

看样子是成功了……

做到了这里,至少证明这个方案是可行的。但是现在只实现了是我自己变猪,没有全民变猪。最一开始的问题到现在就转化为了,如何让更多的人在大学印象打开这个网页。

传播

如果禁止了跨域访问

上述攻击方式是将hack部分的代码放在第三方(我自己的)服务器上,如果在后端那边禁止了跨域访问,这种方法就不好用了。

这之后就只好把ajax请求放在后端进行,使用php的curl方式。在前端的本地存储获取到token,把token发给自己的服务器,然后在服务端发包。

到底能做多坏的事情

前面提到,本地存储中除了token还有name,那么除了这两个字段还会有其他多少内容呢?

我们可以写一段代码来遍历一下本地存储中的内容。

varall='';

for(vari=;i

all+='、'+c;

}

alert(all)

结果是

使用phone字段,可以做一个用户手机号收集器。

使用image字段,可以收集全部小姐姐的高清头像。

password字段拿到之后,再循环发给一些解密接口,相当于可以拿到一部分用户的明文密码。

诸如此类……

对大学印象的csrf实验就搞完了。

查阅一些资料后有些觉得这个不太符合csrf的特性…姑且叫它为“或许是csrf”吧。

对于hack和反hack之间的斗争,一直都是道高一尺魔高一丈的道理。没有绝对好用的手段,也没有绝对安全的系统。

csrf最可怕的不是造成的后果如何如何,最可怕之处或许就像百度写的,CSRF攻击往往不大流行,因此对其进行防范的资源也相当稀少。

转念一想,可能csrf也是优点。比如大学印象没有批量删帖功能,利用这个特性,第三方开发者就可以做出批量删帖的hack页面,用户只需要扫码就能立即删除全部帖子。如果第三方开发者更良心一些,使用帖子列表的接口做一个帖子列表,让用户们可以自己勾选哪篇帖子需要删除,这样就完成了“批量删帖”的需求。

不瞎比比了,写完了就发给开发组老铁们玩耍了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180918G15TK500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券