当前位置: 首页 > news >正文

ssrf学习(ctfhub靶场)

ssrf练习

目录

ssrf类型

漏洞形成原理(来自网络)

靶场题目

第一题(url探测网站下文件)

第二关(使用伪协议)

关于http和file协议的理解

file协议

http协议

第三关(端口扫描)

第四关(post请求)


ssrf类型
漏洞形成原理(来自网络)

很多网站提供了从其他的服务器上获取数据的功能。通过指定的URL,网站可以从其他地方获取图片、下载文件、读取文件内容等。SSRF的实质就是利用存在缺陷的Web站点作为代理攻击远程和本地的服务器。

SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。攻击者可以利用改漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统)。

靶场题目

第一题(url探测网站下文件)

非常的简单,ok呀,有30分钟,不着急,这一关的目的应该是通过url跳转到内网服务器上的127.0.0.1/flag,没有做任何限制,导致可以直接读取到内网的文件

/?url=http://127.0.0.1/flag.php

?url这个意思应该是参数可控,导致可以跳转到别的界面

题目让我们访问内网的http://127.0.0.1/flag.php

开头也是直接给出来了啊,非常的不错,没有什么难度

第二关(使用伪协议)

Apache2的默认目录在:/var/www/html,也就是网站的默认目录

让我想一想,这一关和上一关有什么不同的地方,上一关是直接读取内网的127.0.0.1/flag.php文件,那这一关为什么不可以呢?

我尝试用http协议,发现并不能访问到这个文件

用file协议就可以获取,当然也可以写成/?url=http:///var/www/html/flag.php,/应该是表示本地的IP地址的意思

关于http和file协议的理解

file协议主要是读取本地的文件,是不对外开放的

http协议是对外开放的,在搭建的网站下的目录

file协议

本地系统的文件

http协议

,例如读取到pikachu下的文件(靶场的本地网站)

第三关(端口扫描)

这一关需要使用dict伪协议了,具体是什么我也不知道啊

在网上找的

Dict协议查看端口,版本信息;向服务器端口请求curl命令

来靶场给的提示

开局一个IP地址啊,非常的人性化,

那我们直接加上dict协议,再打开我们的bp开始爆破

添加payload位置

payload选数值,8000-9000

爆破到8839号时,发现长度不一样,但是里面却没有flag,怎么回事,后来发现需要使用http协议去访问这个网站,嗯?那我一开始使用http协议不好吗?反正就是看那个长度是不是一样的,

它的目的是啥,就是判断这个端口是否开放吗,那我用http协议不也是可以看这个端口是不是开放的,那不就是打得开就是开放的,

诶好像不是这样的,如果是22号端口(ssh)话,用http协议是不能判断是不是开放的,如果22号端口开放的话就可以爆破了,真聪明。好了,用http协议直接查看这个端口吧

http协议查看端口,就是这个网站的内容咯,ok啊,主页就是flag

第四关(post请求)

ok呀,开局先看wp,不然我不会写,不就是浪费我50个金币了,哎,之前金币一下就用光了,这下给省着点了,这道题好像有点麻烦,呜呜呜,以下内容参考ctfhub之ssrf练习

先分析一下,首先利用file协议进入file:///var/www/html/index.php意思是先看他的网站主页源码吧然后再就没了,然后我们再看file:///var/www/html/flag.php代码的意思是让我们用post方法提交一个key值,然后它就给我们返回一个flagkey值怎么获取呢,那就是要用url://127.0.0.1/flag.php,获取key值,要问我怎么知道key值在这个地方的话,我也不晓得,跟着网上一步一步做的Just View From 127.0.0.1,看网上好像是这个提示知道了key值是这里,要是我自己做,我哪知道 啊,我了个豆然后再由于curl支持gopher协议,所以这里是利用curl进行进行post请求,完成内网攻击。起码你必须包含以下要素POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
key=1e91e9e5b8b3cfe84f5442b9739553c6解释几个可能存在的疑问:
1.为什么这里并没有使用curl,直接从网页上发起请求就可以了?
因为index.php本身就有curl_exec(),在截取url之后的参数后本来就能够完成操作了。2.burp suite修改参数直接post行不行?
不行,虽然能够更改包参数,但是我们无法做到从服务器发起请求3.为什么需要两次编码?
这是因为在浏览器的地址栏进行get传参时,浏览器会自动进行一次UrlDecode()的解码。但是这里curl就需要url编码的东西,所以需要编两次

参考CTFHub技能树 Web-SSRF POST请求_ctfhub 知识树 post-CSDN博客

注:在第一次编码后的数据中,将%0A全部替换为%0D%0A。
因为 Gopher协议包含的请求数据包中,可能包含有=、&等特殊字符,
避免与服务器解析传入的参数键值对混淆,所以对数据包进行 URL编码,
这样服务端会把%后的字节当做普通字节。

gopher协议格式及利用条件(看到这就是有个下划线的)

Gopher协议格式:URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流 ==》正因为这个本质,所以他可以用来发起GET、POST的http请求。

好了,开靶场了,寄,什么提示也没有,这是让我盲猜吗,是要根据前几关来做出判断吗

好了,根据前几关,我学了http协议、file协议,

先看一下http://127.0.0.1/index.php和http://127.0.0.1/index.php这里面有什么吧,前几关也是这样的,ok呀,找到了一个key值

在从网站下的目录找一下吧file://127.0.0.1/var/www/html/flag.php这里的代码没来的及截图

其实就是让我用post提交一个key值且ip地址为127.0.0.1,如果正确就返回flag

然后编码,替换我自己的key值

_POST%20/flag.php%20HTTP/1.1%0d%0AHost:127.0.0.1%0d%0AContent-Type:application/x-www-form-urlencoded%0d%0AContent-Length:36%0d%0A%0d%0Akey=d2c25785320f2cf34b3fcc8eb9e66c92%0d%0a

在编码

gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250d%250AHost:127.0.0.1%250d%250AContent-Type:application/x-www-form-urlencoded%250d%250AContent-Length:36%250d%250A%250d%250Akey=d2c25785320f2cf34b3fcc8eb9e66c92%250d%250a

把编码的值放到框框里,这个框框应该是用post方法提交的,试着试着好像错了,我就在url上提交了,        

靶场时间不够了,我还续费了10分钟,其实我是把别人的payload复制过来了,改成了我自己的key值

再分析一下,需要gopher协议,换行符需要是%0D%0A,别问为啥,我也不晓得

content-length这里需要换两行(换一行行不行我也没有试过)

但是我自己去编码的时候空格会编码成加号,/会编码成%2f,但是别的文章没有,还有就是POST前面为什么会出现下划线,如果去掉会怎么样,不想再开一次靶场了,看看有没有别的靶场要不要金币

我知道了为啥会加下划线了,因为那个是gopher的语句,他的格式就是这样的

参考文章

SSRF漏洞原理解析[通俗易懂]-腾讯云开发者社区-腾讯云 (tencent.com)

Ubuntu 18.04 Apache2默认网站目录和默认网站主页修改_改变apache2的目录默认样式-CSDN博客

http协议与file协议_浏览器file协议-CSDN博客

服务器端请求伪造--SSRF - FreeBuf网络安全行业门户

SSRF - ctfhub - 1【内网访问、伪协议读取、端口扫描、POST详解、上传文件】_ssrf用bp扫描的协议-CSDN博客

【网络安全 | HTTP】 gopher协议原理、语法及利用总结-阿里云开发者社区 (aliyun.com)

Gopher协议原理和限制介绍——Gopher协议支持发出GET、POST请求(类似协议转换):可以先截获get请求包和post请求包,在构成符合gopher协议的请求 - bonelee - 博客园 (cnblogs.com)

相关文章:

ssrf学习(ctfhub靶场)

ssrf练习 目录 ssrf类型 漏洞形成原理&#xff08;来自网络&#xff09; 靶场题目 第一题&#xff08;url探测网站下文件&#xff09; 第二关&#xff08;使用伪协议&#xff09; 关于http和file协议的理解 file协议 http协议 第三关&#xff08;端口扫描&#xff09…...

ElasticSearch之网络配置

对官方文档Networking的阅读笔记。 ES集群中的节点&#xff0c;支持处理两类通信平面 集群内节点之间的通信&#xff0c;官方文档称之为transport layer。集群外的通信&#xff0c;处理客户端下发的请求&#xff0c;比如数据的CRUD&#xff0c;检索等&#xff0c;官方文档称之…...

【C语言进阶】系统测试与调试

1. 引言 在开始本教程的深度学习之前&#xff0c;我们需要了解整个教程的目标及其结构&#xff0c;以及为何进阶学习是提升C语言技能的关键。 目标和结构&#xff1a; 教程目标&#xff1a;本教程旨在通过系统化的学习&#xff0c;从单元测试、系统集成测试到调试技巧&#xf…...

多个单链表的合成

建立两个非递减有序单链表&#xff0c;然后合并成一个非递增有序的单链表。 注意&#xff1a;建立非递减有序的单链表&#xff0c;需要采用创建单链表的算法 输入格式: 1 9 5 7 3 0 2 8 4 6 0 输出格式: 9 8 7 6 5 4 3 2 1 输入样例: 在这里给出一组输入。例如&#xf…...

『建议收藏』ChatGPT Canvas功能进阶使用指南!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

Ollama 运行视觉语言模型LLaVA

Ollama的LLaVA&#xff08;大型语言和视觉助手&#xff09;模型集已更新至 1.6 版&#xff0c;支持&#xff1a; 更高的图像分辨率&#xff1a;支持高达 4 倍的像素&#xff0c;使模型能够掌握更多细节。改进的文本识别和推理能力&#xff1a;在附加文档、图表和图表数据集上进…...

gdb 调试 linux 应用程序的技巧介绍

使用 gdb 来调试 Linux 应用程序时&#xff0c;可以显著提高开发和调试的效率。gdb&#xff08;GNU 调试器&#xff09;是一款功能强大的调试工具&#xff0c;适用于调试各类 C、C 程序。它允许我们在运行程序时检查其状态&#xff0c;设置断点&#xff0c;跟踪变量值的变化&am…...

Java项目实战II基于Java+Spring Boot+MySQL的房产销售系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着房地产市场的蓬勃发展&#xff0c;房产销售业务日益复杂&#xff0c;传统的手工管理方式已难以满…...

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容&#xff1a; 使用AWS CLI配置密钥对创建ec2 server使用drawio&#xff08;vscode插件&#xff09;进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台&#xff0c;可以提供ec2&#xff0c;vpc&#xff0c;SNS以及clo…...

【Python】Eventlet 异步网络库简介

Eventlet 是一个 Python 的异步网络库&#xff0c;它使用协程&#xff08;green threads&#xff09;来简化并发编程。通过非阻塞的 I/O 操作&#xff0c;Eventlet 使得你可以轻松编写高性能的网络应用程序&#xff0c;而无需处理复杂的回调逻辑或编写多线程代码。它广泛应用于…...

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用&#xff0c;这期来说一说数组的基本使用 HelloJNI.java&#xff1a;实现myArray函数&#xff0c;把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…...

React跨平台

React的跨平台应用开发详解如下&#xff1a; 一、跨平台能力 React本身是一个用于构建用户界面的JavaScript库&#xff0c;但它通过React Native等框架实现了跨平台应用开发的能力。React Native允许开发者使用JavaScript和React来编写原生应用&#xff0c;这些应用可以在iOS和…...

如何在 SQL 中更新表中的记录?

当你需要修改数据库中已存在的数据时&#xff0c;UPDATE 语句是你的首选工具。 这允许你更改表中一条或多条记录的特定字段值。 下面我将详细介绍如何使用 UPDATE 语句&#xff0c;并提供一些开发建议和注意事项。 基础用法 假设我们有一个名为 employees 的表&#xff0c;…...

宠物饮水机的水箱低液位提醒如何实现?

ICMAN液位检测芯片轻松实现宠物饮水机的水箱低液位提醒功能&#xff01; 工作原理 &#xff1a; 基于双通道电容式单点液位检测原理 方案特点&#xff1a; 液位检测精度高达1mm&#xff0c;超强抗干扰&#xff0c;动态CS 10V 为家用电器水位提醒的应用提供了一种简单而又有…...

EXCEL_光标百分比

Public Sub InitCells()Dim iSheet As LongFor iSheet Sheets.Count To 1 Step -1Sheets(iSheet).ActivateActiveWindow.Zoom 85ActiveWindow.ScrollRow 1ActiveWindow.ScrollColumn 1Sheets(iSheet).Range("A1").ActivateNext iSheetEnd Sub对日项目中的文档满天…...

(一)Web 网站服务之 Apache

一、Apache 的作用和特点 作用&#xff1a;Apache 是一款开源的网站服务器端软件&#xff0c;为网站的运行提供了稳定的基础。特点&#xff1a; 开源免费&#xff1a;这使得任何人都可以免费使用和修改它。模块化设计&#xff1a;具有高度的灵活性&#xff0c;可以根据需求选择…...

英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)

英语词汇小程序 目录 基于java的四六级词汇小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&a…...

AI学习指南深度学习篇-学习率衰减的实现机制

AI学习指南深度学习篇-学习率衰减的实现机制 前言 在深度学习中&#xff0c;学习率是影响模型训练的重要超参数之一。合理的学习率设置不仅可以加速模型收敛&#xff0c;还可以避免训练过程中出现各种问题&#xff0c;如过拟合或训练不收敛。学习率衰减是一种动态调整学习率的…...

My_qsort() -自己写的 qsort 函数

2024 - 10 - 05 - 笔记 - 21 作者(Author)&#xff1a;郑龙浩 / 仟濹(网名) My_qsort()- 自己写的qsort函数 My_qsort为自己写的qsort函数&#xff0c;但是采用的不是快速排序&#xff0c;而是冒泡排序&#xff0c;是为了模仿qsort函数而尝试写出来的函数。 思路&#xff1a…...

《向量数据库指南》——Mlivus Cloud打造生产级AI应用利器

哈哈,各位向量数据库和AI应用领域的朋友们,大家好!我是大禹智库的向量数据库高级研究员王帅旭,也是《向量数据库指南》的作者。今天,我要和大家聊聊如何使用Mlivus Cloud来搭建生产级AI应用。这可是个热门话题哦,相信大家都非常感兴趣! 《向量数据库指南》 使用Mlivus …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...