Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用

news2025/4/15 10:08:54

前言

重学Top10的第二篇,希望各位大佬不要见笑。

SSRF原理

SSRF又叫服务端请求伪造,是一种由服务端发起的恶意请求,SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理,执行攻击者构造的恶意请求,可能导致内部系统暴露或敏感数据泄露。

举个例子,比如这里的百度图片可以通过输入的图片的链接去获取相对应图片,那么假如我把图片链接换成http:\\127.0.0.1:80那么服务器就是去请求它本地的80端口,简单来说有一些网站功能可以去访问指定ULR的资源,而这些URL一旦变成内网地址或者本地地址,从而可以进行本地或者内网服务探测,这就是SSRF漏洞。

 这里是我本地写的一个远程图片加载器,可以通过图片地址加载图片。

然后把图片地址换为http:127.0.0.1:80可以看到是能成功探取到80端口的服务的,因为我80端口没有部署东西,所以显示403了。

常见伪协议

http://  Web常见访问,如http://127.0.0.1、http://127.0.0.1:8080等

file:///  从文件系统中获取文件内容,如,file:///etc/passwd、file:///D:/1.txt

dict://  字典服务器协议,访问字典资源,如,dict:///ip:6379/info

sftp:// SSH文件传输协议或安全文件传输协议

ldap:// 轻量级目录访问协议

tftp:// 简单文件传输协议

gopher:// (常用)分布式文档传递服务,可使用gopherus生成payload 有部分服务是http协议不支持通讯的,那么可以用gopher来进行通讯(如mysql,redis服务等)应用:漏洞利用 或 信息收集 通讯相关服务的时候 工具:Gopherus

SSRF绕过

-限制为必须有http://www.xxx.com 域名
采用http基本身份认证的方式绕过,即@
http://www.xxx.com@www.xxyy.com

-限制请求IP不为内网地址
当不允许ip为内网地址时:
(1)采取短网址绕过                                                                                                                (2)采取域名解析
(3)采取进制转换
(4)采取3XX重定向

白盒审计

我们来看一下CTF中这种白盒审计中,怎么利用以及绕过呢。

第一题没啥过滤,直接读取即可。

第二题可以看到过滤了127.0.0和localhost。

直接把127.0.0.1转换为16进制的IP地址即可。

接下来这个过滤了1,0,localhost,那么再转16进制肯定是不行了。

我们可以生产一个短链接来代替http://127.0.0.1/flag.php。

但是不知道为啥我这里啥也没有,如果被过滤掉了会输出hacker的,估计是解析失败了。

还有一种方法是往域名里面添加个A记录,指向127.0.0.1,那么服务器在解析域名的时候其实就是访问了127.0.0.1。(由于自己没有域名,所以图片网上找的)

这一关限制host长度小于等于5,直接用127.1代替127.0.0.1即可。

这一关限制IP长度为3,直接用http://0/flag.php即可。

这题和上面就不太一样了,先是解析我们的IP并且输出,接着做如下判断

  • ILTER_VALIDATE_IP​​:验证是否为合法IP格式
  • ​FILTER_FLAG_NO_PRIV_RANGE​​:排除私有IP范围(如10.0.0.0/8192.168.0.0/16
  • ​FILTER_FLAG_NO_RES_RANGE​​:排除保留IP范围(如127.0.0.0/8169.254.0.0/16

也就是说无论你怎么变,只要解析出来的IP是127.0.0.1都不行,那么绑定域名和进制转换这种肯定不行了,因为你解析出来的IP都是127.0.0.1。那么此时我们可以用到重定向这个方法,把下面这个代码放到公网服务器上面,然后去请求它,当这个脚本被请求了就会自动跳到127.0.0.1,从而实现绕过。

<?php
header("Location:http://127.0.0.1/flag.php"); 
其作用是:当执行该脚本时,会直接跳转到对应的网址,即Location: 后面的网址。

同时我们也可以通过生成一个短链接来绕过,原理是一样的。

这题可以看到url中必须要含有ctf,show这两个东西才行。

直接用/ctf.@127.0.0.1/flag.php#show进行绕过,#符号后面的内容不解析,这里我猜测@前面的也不解析。

这一关题目提示了是mysql服务。

可以看到请求的参数中有url类型的,我们利用Gopher协议打一波。

可以利用gopherus这项目,生产一个利用连,这里我选择写入一句话代码。

这里记得把下面的内容进行URL编码一下,不然传过去解码就没了。

执行之后成功上传。

这题就是打redis和mysql其实差不多的。

运行脚本,类型我们选择PHPShell,网站路径的话一般都是默认即可,写上一句话木马就会生成一个利用链条,和上面一样gopher://127.0.0.1:6379/_后面的进行URL编码。

python gopherus.py --exploit redis

黑盒审计

黑盒审计的话找可能存在SSRF漏洞的功能点。

-业务功能点
1.社交分享功能:获取超链接的标题等内容进行显示
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
3.在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
8.数据库内置功能:数据库的比如mongodb的copyDatabase函数
9.邮件系统:比如接收邮件服务器地址
10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

像一些PDF转换或者PDF在线编辑的地方也会存在,添加个空白的PDF,然后写上JS代码。

点击保存应用,在dnslog这里可以看到记录。

SSRF无回显

还有一个就是无回显问题,这个其实也简单,我们获取一个dnslog地址通过SSRF去请求这个地址看其有无记录不就可以了,还有一个方法就是公网服务器监听一个端口,然后通过SSRF去请求这个端口,看看有无被请求到即可判断是否存在SSRF。

总结

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【时时三省】(C语言基础)选择结构程序综合举例

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 下面综合介绍几个包含选择结构的应用程序。 例题1&#xff1a; 写一程序&#xff0c;判断某一年是否为闰年。 程序1&#xff1a; 先画出判别闰年算法的流程图&#xff0c;见下图用变量le…

File 类 (文件|文件夹操作)

一、File 类 1.1 前言 在 JDK 中 通过 java.io.File 类&#xff0c;可以实现操作系统重文件|文件夹的创建、删除、查看、重命名等操作。 1.2 File 类构造方法 File 一共提供了四个构造方法&#xff0c;都是有参构造。其中最常使用的是 File(String) 和 File(String, String)…

Hadoop文件操作指南:深入解析文件操作

1 Hadoop文件系统概述 Hadoop分布式文件系统(HDFS)是Hadoop生态的核心存储组件&#xff0c;专为大规模数据集设计&#xff0c;具有高容错性和高吞吐量特性。 HDFS核心特性: 分布式存储&#xff1a;文件被分割成块(默认128MB)分布存储多副本机制&#xff1a;每个块默认3副本&…

STM32 HAL库之EXTI示例代码

外部中断按键控制LED灯 在main.c中 HAL_Init(); 初始化Flash&#xff0c;中断优先级以及HAL_MspInit函数&#xff0c;也就是 stm32f1xx_hal.c 中 HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash prefetch */ #if (PREFETCH_ENABLE ! 0) #if defined(STM32F101x6) || …

《TCP/IP网络编程》学习笔记 | Chapter 23:IOCP

《TCP/IP网络编程》学习笔记 | Chapter 23&#xff1a;IOCP 《TCP/IP网络编程》学习笔记 | Chapter 23&#xff1a;IOCP通过重叠 I/O 理解 IOCPepoll 和 IOCP 的性能比较实现非阻塞模式的套接字以纯重叠 I/O 方式实现回声服务器端重新实现客户端测试从重叠 I/O 模型到 IOCP 模型…

CAD导入arcgis中保持面积不变的方法

1、加载CAD数据&#xff0c;选择面数据&#xff0c;如下&#xff1a; 2、加载进来后&#xff0c;右键导出数据&#xff0c;导出成面shp数据&#xff0c;如下&#xff1a; 3、选择存储路径&#xff0c;导出面后计算面积&#xff0c;如下&#xff1a; 4、与CAD中的闭合线面积核对…

rustdesk自建服务器怎么填写客户端配置信息

目录 # id、api、中继都怎么填&#xff1f;rustdesk程序启动后服务不自动启动 # id、api、中继都怎么填&#xff1f; rustdesk程序启动后服务不自动启动 完全退出RudtDesk程序&#xff08;右下角托盘区有的话&#xff0c;需要右键点退出&#xff09; 创建windows服务&#xff…

c++进阶之----智能指针

1.概念 在 C 中&#xff0c;智能指针是一种特殊的指针类型&#xff0c;它封装了裸指针&#xff08;raw pointer&#xff09;的行为&#xff0c;并通过 RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09;机制自动管理动态分配的…

六、测试分类

设计测试用例 万能公式&#xff1a;功能测试性能测试界面测试兼容性测试安全性测试易用性测试 弱网测试&#xff1a;fiddler上行速率和下行速率 安装卸载测试 在工作中&#xff1a; 1.基于需求文档来设计测试用例&#xff08;粗粒度&#xff09; 输入字段长度为6~15位 功…

AI编程案例拆解|基于机器学习XX评分系统-前端篇

文章目录 1. 定价使用DeepSeek估价小红书调研 2. 确定工作事项利用DeepSeek生成具体工作事项 3. 和客户沟通约会议沟通确定内容样式 4. 前端部分设计使用DeepSeek生成UI设计在Cursor中生成并提问前置条件开始编程 关注不迷路&#xff0c;励志拆解100个AI编程、AI智能体的落地应…

java数组06:Arrays类

Arrays类 数组的工具类java.util. Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中是了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。 查看JDK帮助文档 Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用…

TQTT_KU5P开发板教程---实现流水灯

文档实现功能介绍 本文档是学习本开发板的基础&#xff0c;通过设置计数器使led0到led7依次闪烁&#xff0c;让用户初步认识vivado基本的开发流程以及熟悉项目的创建。本开发板的所有教程所使用的软件都是vivado2024.1版本的。可以根据网上的教程下载与安装。 硬件资源 此次教程…

Model Context Protocol(MCP)模型上下文协议

Model Context Protocol&#xff08;MCP&#xff09;模型上下文协议 前言一、什么是MCP二、MCP的作用三、MCP与Function call对比四、构建一个简单的MCP DEMO环境准备实现MCP Server运行 ServerMCP Client端配置验证 总结 前言 在Agent时代&#xff0c;将Agent确立为大模型未来…

第十二章:FreeRTOS多任务创建与删除

FreeRTOS多任务创建与删除教程 概述 本教程介绍FreeRTOS多任务的创建与删除方法&#xff0c;主要涉及两个核心函数&#xff1a; 任务创建&#xff1a;xTaskCreate()任务删除&#xff1a;vTaskDelete() 实践步骤 1. 准备工程文件 复制005工程并重命名为006 2. 创建多个任务…

Seed-Thinking-v1.5:字节豆包新推理模型发布,200B参数战胜Deepseek

摘要 本文引入了Seed-Thinking-v1.5&#xff0c;能够在响应之前通过思考进行推理&#xff0c;从而提高了各种基准测试的性能。Seed-Thinking-v1.5在AIME 2024上获得86.7分&#xff0c;在Codeforces上获得55.0分&#xff0c;在GPQA上获得77.3分&#xff0c;展示了优秀的STEM和编…

AIDD-人工智能药物设计-提升分子预测反事实解释可靠性

UQ 过滤:提升分子预测反事实解释可靠性 目录 I-INF 指标结合 F1 评分,为评估大分子复合物(包括 RNA-蛋白质)的界面相互作用网络提供了可靠且全面的新方法。通过使用生成的人工 CAR 序列微调蛋白质语言模型(PLM),显著提高了 CAR-T 细胞活性的预测准确性,有效克服了合成蛋…

【前端】webpack一本通

今日更新完毕&#xff0c;不定期补充&#xff0c;建议关注收藏点赞。 目录 简介使用webpack默认只能处理js文件 ->引入加载器对JS语法降级&#xff0c;兼容低版本语法合并文件再次打包进阶 工作原理html-webpack-plugin插件webpack开发服务器引入使用webpack-dev-server模块…

代码学习总结(一)

代码学习总结&#xff08;一&#xff09; 这个系列的博客是记录下自己学习代码的历程&#xff0c;有来自平台上的&#xff0c;有来自笔试题回忆的&#xff0c;主要基于 C 语言&#xff0c;包括题目内容&#xff0c;代码实现&#xff0c;思路&#xff0c;并会注明题目难度&…

第十五届蓝桥杯C/C++B组省赛真题讲解(分享去年比赛的一些真实感受)

试题A——握手问题 一、解题思路 直接用高中学的排列组合思路 二、代码示例 #include<bits/stdc.h> using namespace std; int fun(int n) {int sum0;for(int i0;i<n;i){for(int ji1;j<n;j)sum; } return sum; } int main() {cout<<fun(50)-fun(7); }三、…

【Qt】qDebug() << “中文测试“; 乱码问题

环境 Qt Creator版本&#xff1a;4.7.1 编译器&#xff1a;MSVC2015_32bit 解法一 在.pro文件中添加 msvc:QMAKE_CXXFLAGS -execution-charset:utf-8注意&#xff1a; 1、需要清理项目&#xff0c;并重新qmake&#xff0c;然后构建。 测试项目下载&#xff1a;https://do…