Portswigger web security academy:Cross-origin resource sharing (CORS)


Portswigger web security academy:Cross-origin resource sharing (CORS)

目录
  • Portswigger web security academy:Cross-origin resource sharing (CORS)
    • 1 - CORS vulnerability with basic origin reflection
    • 2 - CORS vulnerability with trusted null origin
    • 3 - CORS vulnerability with trusted insecure protocols
    • 4 - CORS vulnerability with internal network pivot attack

1 - CORS vulnerability with basic origin reflection

  • 题目描述

    • 该网站的跨域设置不安全,允许所有跨域请求
  • 要求

    • 利用exploit server盗取管理员的API key并提交
  • 解题步骤

    • 借助burp collaborator或者exploit server(可以看access log)构造exp

      • 
        

2 - CORS vulnerability with trusted null origin

  • 题目描述

    • 该网站的跨域设置不安全,允许origin为null
  • 要求

    • 利用exploit server盗取管理员的API key并提交
  • 解题步骤

    • 与上一题类似,多了个origin为null,而且材料里有介绍,沙盒化的iframe标签可以达到目的

    • 构造exp

      • 
        

3 - CORS vulnerability with trusted insecure protocols

  • 题目描述

    • 该网站的跨域设置不安全,会信任任何协议下的子域名
  • 要求

    • 利用exploit server盗取管理员的API key并提交
  • 解题步骤

    • 这道题前面的材料大概讲的是,从http协议发送的请求如果符合白名单,也可以以http协议访问目标网站

    • 先按照之前的做法试试

    • 构造exp

      • 
        
      • 打了两次不太行,继续找找看

    • 发现了个xss

    • 如果从这个页面发起请求呢?试试看

      • 
        

        要借助xss跳转,所以需要把脚本编码一下

      • 
        

4 - CORS vulnerability with internal network pivot attack

  • 题目描述

    • 该网站的跨域设置不安全,信任所有内部域
    • 这道题需要很多步骤来完成
  • 要求

    • 构造js脚本来确定192.168.0.0/24 : 8080的端点,并使用CORS删除用户Carlos
  • 解题过程

    • 先探测主机

      • 
        

        (前面把168写成了169,跑了n久。。。)

      • 拿到结果

        172.31.31.68    2021-02-28 07:18:20 +0000 "GET //?text=
        
            
                
                
                CORS vulnerability with internal network pivot attack
            
            
                    
                    OcwOagRrckNCfllF3TWppsdzBjfhZsjLA
                

        Login

        &status=200&url=http://192.168.0.83:8080 HTTP/1.1" 200 "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
      • 主机在192.168.0.83:8080

    • 接下来就是要想办法进入管理页面删除账号了,但是跨域是没有cookie的(直接使用上面的脚本,会提示只有管理员才能进入/admin

      • 需要构造js脚本,使受害者非跨域访问该页面,然后从该页面传回信息,这里卡住了,看了官方的solution,需要用到登录点的XSS(做完补的图)

      • 构造exp(这是官方solution里的脚本)

        
        
        • 改良脚本

          
          
          • 直接访问/login页面,借助username的XSS进行CSRF,利用admin的cookie在iframe加载/admin页面

          • 返回

            172.31.31.68    2021-02-28 08:29:52 +0000 "GET /?code=
                        
                        OcwOagRrckNCfllF3TWppsdzBjfhZsjLA
                    
            HTTP/1.1" 200 "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
    • 还是和上面一样,删除账号也用不到csrf token

      • 构造exp