Redis未授权访问漏洞
目录
漏洞存在的条件
1.redis绑定0.0.0.0:6379
2.redis未设置访问密码
SSH登陆
SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是**验证也就是我们想要的免密登录了。
密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:
(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;
(2)客户端发起登录请求,发送自己的相关信息;
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。
复现
1.确认redis存在未授权连接
非redis本地可以不使用密码直接连接,初步可以判断存在漏洞。
2.本地使用rsa加密生成ssh 公钥
3.将公钥取出存在临时文件,注意这里为公钥前后加了回车符,为后面redis将数据写入authorized_keys时,公钥不受影响。
4.登陆redis,将临时文件里面的内容写入redis
5 更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh), 设置上传公钥的备份文件名字为authorized_keys
6.这个时候,redis里面的数据会使用快照备份(默认备份方法)将内存数据(我们的公钥数据)写入authorized_keys文件。
7.尝试登陆redis所在的服务器
登陆成功!!
最后
解决方法:
1.redis不能直接暴露到外网2.redis设置连接密码3.创建非root用户启动redis,这样redis将没有权限写authorized_keys