用户
搜索
  • TA的每日心情
    奋斗
    2019-7-25 17:19
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看

    i春秋-脚本小子

    Rank: 2

    6

    主题

    15

    帖子

    94

    魔法币
    收听
    1
    粉丝
    1
    注册时间
    2018-5-29
    发表于 2020-6-21 06:54:30 01670
    本帖最后由 道心 于 2020-6-21 06:58 编辑

    最近在学习CSRF,于是尝试翻译这篇文章去更深入的理解CSRF。
    *因为本帖没有申请稿费,只是用来交流,所以会从原文章中省略一部分的介绍内容而更多的会去讨论技术本身,本菜第一次投稿,邮箱会放在下方,如果发现了任何问题欢迎指正。很多常识就不去解释含义了,例如csrf是个啥或者attacker,victim,token这些单词。

    由于在日益更新的框架和保护措施下,CSRF越来越少见了,其中最为常见的保护措施也是我们今天将研究的就是 Anti-CSRF Token。

    Anti-CSRF Token是一种能够让服务器区别每个用户的方法,这样就能让服务器通过指定用户的请求或者一些操作(例如转账)而且防止csrf攻击(具体原理百度),但是由于应用程序的一些漏洞,这种方式还是可以被攻击者所绕过,这里将列出几种常见的绕过方法。

    在请求报文中删除  Anti-CSRF Token
    更改一些Anti-CSRF Token 中包含的字节
    使用同样的 Anti-CSRF Token
    生成弱加密的 Anti-CSRF Token(burp里的sequencer)
    猜测可能有效的Anti-CSRF Token
    利用其它方式获取 Anti-CSRF Token(例如xss)
    将请求中的POST模式转为GET(也是我们今天要讨论的)。
    找出生成csrf token的文件,然后通过钓鱼进行攻击(js文件等;译者自加)

    案例分析:
    发现含有Anti-CSRF Token的请求报文:

    POST /editprofile HTTP/1.1
    Host: target.com
    <redacted>
    username=test&description=<some_text>&phone=1231231231&anti_csrf=<token>

    在发现有用Token认证的时候,这里将POST方法改变成了GET方法。

    GET /editprofile?username=test&description=<some_text>&phone=1231231231 HTTP/1.1
    Host: target.com
    <redacted>

    这里我们可以发现他将username等函数都加到了请求的路径当中,然后csrf token因为转换成POST所以没有了,经过这个操作,CSRF成功执行。

    但是读的时候我很纳闷,它这个路径是修改信息的,并不是很严重的漏洞,正常来讲也就算个低危,回想了一下标题,他把上面的操作放到了更改密码的请求中,并且成功了!【1】

    报文:
    POST /changepassword HTTP/1.1
    Host: target.com
    <redacted>
    current_password=currentpassword&new_password=new_password&confirm_password=new_password&anti_csrf=<token>

    GET /changepassword?new_password=new_password&confirm_password=new_password HTTP/1.1
    Host: target.com
    <redacted>


    ----------------------分割线---------------------

    读完这篇文章感觉意犹未尽,正好在读Real-World Bug Hunting这本书,在里面的CSRF篇看到了另一种操作,在此分享一下。

    来源: https://hackerone.com/reports/157993/

    这是一个利用api去进行CSRF攻击的案例,网址:https://admin.instacart.com/api/v2/zones/

    Instacart 是一个能让送货员去设置自己的工作区域的软件。 这个网站在用户更新自己的工作区域的时候会发送一个POST请求到Instacart 的admin二级域名(admin.Instacart.com)。在这个案例当中,attacker将利用以下代码来进行更改victim的工作区域。

    <html>
      <body>
      ➊ <form action="https://admin.instacart.com/api/v2/zones" method="POST">
        ➋ <input type="hidden" name="zip" value="10001" />
        ➌ <input type="hidden" name="override" value="true" />
        ➍ <input type="submit" value="Submit request" />
        </form>
      </body>
    </html>

    在这段代码中,attacker创造了一个html form去操作victim在/api/v2/zones的POST请求,attacker创建了两个不可见的输入。(2)将用户的新工作地区改为zip 10001(地区代码),(3)将api中的override(更新)参数设置为True(原url没有,译者瞎猜的)。那么这样的话新的地区代码就会取代原先vitcim的地区代码。(4)创建了一个submit按钮去进行attacker构造的POST request(代码(1-3)),
    这里要插一脚,在上一个例子当中我们发现了GET请求可执行一些不应该执行操作的危害,那么在我们构建CSRF中的恶意网站的时候呢。如果GET请求可以执行CSRF操作的话,咱们完全可以使用 <img src="vitcim.com/xxx">(SRC 一个JS function),使用这样的的方法好处是当受害人点进进去的时候完全看不到这里的操作,而img src标签会在背后悄悄地让浏览器带着他的cookie等信息的去执行GET request从而达到攻击者的目的。当然你可能会想要是有http-only或者有CORS保护呢? 那就要另想操作了,方法永远是方法,他不可能一下子让你成为终极黑客,最重要的是依据形势去形成你的操作或者思路。
    那有什么方法可以提升POST操作呢,很常见的一个例子就是使用hidden iframe去触发自动请求,例如当你点进一个带有黄色广告的网站是,你点击进入18X小游戏按钮时被跳转到了另一个网站。



    总结:
    【1】在发现漏洞的时候,不要就此结束,要去想一下怎么提升它,例如在本文中,从更改信息到更改密码。或者可以尝试从发现的漏洞中去做出组合,例如CSRF和XSS。

    密切关注任何GET请求能够操作或修改一些不应该执行的东西

    推荐有兴趣的可以读读这个列表里的文章:

    邮箱:[email]geekdaoxin@gmail.com[/email]
    希望大佬们喜欢

    发新帖
    您需要登录后才可以回帖 登录 | 立即注册