最后更新于
最后更新于
CouchDB是一种多功能且强大的面向文档的数据库,它使用键-值映射结构在每个文档内组织数据。文档内的字段可以表示为键/值对、列表或映射,提供了数据存储和检索的灵活性。
在CouchDB中,每个存储的文档都被分配一个文档级别的唯一标识符(_id
)。此外,对数据库进行的每次修改并保存都会被分配一个修订号(_rev
)。这个修订号允许有效地跟踪和管理更改,便于在数据库内轻松检索和同步数据。
**默认端口:**5984(http),6984(https)
这会向已安装的CouchDB实例发出GET请求。回复应该类似于以下内容之一:
请注意,如果访问couchdb的根目录收到401 Unauthorized
,类似于这样的消息:{"error":"unauthorized","reason":"Authentication required."}
您将无法访问横幅或任何其他端点。
/_active_tasks
正在运行的任务列表,包括任务类型、名称、状态和进程ID。
/_all_dbs
返回CouchDB实例中所有数据库的列表。
/_cluster_setup
返回节点或集群的状态,根据集群设置向导。
/_db_updates
返回CouchDB实例中所有数据库事件的列表。需要存在_global_changes
数据库才能使用此端点。
/_membership
显示作为cluster_nodes
的集群中的节点。字段all_nodes
显示此节点知道的所有节点,包括作为集群一部分的节点。
/_scheduler/jobs
复制作业列表。每个作业描述将包括源和目标信息、复制ID、最近事件的历史记录等其他信息。
/_scheduler/docs
复制文档状态列表。包括所有文档的信息,甚至在completed
和failed
状态下。对于每个文档,它返回文档ID、数据库、复制ID、源和目标等信息。
/_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
/_node/{node-name}
端点可用于确认处理请求的服务器的Erlang节点名称。在访问/_node/_local
以检索此信息时,这是最有用的。
/_node/{node-name}/_stats
_stats
资源返回包含运行服务器统计信息的JSON对象。字面字符串_local
用作本地节点名称的别名,因此对于所有统计URL,可以将{node-name}
替换为_local
,以与本地节点的统计信息交互。
/_node/{node-name}/_system
_system
资源返回包含运行服务器各种系统级统计信息的JSON对象。您可以使用_local
作为{node-name}
来获取当前节点信息。
/_node/{node-name}/_restart
/_uuids
从CouchDB实例请求一个或多个通用唯一标识符(UUIDs)。
/_reshard
返回已完成、失败、运行、停止和总作业计数以及集群上resharding状态。
如果该请求以401未经授权的方式回应,则您需要一些有效的凭据来访问数据库:
这是一个couchdb的响应示例,当您有足够的权限来列出数据库时(这只是一个数据库列表):
您可以访问数据库名称来获取一些数据库信息(如文件数量和大小):
列出数据库中的每个条目
读取数据库中文档的内容:
由于Erlang和JavaScript JSON解析器之间的差异,您可以使用以下请求创建一个具有凭据hacktricks:hacktricks
的管理员用户:
关于端口4369
突出了一个关键的安全警报。如果此端口在互联网或任何不受信任的网络上可访问,系统的安全性将严重依赖于一个称为"cookie"的唯一标识符。这个cookie充当了一个保护措施。例如,在给定的进程列表中,可能会观察到名为"monster"的cookie,表明其在系统安全框架中的操作角色。
最近披露的漏洞 CVE-2018-8007 影响了 Apache CouchDB,揭示了利用该漏洞需要对 local.ini
文件具有写入权限。尽管由于安全限制,这并不直接适用于初始目标系统,但为了探索目的,对 local.ini
文件进行了修改以授予写入访问权限。下面提供了详细的步骤和代码示例,演示了该过程。
首先,通过确保 local.ini
文件可写来准备环境,并通过列出权限进行验证:
为了利用这个漏洞,执行一个curl命令,针对local.ini
中的cors/origins
配置。这会在[os_daemons]
部分注入一个新的origin以及额外的命令,旨在执行任意代码:
随后的验证显示在 local.ini
中注入的配置,将其与备份进行对比以突出显示更改:
最初,预期的文件(/tmp/0xdf
)不存在,表明注入的命令尚未执行。进一步调查发现,与CouchDB 相关的进程正在运行,其中一个可能会执行注入的命令:
通过终止已识别的CouchDB进程并允许系统自动重新启动,触发了注入命令的执行,通过之前丢失的文件的存在得到确认:
这项探索确认了在特定条件下利用CVE-2018-8007的可行性,特别是需要对local.ini
文件具有可写访问权限。提供的代码示例和操作步骤为在受控环境中复制利用漏洞提供了清晰指南。
探讨了一种名为CVE-2017-12636的漏洞,它通过CouchDB进程实现代码执行,尽管特定配置可能会阻止其利用。尽管在线上有许多可用的概念验证(POC)参考,但需要调整才能利用CouchDB版本2上的漏洞,与通常被瞄准的版本1.x不同。初始步骤涉及验证CouchDB版本并确认预期的查询服务器路径不存在。
为了适应CouchDB 2.0版本,使用了新的路径:
尝试添加和调用新的查询服务器时遇到了与权限相关的错误,如下输出所示:
进一步调查发现local.ini
文件存在权限问题,无法写入。通过使用root或homer访问权限修改文件权限,就可以继续进行:
随后尝试添加查询服务器成功,响应中没有错误消息。通过文件比较确认成功修改了 local.ini
文件:
接下来的过程包括创建一个数据库和一个文档,然后尝试通过自定义视图映射到新添加的查询服务器来执行代码:
port:5984 couchdb
以下是您可以使用GET请求访问并提取一些有趣信息的端点。您可以在。
/_up
确认服务器正在运行并准备好响应请求。如果为true
或nolb
,端点将返回404响应。
可以提取更多有趣信息,如此处所述:
为了找到有效的凭证,您可以尝试。
.
示例.
在CouchDB文档中,特别是在有关集群设置的部分(),讨论了CouchDB在集群模式下使用的端口。文档提到,与独立模式一样,端口5984
被使用。此外,端口5986
用于节点本地API,而重要的是,Erlang需要TCP端口4369
用于Erlang Port Mapper Daemon (EPMD),促进Erlang集群内的节点通信。这种设置形成了一个网络,其中每个节点与其他每个节点都相互链接。
对于那些想要了解如何在 Erlang 系统中利用这个 "cookie" 实现远程代码执行(RCE)的人,可以阅读专门的章节。该章节详细介绍了利用 Erlang cookie 以未经授权的方式控制系统的方法。您可以****。
示例。
有关CVE-2018-8007的更多详细信息,请参考mdsec发布的公告:。
示例。
一个**和一个替代有效载荷提供了在特定条件下利用CVE-2017-12636的更多见解。利用此漏洞的有用资源**包括:
如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看!
获取
探索,我们的独家
加入 💬 或 或在Twitter 🐦 上关注我们。
通过向和 github仓库提交PR来分享您的黑客技巧。