CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 漏洞列表
  3. 正文

csrf

2018年11月18日 516点热度 0人点赞 0条评论

csrf
登录
注册
各大SRC中的CSRF技巧 i春秋学院2017-10-25 首发专栏:i春秋学院关注
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attacksession riding,缩写为:CSRFXSRF。
本文作者:i春秋签约作家——Max、

一.CSRF是什么?
  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

二.CSRF可以做什么?  

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

1.png

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
  1.登录受信任网站A,并在本地生成Cookie。
  2.在不登出A的情况下,访问危险网站B。

  看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:
  1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
  2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了……)
  3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

  上面大概地讲了一下CSRF攻击的思想,下面我将用几个例子详细说说具体的CSRF攻击,这里我以一个银行转账的操作作为例子(仅仅是例子,真实的银行网站没这么傻:>)

  示例1:
  银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
  危险网站B,它里面有一段HTML的代码如下:
  
  首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块……
  为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作……

  示例2:
  为了杜绝上面的问题,银行决定改用POST请求完成转账操作。
  银行网站A的WEB表单如下: 

    

ToBankId:

    

Money:

    

  

后台处理页面Transfer.php如下:


危险网站B,仍然只是包含那句HTML代码:
  
  和示例1中的操作一样,你首先登录了银行网站A,然后访问危险网站B,结果…..和示例1一样,你再次没了1000块~T_T,这次事故的原因是:银行后台使用了$_REQUEST去获取请求的数据,而$_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据,这就造成了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中,可以使用$_GET和$_POST分别获取GET请求和POST请求的数据。在JAVA中,用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。

  示例3:
  经过前面2个惨痛的教训,银行决定把获取请求数据的方法也改了,改用$_POST,只获取POST请求的数据,后台处理页面Transfer.php代码如下:


然而,危险网站B与时俱进,它改了一下代码:


  
    
  

    
  

如果用户仍是继续上面的操作,很不幸,结果将会是再次不见1000块……因为这里危险网站B暗地里发送了POST请求到银行!

  总结一下上面3个例子,CSRF主要的攻击模式基本上是以上的3种,其中以第1,2种最为严重,因为触发条件很简单,一个就可以了,而第3种比较麻烦,需要使用JavaScript,所以使用的机会会比前面的少很多,但无论是哪种情况,只要触发了CSRF攻击,后果都有可能很严重。

  理解上面的3种攻击模式,其实可以看出,CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

五.CSRF的防御
  我总结了一下看到的资料,CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。

  1.服务端进行CSRF防御
  服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。

  (1).Cookie Hashing(所有表单都包含同一个伪随机值):
  这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:>


在表单里增加Hash值,以认证这确实是用户发送的请求。

  
  
  ”>
  

然后在服务器端进行Hash值验证


这个方法个人觉得已经可以杜绝99%的CSRF攻击了,那还有1%呢….由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,这就另外的1%。一般的攻击者看到有需要算Hash值,基本都会放弃了,某些除外,所以如果需要100%的杜绝,这个不是最好的方法。

  (2).验证码
  这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄….这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。

  (3).One-Time Tokens(不同的表单包含一个不同的伪随机值)
  在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。

  以下我的实现:
  1).先是令牌生成函数(gen_token()):


2).WEB表单生成隐藏输入域的函数: 

“;
  }
?>
3).WEB表单结构:






4).服务端核对令牌:

  这个很简单,这里就不再啰嗦了。

  上面这个其实不完全符合“并行会话的兼容”的规则,大家可以在此基础上修改。

来自(http://www.cnblogs.com/hyddd/

下面我们来看实例,这都是修复过的大家可以看看。下面是百度的案例。

准备两个帐号

2.png

3.png

然后换上我们的帐号b打开这个连接自动保存信息。

4.png

5.png

6.png

下面是团队Maniac师傅分享的

1.

苏宁易购

随便选择一个商品

7.png

8.png

对加入购物车抓包:

得到GET类型CSRF地址:

shopping.suning.com/addCart.do?callback=jQuery172024145830748602748_1501861313180&cartVO=%7B%22provinceCode%22%3A%22100%22%2C%22cityCode%22%3A%22510%22%2C%22districtCode%22%3A%2251001%22%2C%22cmmdtyVOList%22%3A%5B%7B%22cmmdtyCode%22%3A%22000000000627335192%22%2C%22shopCode%22%3A%220070157188%22%2C%22activityType%22%3A%2202%22%2C%22cmmdtyQty%22%3A%221%22%2C%22activityId%22%3A%226195084%22%7D%5D%2C%22verifyCode%22%3A%22%22%2C%22uuid%22%3A%22%22%2C%22sceneId%22%3A%22%22%7D&b2c_fc_authid=&crossDomainJsonpRequest=true&_=1501861319545

9.png

现在我们查看自己的购物车:

是空的访问我们的那个CSRF接口链接

http://shopping.suning.com/addCart.do?callback=jQuery172024145830748602748_1501861313180&cartVO=%7B“provinceCode”%3A”100″%2C”cityCode”%3A”510″%2C”districtCode”%3A”51001″%2C”cmmdtyVOList”%3A%5B%7B”cmmdtyCode”%3A”000000000627335192″%2C”shopCode”%3A”0070157188″%2C”activityType”%3A”02″%2C”cmmdtyQty”%3A”1″%2C”activityId”%3A”6195084″%7D%5D%2C”verifyCode”%3A”"%2C”uuid”%3A”"%2C”sceneId”%3A”"%7D&b2c_fc_authid=&crossDomainJsonpRequest=true&_=1501861319545

返回的数据包

10.png

购物车多了一个商品你懂得!

11.png

2.地址保存处CSRF

12.png

无token存在CSRF但是检验了token不过没有关系绕过referer即可!

修改Referer地址,referer地址中referer验证只是验证了suning这个关键字那么打扰就好了:

现在你会发现referer地址变成了一堆乱七八糟地址但是还是成功了!

刷新页面:

13.png

3.下订单处存在CSRF

14.png

Ok没问题

看看我们的订单吧:

15.png

专栏
i春秋学院
i春秋学院
339 篇文章
等级: 3级
关注
||
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
相关推荐
惊呆了!这个专业毕业就能进入名企工作
惊呆了!这个专业毕业就能进入名企工作
i春秋Web安全就业班返场优惠 入门到就业的一站式服务 小白到牛人的完美逆袭 加入我们 入职名企不是梦

i春秋学院2018-11-16672
18年最有"钱"途的专业就是它(文末有福利)
18年最有"钱"途的专业就是它(文末有福利)
i春秋&网易特研Web安全工程师进阶班 直降800 还有好礼相送 活动时间截止到11月14日 00:00

i春秋学院2018-11-121514
企业的生死存亡居然和它有关?
企业的生死存亡居然和它有关?
信息安全关乎企业命脉 加强安全意识刻不容缓

i春秋学院2018-11-081901
您有双十一红包未领取,请注意查收!
您有双十一红包未领取,请注意查收!
双11狂欢节 买买买 你选择快销品 用完就没了 我买培训课程 不断在增值

i春秋学院2018-11-071110
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank

标签: 暂无
最后更新:2018年11月18日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me