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

常见漏洞—SSRF_FastCGI

FastCGI协议

  • 简介

    • Fast CGI源自旧版本的CGI

      • 路由/结构图

        • # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求(例如nginx)
          web server 是内容的分发者
          当访问静态页面时,web server 会直接返回资源,例如index.html
          当访问动态页面时,web server 会调用解析器,例如index.php  
          # --> 访问CGI
          # --> CGI初始化环境,加载配置,处理请求,返回资源,结束进程 (每次处理请求后都会销毁进程,浪费资源)
          
      • 旧版本的CGI性能低下,无法应用在高并发的场景,FastCGI应运而生

    • FastCGI也是一种通信协议(类似HTTP协议),采用CS架构,web server 为客户端---发送请求,动态语言解析器 为服务端---处理请求

      • 路由/结构图

        • # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求(例如nginx)
          当访问index.php时,web server 会把HTTP请求转换为FastCGI请求
          # -->  转换为FastCGI协议格式
          并发送给解析器,这里以php为例
          # --> 发送至php-fpm    process manager
          php-fpm接收到请求后,把请求分配给一个worker,worker就是一个解析服务的进程(一直运行),worker根据请求信息,解析php,返回页面
          例如,招新平台运行了15个worker,(不考虑nginx处理时间)同时可以处理15个请求
          # --> php-fpm解析并响应
          
        • 对比图

  • FastCGI报文格式

    • 定义

      typedef struct {unsigned char version;  //版本unsigned char type;      //类型unsigned char requestIdB1;    //请求Idunsigned char requestIdB0;        unsigned char contentLengthB1;    //负载长度unsigned char contentLengthB0;unsigned char paddingLength;      //填充长度unsigned char reserved;              //保留字节unsigned char contentData[contentLength]; //负载数据unsigned char paddingData[paddingLength]; //填充数据
      } FCGI_Record;
      
    • 构造出的执行ls /命令的FastCGI请求( 调整过格式,不标准)

      CONTENT_LENGTH 34 # 内容长度
      CONTENT_TYPE application/text # 内容格式
      REMOTE_PORT 9985 # 请求端口
      SERVER_NAME localhost # server名
      GATEWAY_INTERFACE FastCGI/1.0 # API
      SERVER_SOFTWARE php/fcgiclient # server端 软件
      REMOTE_ADDR 127.0.0.1 # 请求ip
      SCRIPT_FILENAME /var/www/html/index.php # 脚本文件名
      SCRIPT_NAME /var/www/html/index.php # 脚本名
      PHP_VALUE auto_prepend_file = php://input 
      REQUEST_METHOD POST # 请求方法
      SERVER_PORT 8 # server端口
      SERVER_PROTOCOL HTTP/1.1 # server 协议
      QUERYDOCUMENT_ROOT / # 请求文件根目录
      IN_VALUE allow_url_include = On # 设置 允许url包含
      SERVER_ADDR 127.0.0.1 # server ip
      REQUEST_URI /var/www/html/index.php # 请求资源"<?php var_dump(system('ls /')); ?>" # 内容
      

SSRF

  • 简介

    • SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造的,由服务端发起请求的漏洞。
    • 利用不安全的配置,构造可以访问内网的请求
      • 例如:
        • /secret.php 是外网无法访问的
        • http://xxx.xxx/?url=http://127.0.0.1/example.php,该链接会使用curl构造请求,访问/var/www/html/secret.php文件,如果配置不当,就可以利用GET参数url,构造请求访问内网资源
        • 假如内网的3000端口有管理系统,则可以通过?url=http://127.0.0.1:3000进行访问
  • ssrf万金油----gopher

    • gopher是被http替代掉的老协议

    • 协议格式

      • gopher://IP:PORT/_+TCP/IP数据

      • 例如

        • http请求:http://127.0.0.1/index.php?test=123

          • http请求包

          • GET /index.php?test=123 HTTP/1.1
            Host: 127.0.0.1
            Upgrade-Insecure-Requests: 1
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
            Accept-Encoding: gzip, deflate
            Accept-Language: zh-CN,zh;q=0.9
            Connection: close
        • gopher请求:gopher://127.0.0.1:80/_GET%20index.php?test=123%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%32%37%2e%30%2e%30%2e%31%0d%0a%55%70%67%72%61%64%65%2d%49%6e%73%65%63%75%72%65%2d%52%65%71%75%65%73%74%73%3a%20%31%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%4d%6f%7a%69%6c%6c%61%2f%35%2e%30%20%28%57%69%6e%64%6f%77%73%20%4e%54%20%31%30%2e%30%3b%20%57%69%6e%36%34%3b%20%78%36%34%29%20%41%70%70%6c%65%57%65%62%4b%69%74%2f%35%33%37%2e%33%36%20%28%4b%48%54%4d%4c%2c%20%6c%69%6b%65%20%47%65%63%6b%6f%29%20%43%68%72%6f%6d%65%2f%37%34%2e%30%2e%33%37%32%39%2e%31%36%39%20%53%61%66%61%72%69%2f%35%33%37%2e%33%36%0d%0a%41%63%63%65%70%74%3a%20%74%65%78%74%2f%68%74%6d%6c%2c%61%70%70%6c%69%63%61%74%69%6f%6e%2f%78%68%74%6d%6c%2b%78%6d%6c%2c%61%70%70%6c%69%63%61%74%69%6f%6e%2f%78%6d%6c%3b%71%3d%30%2e%39%2c%69%6d%61%67%65%2f%77%65%62%70%2c%69%6d%61%67%65%2f%61%70%6e%67%2c%2a%2f%2a%3b%71%3d%30%2e%38%2c%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%69%67%6e%65%64%2d%65%78%63%68%61%6e%67%65%3b%76%3d%62%33%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%2d%4c%61%6e%67%75%61%67%65%3a%20%7a%68%2d%43%4e%2c%7a%68%3b%71%3d%30%2e%39%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%0d%0a%0d%0a

          • 这是HTTP请求包的url编码
          • gopher会访问指定IP(上面是127.0.0.1)的指定端口(上面是80,http默认端口),并传递_之后的数据
        • 也就是说,如果能使用gopher协议,那么只需要构造我们要用到的协议的请求数据(比如上面的HTTP),就可以实现访问

ssrf + fastcgi

  • 如果目标服务器使用的是php,并且存在ssrf,那么就可以构造FastCGI请求报文,直接让php解析服务进行解析,进而执行任意代码
  • 之前构造出的执行 ls /的FastCGI请求中,关键部分
PHP_VALUE auto_prepend_file = php://input 
# 把auto_prepende_file的内容设置为 php://input    http post body
# auto_prepende_file 会在解析指定php文件之前包含(可以理解为执行)
# php://input的内容为POST请求的bodyIN_VALUE allow_url_include = On # 设置 允许url包含 使php://input被允许执行REQUEST_URI /var/www/html/index.php # 请求资源"<?php var_dump(system('ls /')); ?>" # 内容 post body
  • 会在解析index.php之前,包含(执行)php://input的内容<?php var_dump(system('ls /')); ?>

  • 这样,就可以使用ssrf+fastcgi执行任意代码了

相关文章:

常见漏洞—SSRF_FastCGI

FastCGI协议 简介 Fast CGI源自旧版本的CGI 路由/结构图 # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求&#xff08;例如nginx&#xff09; web server 是内容的分发者 当访问静态页面时&#xff0c;web server 会直接返回资源&#xff0c;例如index.htm…...

LeetCode 283.移动零(超简单讲解)

283.移动零 题目示例示例1示例2 解题思路快慢指针实现设计 详细代码 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 示例1 …...

GIS原理及应用、地理坐标系与投影坐标系

文章目录 一、GIS定义1.1 地理信息系统1.2 建模1.3 相关教程1.4 GIS前沿方向 二、GIS数据格式2.1 矢量2.2 栅格2.3 矢量与栅格的区别 三、GIS数据组织3.1 抽象3.2 分层3.3 栅格与切片 四、坐标系4.1 坐标系简介4.2 大地坐标系GCS4.3 投影坐标系PCS4.4 投影变换 五、空间数据库与…...

用github镜像加速, --recursive还是去github站怎么处理?

小伙伴们大多碰到过github抽风的情况&#xff0c;时通时断&#xff0c;时快时慢&#xff0c;非常考验心情。 以前碰到连不上的时候&#xff0c;我大多就是在gitee和gitcode网站找一下镜像&#xff0c;找到后直接git clone 新地址即可。但是碰到 --recursive的时候就不行了&…...

ctfshow-web 151-170-文件上传

151. 我们首先想到就是上传一句话木马。但是看源代码限制了png。 &#xff08;1&#xff09;改前端代码。 这里是前端限制了上传文件类型&#xff0c;那我们就改一下就好了嘛,改成php。 这里直接修改不行&#xff0c;给大家推荐一篇简短文章&#xff0c;大家就会了&#xff08…...

【电源专题】开关转换器使能(EN)管脚的几种不同方式

我们的文章说到了很多与使能有关的电源案例和原理,如下所示: 【电源专题】案例:芯片规格书使能定义高电平最小阈值1.4V,那真的是到1.4V时才开始输出?_芯片的电流阀值-CSDN博客...

5G学习笔记之SNPN系列之ID和广播消息

目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN&#xff1a;Stand-alone Non-Public Network&#xff0c;独立的非公共网络&#xff0c;由NPN独立运营&#xff0c;不依赖与PLMN网络。 SNPN不支持的5GS特性&#xff1a; 与EPS交互 emergency services when the UE acce…...

Qt-Advanced-Docking-System配置及使用、心得

Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境&#xff08;IDE&#xff09;4.2. 图形设计软件4.3. 数据分…...

【Bolt.new + PromptCoder】三分钟还原油管主页

【Bolt.new PromptCoder】三分钟还原油管主页 PromptCoder官网&#xff1a;PromptCoder Bolt官网&#xff1a;https://bolt.new/ Bolt 是什么&#xff1f; Bolt.new 是一个提供创建全栈网络应用服务的平台。它允许用户通过提示&#xff08;Prompt&#xff09;、运行&#x…...

影像组学+病理组学+深度学习人工智能应用

影像组学 基础学习内容&#xff1a; 特征提取&#xff1a;使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选&#xff1a;应用ICC、相关系数、mRMR、Lasso等方法。建模&#xff1a;使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估&#xff1a;通过A…...

RK3568平台(基础篇)io命令支持

一.什么是io命令 “io” 命令通常用于显示 Linux 系统中的 I/O 统计信息。它提供了有关磁盘读写操作的详细信息,包括每个块设备的读写次数、读写扇区数、读写延迟等。io命令可以直接操作某个寄存器,用于查看设置某个GPIO 引脚配置了什么iomux。 二.io命令支持 RK平台要支持…...

Yolov8源码分析

1、目录介绍 主要目录ultralitics&#xff08;重点&#xff09; 1、assets目录 这个文件保存了YOLO历史上可以说是最经典的两张图片&#xff0c;供大家测试程序来使用的。 2、cfg 这个文件下面保存了我们的模型配置文件&#xff0c;cfg目录是项目配置的集中地&#xff0c;其…...

Python中的装饰器`@functools.lru_cache`:用法、来源与应用 (中英双语)

今天看到一段源码 https://github.com/google-research/google-research/blob/master/instruction_following_eval/instructions_util.py 如下&#xff0c;对其中使用的装饰器函数感到好奇&#xff0c;所以产生了这篇博客。 functools.lru_cache(maxsizeNone) def _get_sentenc…...

思维图(GoT):解锁大模型解决复杂问题的能力

今天分享的是苏黎世联邦理工学院、华沙理工大学和Cledar联合发表的一篇文章&#xff1a;思维图&#xff1a;用大语言模型解决复杂问题 论文题目&#xff1a;Graph of Thoughts: Solving Elaborate Problems with Large Language Models 论文链接&#xff1a;https://arxiv.or…...

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器&#xff1a; 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server • 启动 SSH 服务&#xff1a; 确保 SSH 服务正在运行&a…...

Java全栈项目:实验室预约管理系统的设计与实现

一、项目介绍 实验室预约管理系统是一个基于Java全栈技术开发的Web应用系统&#xff0c;旨在提供便捷的实验室预约、管理和使用体验。本系统主要面向高校师生&#xff0c;实现实验室资源的智能化、信息化管理。 二、技术栈 前端技术 Vue.jsElement UIAxiosVue RouterVuex …...

使用 esrally race 测试 Elasticsearch 性能及 Kibana 可视化分析指南

前言&#xff1a; 在对 Elasticsearch 集群进行性能测试与调优的过程中&#xff0c;esrally 是官方推荐的测试工具。通过 esrally race 命令&#xff0c;我们可以模拟各种查询与索引负载&#xff0c;对集群进行基准测试。然而&#xff0c;仅看 esrally 的终端输出并不直观&…...

OpenAI 第七日 推出了一项新功能——ChatGPT的“Projects”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

【小白51单片机专用教程】protues仿真AT89C51入门

课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白&#xff0c;因此会对各个新出现的知识点在实例基础上进行详细讲解&#xff0c;有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容&#xff0c;所有涉及…...

正则表达式——元字符匹配(单字符)

单字符匹配: ###注意事项&#xff1a;前面要加r&#xff1a;如(re.findall(r\w,字符串名)) #. :匹配任意一个字符 (.本身通过\.匹配) # [ ]: 匹配[ ]中的字符 # \d: 匹配数字 # \D: 匹配非数字 # \s: 匹配空白(空格) # \S:匹配非空白 # \w: 匹配单词字符&#xff08;a…...

极限竞速涂装转换神器:Forza Painter终极免费指南

极限竞速涂装转换神器&#xff1a;Forza Painter终极免费指南 【免费下载链接】forza-painter Import images into Forza 项目地址: https://gitcode.com/gh_mirrors/fo/forza-painter 还在为《极限竞速&#xff1a;地平线》中的车辆涂装设计而苦恼吗&#xff1f;想要将…...

2025_NIPS_TradeMaster: A Holistic Quantitative Trading Platform Empowered by Reinforcement Learning

TradeMaster 论文总结与核心内容翻译 一、文章主要内容 TradeMaster 是一款面向强化学习量化交易(RLFT)的全栈开源平台,旨在解决 RL 技术在实际金融市场部署中面临的工程实现难、基准对比难、易用性差三大核心挑战。文章围绕该平台展开全面阐述,核心内容包括: 1. 平台定…...

终极GitHub加速解决方案:告别国内访问缓慢的完整指南

终极GitHub加速解决方案&#xff1a;告别国内访问缓慢的完整指南 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 对于众多国内开发…...

蓝桥杯省赛真题解析:用动态规划搞定‘积木画’问题(附Python/Java/C++三种代码)

蓝桥杯竞赛实战&#xff1a;动态规划解积木画问题的多语言实现 第一次参加蓝桥杯的选手往往会被"积木画"这类动态规划题目难住——看似简单的图形拼接背后隐藏着精妙的状态转移逻辑。这道题考察的不仅是编码能力&#xff0c;更是对问题抽象和数学建模的深刻理解。本文…...

正交试验结果怎么看?一张图教你读懂SPSSAU的极差分析表和均值图

正交试验结果解读指南&#xff1a;从极差分析到最优组合决策 正交试验作为多因素优化研究的利器&#xff0c;其价值往往在数据解读阶段才能真正释放。当SPSSAU输出的极差分析表和均值图呈现在眼前时&#xff0c;许多研究者会陷入"数字迷宫"——那些K1/K2/K3值究竟在诉…...

收藏!AI时代,软件工程基本功才是你的核心竞争力

在AI coding时代&#xff0c;软件工程的基本功不仅没有过时&#xff0c;反而比以往任何时候都更加重要。AI是放大器&#xff0c;好的代码库能提升效率&#xff0c;而模糊混乱的代码库则会放大混乱。接口、边界、领域语言和测试等“老派”的基本功&#xff0c;是开发者手中杠杆率…...

FlicFlac:3分钟学会Windows音频格式转换,让音乐随心所欲播放

FlicFlac&#xff1a;3分钟学会Windows音频格式转换&#xff0c;让音乐随心所欲播放 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为手机无法播放…...

SpringBoot3项目里用Druid总报错?试试这个1.2.18版本的starter,亲测有效

SpringBoot3与Druid兼容性实战&#xff1a;1.2.18版本Starter的救火指南 当你满怀期待地将SpringBoot2.x项目升级到SpringBoot3&#xff0c;却在集成Druid连接池时遭遇各种莫名其妙的报错&#xff0c;那种感觉就像在高速公路上突然爆胎。作为Java开发者最信赖的数据库连接池之…...

爬虫进阶:如何用ProxyPool代理池+随机UA绕过掌上高考的反爬?保姆级避坑指南

数据采集实战&#xff1a;构建高隐蔽性教育信息采集系统的关键技术解析 教育数据采集领域近年来呈现出明显的技术对抗态势&#xff0c;平台方不断升级防御机制&#xff0c;而数据采集方则需要持续优化技术手段。本文将系统性地介绍构建高隐蔽性教育信息采集系统的完整技术方案&…...

BIN文件操作指南:从字节视角到实战应用

1. 项目概述&#xff1a;为什么我们需要系统性地掌握BIN文件操作&#xff1f;在嵌入式开发、固件逆向、游戏修改乃至数据恢复这些领域里&#xff0c;我们经常会遇到一个后缀名为.bin的文件。很多新手朋友第一次接触时可能会有点懵&#xff0c;这既不是文本文件可以直接打开看&a…...