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

文件上传漏洞3

1. 例题:文件上传限制

1)上传漏洞靶场介绍
  • 项目名称: upload-labs
  • 开发语言: 使用PHP语言编写
  • 功能定位: 专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场
  • 关卡数量: 目前共21关,每关包含不同上传方式
  • 注意事项:
    • 每关没有固定通关方法,不要自限思维
    • 提供的writeup仅供参考,鼓励分享个人通关思路
    • 没有思路时可查看提示
    • 黑盒情况下实在做不出可查看源码
2)白名单与黑名单机制
  • 白名单机制:
    • 定义: 只允许特定格式文件上传
    • 比喻: 类似机关大院停车场,只有放通行证的车辆才能进入
    • 示例: 本关只允许上传jpg/png/gif类型文件
  • 黑名单机制:
    • 定义: 禁止特定危险格式文件上传
    • 比喻: 类似办公大楼"衣冠不整者禁止入内"的告示
    • 示例: 禁止上传php/asp/jsp等脚本文件
  • 组合使用: 白名单和黑名单机制可以结合使用
3)绕过前端JS校验的方法
  • 禁用JavaScript
    • 方法原理: 前端校验依赖JavaScript执行,禁用后校验失效
    • 操作步骤:
      • 浏览器地址栏输入about:config
      • 搜索javascript.enabled
      • 将值从true改为false
    • 注意事项:
      • 修改浏览器配置可能影响性能和安全性
      • 禁用后许多网站功能会失效
  • 修改客户端代码
    • 操作步骤:
      • 按F12打开开发者工具
      • 定位到表单提交事件(如checkFile函数)
      • 删除onsubmit事件绑定
    • 优势: 比完全禁用JavaScript更精准,不影响其他功能
4)实战演示
  • 验证方法:
    • 上传webshell文件(shell.php)
    • 通过浏览器直接访问上传文件
    • 使用中国蚁剑等工具连接验证
  • 异常现象解释:
    • 图片裂开是因为系统尝试将非图片文件作为图片解析
    • 不影响webshell功能正常使用
5)其他绕过技巧
  • 浏览器插件:
    • 使用油猴脚本等插件禁用特定网站的JavaScript
  • 复制限制案例:
    • 以360doc网站为例说明前端检测机制
    • 类比上传校验的绕过思路
2. 例题:文件上传限制
1)MIME类型基础
  • 定义: MIME(Multipurpose Internet Mail Extensions)是多用途互联网邮件扩展类型,用于标记互联网通信和文件传输场景中的文件类型。
  • 生成机制: 由浏览器根据文件扩展名自动生成,如.jpg文件对应image/jpeg类型。
  • 常见类型:
    • 图片: image/jpeg, image/png, image/gif
    • 文本: text/html, text/plain
    • 数据: application/json
    • 二进制: application/octet-stream
  • 官方标准: IANA是MIME媒体类型的官方注册机构,维护所有官方MIME类型列表。
  • 默认类型:
    • text/plain: 文本文件默认值
    • application/octet-stream: 其他情况的默认值
2)应用案例
  • 例题:浏览器请求头的contentType
    • 客户端用法:
      • Content-Type: 在POST请求头中指定上传文件类型
      • Accept: 告诉服务端允许接收的响应类型
    • 服务端用法:
      • 响应头Content-Type: 告知客户端响应数据类型
    • 实战观察:
      • 百度响应头包含Content-Type: text/html
      • 请求头包含Accept字段声明可接收类型
      • 文件上传时会自动生成Content-Type字段
3)Burp代理抓包环境配置
  • JDK要求: Burp Suite需要JDK 9+,推荐使用JDK 11
  • 常见问题:
    • 版本冲突:与冰蝎/哥斯拉工具所需的JDK 8可能冲突
    • 解决方案:修改JAVA_HOME环境变量切换版本
4)Burp代理使用
  • 配置步骤:
    • 启动Burp监听8080端口
    • 浏览器配置代理插件(如FoxyProxy)
    • 切换代理到Burp
  • 实战操作:
    • 拦截文件上传请求
    • 修改Content-Type为合法图片类型(如image/jpeg)
    • 绕过服务端MIME类型检查
  • 验证方法:
    • 观察是否返回上传成功提示
    • 检查服务器目录确认文件存在
    • 注意文件名是否被重命名
3. 例题:文件扩展名拦截

  • 拦截机制:无论前端还是后端校验,都有机会被修改绕过
  • 关键点:不能仅依赖浏览器自动生成的MIME类型进行校验
  • 源码分析:需要检查文件扩展名的处理逻辑
4. 等价扩展名

  • 黑名单机制:通过数组匹配禁止上传的扩展名(.asp/.aspx/.php/.jsp)
  • 处理流程:
    • 获取文件扩展名并进行多重处理(删除末尾点、转小写、去除特殊字符等)
    • 最终与黑名单数组进行比对
  • 绕过思路:利用黑名单不完整的特点,尝试使用等价扩展名
1)常见等价扩展名

  • ASP:.asa, .cer, .cdx
  • ASPX:.ashx, .asmx, .ascx
  • PHP:.php2, .php3, .php4, .php5, .phps, .phtml
  • JSP:.jspx, .jspf
  • 产生原因:程序语言版本发展过程中衍生的扩展名
2)例题:文件上传尝试
  • 实践步骤:
    • 将webshell.php改为webshell.php3
    • 上传后访问时出现下载框(需配置服务器解析)
    • 成功连接中国蚁剑进行管理
  • 服务器配置:
    • 修改Apache的httpd.conf文件
    • 添加AddType application/x-httpd-php .php .phtml .php3 .php5
    • 确保服务器能解析这些等价扩展名
  • 题目解析
    • 关键突破点:利用黑名单未包含的PHP等价扩展名
    • 环境要求:需要配置服务器解析这些特殊扩展名
    • 文件重命名:上传后系统会自动重命名文件(基于时间戳+随机数)
    • 连接验证:通过中国蚁剑成功连接验证webshell有效性
5. 例题:文件扩展名拦截
1)黑名单过滤机制
  • 过滤逻辑:通过检查文件扩展名是否在黑名单中决定是否允许上传,黑名单包含".php",".php5",".php4"等常见PHP扩展名。
  • 处理流程:
    • 删除文件名末尾的点
    • 转换为小写
    • 去除字符串"::$DATA"
    • 收尾去空
  • 漏洞原因:黑名单不全面,存在遗漏的PHP变种扩展名。
2)黑名单强化
  • 新增拦截项:".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa"等
  • 防御效果:基本覆盖了所有常见的PHP变种扩展名,使简单的扩展名修改攻击失效。
3)绕过方法探索
  • 思路转变:当无法通过修改扩展名绕过时,尝试上传伪装成图片的PHP文件。
  • 实施步骤:
    • 将PHP文件扩展名改为.jpg等图片格式
    • 成功上传后文件实际内容仍是PHP代码
  • 限制:虽然能上传成功,但服务器不会将图片文件当作PHP代码执行。
4).htaccess文件利用
  • 功能:Apache服务器的配置文件,可改变文件扩展名、配置重定向等。
  • 攻击应用:通过上传.htaccess文件强制服务器将特定文件(如.jpg)当作PHP解析。
  • 实现原理:添加"AddType application/x-httpd-php .jpg"指令。
5)完整攻击链
  • 步骤:
    • 上传伪装成图片的PHP文件
    • 上传自定义的.htaccess文件
    • 访问图片URL触发PHP代码执行
    • 使用中国蚁剑等工具连接webshell
  • 关键点:需要服务器允许.htaccess文件覆盖配置。
6)防御建议
  • 白名单机制:仅允许特定安全的文件类型
  • 文件内容检查:验证文件实际内容与扩展名是否匹配
  • 禁用.htaccess:在Apache配置中禁止覆盖
  • 权限控制:上传目录禁止脚本执行
6. 应用案例
1)例题:伪静态网站文件查看
  • 动态网站架构:Discuz论坛使用PHP搭建,属于动态网站,通过PHP文件处理请求并从数据库获取数据动态生成页面内容。
  • 伪静态原理:实际URL应为动态形式如"thread.php?id=xxx&page=1",但通过.htaccess重写规则伪装成静态HTML路径"thread-xxx-1-1.html"。
  • SEO优化目的:搜索引擎更偏好静态内容,伪静态可提高收录率。真实路径仍保持动态特性,仅URL显示为静态形式。
  • 技术实现:通过服务器配置文件.htaccess实现URL重写,将静态形式URL映射到真实PHP处理程序。
  • 数据获取方式:页面内容(标题、正文、评论、用户信息等)均从数据库动态获取,PHP文件仅作为处理框架。
  • 路径伪装示例:看似独立HTML文件"thread-1530418-1-1.html",实际由thread.php处理参数id=1530418和page=1。
2)例题:图片文件伪装
  • 文件解析控制:通过.htaccess的SetHandler指令可指定特定文件类型按PHP解析。
  • 精确控制方法:使用<Files>指令限定仅特定文件(如a.jpg)按PHP处理,避免全局影响。
  • 实际应用:将恶意代码存入图片文件,配合.htaccess使服务器将其作为PHP执行,实现Webshell功能。
  • 防御措施:服务器应限制.htaccess使用权限,禁止用户上传此类配置文件。
  • 多功能性:除URL重写外,.htaccess还可实现IP限制、访问控制等安全功能。
  • 执行验证:成功上传.htaccess后,访问伪装图片(a.jpg)会触发PHP解析执行,证明配置生效。
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

文件上传漏洞原理

通过伪造文件类型绕过前端/后端校验,上传恶意脚本(如Web Shell)

前端JS校验可被禁用或篡改,后端校验需关注MIME类型与扩展名黑名单

⭐⭐

MIME类型绕过

HTTP请求头中的Content-Type字段可被篡改(如将application/x-php改为image/jpeg)

浏览器自动生成MIME类型,需通过代理工具(如Burp Suite)拦截修改

⭐⭐⭐

黑名单与白名单机制

白名单仅允许指定格式(如.jpg/.png),黑名单禁止危险扩展名(如.php/.asp)

等价扩展名绕过(如.php3/.phtml需服务器配置支持)

⭐⭐⭐

.htaccess文件利用

通过自定义Apache配置强制将特定文件(如.jpg)解析为PHP

需服务器允许覆盖配置,且文件需与恶意脚本同目录

⭐⭐⭐⭐

动态与伪静态网站

动态网站通过参数查询数据,伪静态伪装路径以优化SEO(如Discuz论坛)

.htaccess实现重定向与解析规则覆盖

⭐⭐

工具链使用

Burp Suite改包、浏览器禁用JS、F12开发者工具篡改前端代码

环境依赖问题(如JDK版本冲突需切换)

⭐⭐⭐

相关文章:

文件上传漏洞3

1. 例题:文件上传限制 1&#xff09;上传漏洞靶场介绍 项目名称: upload-labs开发语言: 使用PHP语言编写功能定位: 专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场关卡数量: 目前共21关&#xff0c;每关包含不同上传方式注意事项: 每关没有固定通关方法&#xff0c;不要自限…...

QML FontDialog:使用FontDialog实现字体选择功能

目录 引言相关阅读FontDialog基本介绍字体属性 实例演示项目结构代码实现Main.qmlmain.cpp 代码解析运行效果 总结 引言 在桌面应用程序开发中&#xff0c;字体选择是一个常见的需求。Qt Quick提供了FontDialog组件来实现这一功能。本文将介绍如何在Qt Quick应用程序中使用Fon…...

力扣刷题Day 27:环形链表(141)

1.题目描述 2.思路 创建一个结点集合&#xff0c;遍历链表&#xff0c;如果遇到已经加进集合的结点就说明链表有环。 3.代码&#xff08;Python3&#xff09; class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:node headnode_set set()while node…...

1.1软考系统架构设计师:系统架构的定义与作用 - 超简记忆要点、知识体系全解、考点深度解析、真题训练附答案及解析

超简记忆要点 定义&#xff1a;结构决策 | 抽象概念 | 多视图模型&#xff08;逻辑/物理/动态&#xff09;作用&#xff1a;解耦复杂需求 | 集成扩展 | 指导开发&#xff08;蓝图&#xff09;要素&#xff1a;构件&#xff08;原子/复合&#xff09; | 连接件&#xff08;API/…...

研发效率破局之道阅读总结(3)工程优化

研发效率破局之道阅读总结(3)工程优化 Author: Once Day Date: 2025年4月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...

metasploit(2)生成dll木马

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 一、dll文件基本概念 DLL 是一种包含可由多个程序同时使用的代码和数…...

数据结构--并查集-高效处理连通性问题

目录 一、理论基础 &#xff08;1&#xff09;并查集的功能及实现原理 &#xff08;2&#xff09;代码模版 &#xff08;3&#xff09;模拟过程 &#xff08;4&#xff09;应用 二、基础题练习 &#xff08;1&#xff09;寻找存在的路径&#xff08;模版题&#xff09; …...

PLOG安装

Plog可以通过以下命令安装 cd ~ && git clone https://github.com/SergiusTheBest/plog.gitcd plog && mkdir buildcd build && cmake ..make && sudo make installcd ~ && sudo rm -rf ./plog若无法科学上网&#xff0c;可使用git cl…...

LeetCode 热题 100_分割等和子集(89_416_中等_C++)(动态规划)

LeetCode 热题 100_分割等和子集&#xff08;89_416&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;动态规划&#xff0…...

WPS Office安卓版云文档同步速度与PDF转换体验测评

WPS Office安卓版是很多人常用的移动办公软件。它支持在线编辑、文档同步、格式转换等功能&#xff0c;适合手机和平板用户随时处理文档。我们用它配合谷歌浏览器打开网页文档时&#xff0c;也可以将内容快速保存到云端或转换成PDF格式使用。 先说云文档同步。在打开WPS Office…...

Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos 一.Eureka引入1.注册中心2.CAP理论3.常见的注册中心 二.Eureka介绍1.搭建Eureka Server 注册中心2.搭建服务注册3.服务发现 三.负载均衡LoadBalance1.问题引入2.服务端负载均衡3.客户端负载均衡4.Spring Cloud LoadBalancer1).快速上手2)负载均衡策…...

【Linux网络】构建基于UDP的简单聊天室系统

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【每天一个知识点】大模型的幻觉问题

“大模型的幻觉问题”是指大语言模型&#xff08;如GPT系列、BERT衍生模型等&#xff09;在生成内容时&#xff0c;产生不符合事实或逻辑的虚假信息&#xff0c;即所谓的“幻觉”&#xff08;hallucination&#xff09;。这在诸如问答、摘要、翻译、代码生成等任务中尤其常见。…...

机器学习06-RNN

RNN&#xff08;循环神经网络&#xff09;学习笔记 一、RNN 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一类以序列数据为输入&#xff0c;在序列的演进方向进行递归且所有节点&#xff08;循环单元&#xff09;按链式连接的递归神…...

[大模型]什么是function calling?

什么是function calling&#xff1f; 大模型的 ​​Function Calling​​&#xff08;函数调用&#xff09;是一种让大语言模型&#xff08;如 GPT、Claude 等&#xff09;与外部工具、API 或自定义函数交互的机制。 它的核心目的是让模型能够根据用户的需求&#xff0c;​​…...

C语言高频面试题——嵌入式系统中中断服务程序

在嵌入式系统中&#xff0c;中断服务程序&#xff08;ISR&#xff09;的设计需遵循严格的规则以确保系统稳定性和实时性。以下是对这段代码的分析及改进建议&#xff1a; 代码分析 __interrupt double compute_area (double radius) { double area PI * radius * radius; pri…...

Java高频面试之并发编程-05

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;线程有哪些调度方法&#xff1f; 在Java中&#xff0c;线程的调用方法主要包括以下几种方式&#xff0c;每种方式适用于…...

野外价值观:在真实世界的语言模型互动中发现并分析价值观

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

【Linux】47.高级IO(1)

文章目录 1. 高级IO1.1 五种IO模型1.2 高级IO重要概念1.2.1 同步通信 vs 异步通信1.2.2 阻塞 vs 非阻塞 1.3非阻塞IO1.3.1 fcntl1.3.2 实现函数SetNoBlock1.3.3 轮询方式读取标准输入1.3.4 I/O多路转接之select1.3.4.1 初识select&#xff1a;1.3.4.2 select函数原型1.3.4.3 理…...

notepad++技巧:查找和替换:扩展 or 正则表达式

notepad 有很多优点&#xff1a;多标签&#xff0c;代码高亮&#xff0c;我最喜欢的是查找和替换。 除了可以一次性查找所有打开文件&#xff0c;还可以使用 扩展 or 正则表达式。 例如&#xff1a; 去掉空行&#xff1a;正则表达式&#xff1a; ^\s*$\r\n ^ 表示行首。\s*…...

【图像标注技巧】目标检测图像标注技巧

介绍一些图像标注技巧。之前引用过别人的文章 yolo目标检测 技巧 trick 提升模型性能&#xff0c;deep research检测调研报告也可以进行参考。 拉框类的标注&#xff0c;如果你不确定哪种方法好&#xff0c;你可以把所标注区域的都剪切出来&#xff0c;然后站在屏幕一米之外眯…...

MuJoCo中的机器人状态获取

UR5e机器人xml文件模型 <mujoco model"ur5e"><compiler angle"radian" meshdir"assets" autolimits"true"/><option integrator"implicitfast"/><default><default class"ur5e">&…...

pnpm解决幽灵依赖问题

文章目录 前言1. npm/yarn 现在还有幽灵依赖问题吗&#xff1f;2. pnpm 解决了幽灵依赖问题吗&#xff1f;3. pnpm 是如何解决的&#xff1f;举例说明 1. pnpm 的 node_modules 结构原理结构示意 2. 实际演示幽灵依赖的杜绝步骤1&#xff1a;初始化项目并安装依赖步骤2&#xf…...

测试第四课---------性能测试工具

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

frp远程穿透配置

文章目录 准备工作服务端配置(toml)客户端配置(toml)访问内网服务使用ini文件配置 frp是一个高性能的反向代理应用&#xff0c;用于将位于内网的服务通过代理暴露到公网。以下是其基本使用步骤&#xff1a; 准备工作 拥有一台具有公网IP的服务器&#xff0c;作为frp的服务端。…...

【C++】新手入门指南(下)

文章目录 前言 一、引用 1.引用的概念和定义 2.引用的特性 3.引用的使用 4.const引用 5.指针和引用的关系 二、内联函数 三、nullptr 总结 前言 这篇续上篇的内容新手入门指南&#xff08;上&#xff09;&#xff0c;继续带大家学习新知识。如果你感兴趣欢迎订购本专栏。 一、…...

Linux系统编程 day9 SIGCHLD and 线程

SIGCHLD信号 只要子进程信号发生改变&#xff0c;就会产生SIGCHLD信号。 借助SIGCHLD信号回收子进程 回收子进程只跟父进程有关。如果不使用循环回收多个子进程&#xff0c;会产生多个僵尸进程&#xff0c;原因是因为这个信号不会循环等待。 #include<stdio.h> #incl…...

前后端分离项目在未部署条件下如何跨设备通信

其实我此前也不知道这个问题怎么解决&#xff0c;也没有想过—因为做的项目大部分都是前后端分离的&#xff0c;前端直接用后端的部署好的环境就行了。最近也是有点心高气傲开始独立开发&#xff0c;一个人又写前端又写后端也是蛮累的&#xff0c;即使有强有力的cursor也很累很…...

基于Python的多光谱遥感数据处理与分类技术实践—以农作物分类与NDVI评估为例

多光谱遥感数据包含可见光至红外波段的光谱信息&#xff0c;Python凭借其丰富的科学计算库&#xff08;如rasterio、scikit-learn、GDAL&#xff09;&#xff0c;已成为处理此类数据的核心工具。本文以Landsat-8数据为例&#xff0c;演示‌辐射校正→特征提取→监督分类→精度评…...

vscode python 代码无法函数跳转的问题

TL; DR; python.languageServer 配置成了 None 导致 vscode python 代码无法函数跳转 详细信息 mac 环境下 vscode 正常 command 鼠标左键 可以跳转到定义或者使用位置&#xff0c;但是我的为何不知道失效了 我一开始以为是热键冲突&#xff0c;结果发现 mac 好像没办法定…...