CSRF-跨站请求伪造

概述

CSRF(跨站请求伪造)概述

Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。
这里列举一个场景解释一下,希望能够帮助你理解。
场景需求:
小黑想要修改大白在购物网站tianxiewww.xx.com上填写的会员地址。
先看下大白是如何修改自己的密码的:
登录---修改会员信息,提交请求---修改成功。
所以小黑想要修改大白的信息,他需要拥有:1,登录权限 2,修改个人信息的请求。
 

但是大白又不会把自己xxx网站的账号密码告诉小黑,那小黑怎么办?
于是他自己跑到www.xx.com上注册了一个自己的账号,然后修改了一下自己的个人信息(比如:E-mail地址),他发现修改的请求是:
【http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change】
于是,他实施了这样一个操作:把这个链接伪装一下,在小白登录xxx网站后,欺骗他进行点击,小白点击这个链接后,个人信息就被修改了,小黑就完成了攻击目的。
 

为啥小黑的操作能够实现呢。有如下几个关键点:
1.www.xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造;
---因此,我们判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。
2.小白点击了小黑发给的链接,并且这个时候小白刚好登录在购物网上;
---如果小白安全意识高,不点击不明链接,则攻击不会成功,又或者即使小白点击了链接,但小白此时并没有登录购物网站,也不会成功。
---因此,要成功实施一次CSRF攻击,需要“天时,地利,人和”的条件。
当然,如果小黑事先在xxx网的首页如果发现了一个XSS漏洞,则小黑可能会这样做: 欺骗小白访问埋伏了XSS脚本(盗取cookie的脚本)的页面,小白中招,小黑拿到小白的cookie,然后小黑顺利登录到小白的后台,小黑自己修改小白的相关信息。
---所以跟上面比一下,就可以看出CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
--对敏感信息的操作增加安全的token;
--对敏感信息的操作增加安全的验证码;
--对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

如果你没有读太明白,不要犹豫,请再读一遍啦

你可以通过“Cross-site request forgery”对应的测试栏目,来进一步的了解该漏洞。

CSRF(get) login

①注意提示,此处的用户名密码已经更改了。

②我们随机登录一个,修改个人信息,点击提交,并通过burpsuite抓包。
③从数据包请求来看,并没有token限制,我们修改url即可。

将其原有地址更改为beijing

点击修改个人信息抓包

将其原有地址更改为beijing

访问url

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=45634&phonenum=123&add=china&email=999.com&submit=submit

修改成功

CSRF(POST)

  • 先将任一用户的信息进行修改,通过控制台查看数据包。这里将vince用户的住址修改成Beijing

  • 可以看到,请求通过POST方式提交,从而无法像前面一样通过伪造URL来进行攻击,那么这个漏洞应该怎么利用呢?
  • 此时,黑客可以通过构造恶意站点,将POST请求隐藏在站点中的表单中,然后诱骗用户进行点击,当用户点击后触发表单,数据自然就POST到存在CSRF漏洞的网站,用户的信息则被恶意修改。
  • 这里需要借助CSRFTester软件进行抓包。先打开CSRFTester,用法和Brup差不多,不过这里需要配置的监听端口为8008。点击Start Recording开启监听后修改用户信息。提交表单后,可以看到已经抓到这个POST请求

  • 将其它多余的请求删除,然后点击Generate HTML生成恶意网页index.html,使用编辑器将其打开。这里可以直接修改其中的数据,依然将邮箱修改为黑客邮箱Hacker@pikachu.com,另外还需要添加一个提交按钮。修改完成后,部署到黑客站点,这里我放到Pikachu/vul/csrf/目录下

  • 最后,当用户在登录状态下,访问黑客站点http://127.0.0.1/pikachu/vul/csrf/index.html并点击提交按钮,那么其个人信息将会被恶意修改,可以在控制台中看到点击按钮后触发的POST请求

Token验证

原理:CSRF的主要问题是敏感操作的链接容易被伪造。而只要在每次请求时都增加一个随机码Token,后台每次都对这个随机码进行验证,则可以有效地防止CSRF

  • 在源码token_get_edit.php中看到,每次刷新页面,都会调用set_token()函数,该函数会把SESSIONToken销毁,然后生成一个新的Token,并将这个Token传到前端表单中
<div id="per_info">
   <form method="get">
   <h1 class="per_title">hello,{$name},欢迎来到个人会员中心 | <a style="color:bule;" href="token_get.php?logout=1">退出登录</a></h1>
   <p class="per_name">姓名:{$name}</p>
   <p class="per_sex">性别:<input type="text" name="sex" value="{$sex}"/></p>
   <p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="{$phonenum}"/></p>    
   <p class="per_add">住址:<input class="add" type="text" name="add" value="{$add}"/></p> 
   <p class="per_email">邮箱:<input class="email" type="text" name="email" value="{$email}"/></p>
       
   <input type="hidden" name="token" value="{$_SESSION['token']}" />
       
   <input class="sub" type="submit" name="submit" value="submit"/>
   </form>
</div>
  • 而当每次提交表单时,这个Token值就会传到后台与SESSION中的Token进行比较,若不相等,此次表单则提交失败。所以黑客由于不能得知用户当前的Token值,从而无法进行CSRF攻击。

其它防范措施

  • 增加验证码:一般用于防止暴力破解,也可以用在其它重要信息操作的表单中
  • 安全的会话管理:
    • 不要在客户端保存敏感信息,如身份认证信息
    • 设置会话过期机制,如15分钟内无操作则自动登录超时
  • 访问控制安全管理:
    • 敏感信息修改时需要对身份进行二次认证,如修改密码时,需要校验旧密码
    • 敏感信息的修改使用POST,而不是GET
    • 通过HTTP头部中的Referer来限制原页面

本文版权归作者和CSDN平台共有,重在学习交流,欢迎转载。

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!

敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值