网络安全之文件上传漏洞

一,文件上传漏洞的原因:

文件上传漏洞的存在主要是因为开发者未对用户上传的文件进行充分的安全验证,导致攻击者可以上传恶意文件(如 WebShell、恶意脚本等)到服务器,进而控制服务器或实施进一步攻击。

常见的成因有: 未验证文件类型和扩展名,未检测文件内容,未限制文件路径和权限,依赖黑名单而非白名单,服务器解析漏洞

常见的场景有:用户头像上传允许用户上传头像,但未校验文件类型。),文档或图片分享平台允许上传 PDF、图片等文件,但未检测文件内容。),CMS 或插件漏洞内容管理系统(如 WordPress、Joomla)的插件存在上传逻辑缺陷。),API 文件上传接口后端 API 接收文件时,未对来源和内容进行校验。),压缩包解压漏洞允许上传 ZIP 压缩包并自动解压,未检查压缩包内文件。

---------------------------------------------------------------------------------------------------------------------------------

二,案例分析

第一篇:upload-labs靶场(1-21关)

pass01(只使用javascrip过滤)

分析:只使用了JavaScript过滤,直接关掉浏览器的Javascrip功能,或者burp抓包修改文件后缀即可

操作如下:

第一种:禁用JavaScript

可以看到直接上传成功

第二种方法,使用工具(如burp),修改文件后缀,Javascrip只检测了前端的后缀,可以修改发送到服务器的包

pass02(服务端对content-type的限制)

分析:只对content-type进行白名单的限制,几乎没有用,照样发送php文件,用burp抓包,修改content-type进行send即可

方法:上传php文件,并用burp修改content-type内容

pass03(黑名单过滤不全)

某些特定的后缀仍会被php解析:如php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml。

用phtml后缀名试一下

   

pass04(apache早期版本,.htaccess服务配置文件未过滤)

上传.htaccess文件,内容如下,可以将demo.png解析成php,将demo.phg改后缀上传即可

<FilesMatch "demo.png">
SetHandler application/x-httpd-php
</FilesMatch>

pass05(黑名单过滤少了ini)

user.ini.htaccess一样是目录的配置文件,.user.ini就是用户自定义的php.ini(全局配置文件)

.user.ini 配置项中有两个配置可以起到一些作用
方法一:
auto_prepend_file = <filename>         //包含在文件头
方法二:
auto_append_file = <filename>          //包含在文件尾

pass06(无大小写过滤)

windows中对大小写不敏感

pass07(Windows文件后缀未去空)

可以看到和上之前的代码相比,过滤函数少了一个trim()函数去空操作

做法:只需要用burp抓包,改文件后缀添加一个空格即可

pass08(windows文件后缀未去点)

如果上传的是tp.php.     strrchr($file_name,".")的返回结果并不是 . 而是.php.

跟之前的代码相比,少了去除文件后缀末尾的.操作,在windows中仍然会识别

做法,使用burp抓包,改掉文件后缀添加.

pass09(windows中文件后缀未去::data)

跟之前的代码相比,少了去::$DATA操作

做法,正常上传文件,用burp抓包,改掉文件后缀添加::$DATA

pass10(后缀过滤考虑不周,仍可以通过一些方式绕过过滤)

看似都过滤了很安全,实则不然,

抓包上传后缀名为.php. .的文件

pass11(双写绕过,或大小写绕过)

直接burp抓包改后缀

pass12(使用$GET("save_path")来自定义保存路径,可以使用%00截断)

在c语言中%00代表阶段,如果我们正常上传正确的文件类型,然后修改save_path的路径如:目录/web.php%00, 在文件上传路径拼接的时候,后面的路径就被截断了,而他在前面已经进行了白名单过滤

%00截断常在url中get请求使用,在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。所以一般文件上传绕过%00会在路径上使用

使用条件:

php版本<5.3.29

php.ini配置文件中magic_quotes_gpc = Off

直接上burp抓包,修改save_path路径

pass13($POST(保存路径),使用16进制00截断)

转16进制,将路径后面修改成00截断

这里可以看到保存路径后的php后缀多了一个\0截断

pass14(文件包含,检测图片前面的内容)

这关是文件包含漏洞的关卡,文件包含漏洞是指未正确使用include()函数,在进行文件包含的同时,仍然会用php解释器执行图片的二进制内容,这时候可以将php恶意代码嵌入到图片中

这里可以看到,本关卡对上传的图片进行了前面的内容检测,可以将php代码嵌入到图片尾部

存在文件包含漏洞,直接打开这个网址,给除上传的图片码的file地址变量。

第一步,制作图片码:

第二步,上传文件,并复制文件地址

第三步,点击文件包含漏洞,给出参数?file="复制的文件地址路径",结果如下,在include()时执行了图片码中的php代码

pass15(由于 getimagesize() 只读取文件头信息,恶意代码可能被忽略)

getimagesize()仍然只检测文件头信息,上传pass14的图片码仍然可以成功

做法与pass14一致,结果如下

pass16(exif_imagetype()仍然是通过文件头来检测文件类型)

查看源代码需要php开启exif扩展才生效

开启扩展过后步骤与前面两关一致,制作图片码,上传,用文件包含漏洞进行上传的文件包含,执行图片码中的php代码。

pass17(进行了图片的二次渲染)

这里可以看到,使用了imagecreatefromjpeg()函数,对上传的图片进行打乱,生成新的图片,可以正常上传图片,用010editor工具查看上传前后不变的区域,在那里插入php代码

先正常上传一个文件,然后将上传后二次渲染的文件下载下来,用010editor软件打开,在工具选项---比较文件功能,比较两个文件的16进制,找出前后不变的片段,插入php代码

保存图片,将新构成的图片码上传,后续步骤与上面的关卡一致,进行文件包含,给file参数值

pass18(先上传了文件,再判断是否在白名单里面,存在竞争)

从代码来看,这个页面是先将文件上传了过后,再判断文件的后缀是否在白名单里面,我可以不断的发包上传php(该php代码可以是在上级创建一个的恶意文件代码的php文件)文件,再不断访问文件包含漏洞的界面进行该图片的文件包含,总有一刻是我上传了文件,进行了文件包含,才判断我的文件是否在白名单中,这样已经为时已晚了

修改php代码,这个代码是在上级目录创建一个名未shell.php文件,内容是<?php phpinfo(); ?>

直接上传,用burp抓包,再用intruder模块自动化攻击,持续发上传文件的包

在访问文件包含漏洞的界面,持续刷新

---------------------------------------------------------------------------------------------------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT系列教程(20) Qt 项目视图便捷类

视频连接 https://www.bilibili.com/video/BV1XY41127t3/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 Qt项目视图便捷类 Qt项目视图提供了一些便捷类&#xff0c;包括QListWidget, QTableWidget&#xff0c; QTreeWidget等。我们分别介绍这几个便捷类。 我们先创建一个Qt …

Java学习--MySQL

后端开发中&#xff0c;数据常存储在数据库中&#xff1a; 一、数据库基础 数据库&#xff1a;DataBase&#xff08;DB&#xff09;&#xff0c;是存储和管理数据的仓库 1.1连接数据库 mysql -u用户 -p密码 [-h数据库服务器ip地址 -P端口号] 1.2 关系型数据库 关系型数据…

博客系统测试报告

一、项目背景 以SSM为框架实现的博客系统有四个功能&#xff0c;登录账号进入博客首页&#xff0c;首页展示发布的博客列表&#xff0c;还可以编写或者更改博客内容。为了确保博客系统在各种场景下都能正常运行&#xff0c;需要进行尽可能全面的功能测试和自动化测试。本项目旨…

Chebykan wx 文章阅读

文献筛选 [1] 神经网络&#xff1a;全面基础 [2] 通过sigmoid函数的超层叠近似 [3] 多层前馈网络是通用近似器 [5] 注意力是你所需要的 [6] 深度残差学习用于图像识别 [7] 视觉化神经网络的损失景观 [8] 牙齿模具点云补全通过数据增强和混合RL-GAN [9] 强化学习&#xff1a;一…

LabVIEW变频器谐波分析系统

随着工业自动化的发展&#xff0c;变频器在电力、机械等领域的应用日益广泛&#xff0c;但谐波问题直接影响系统效率与稳定性。传统谐波检测设备&#xff08;如Norma5000&#xff09;精度虽高&#xff0c;但价格昂贵且操作复杂&#xff0c;难以适应现场快速检测需求。本项目基于…

C语言每日一练——day_4

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第四天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…

理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...

DAY10.2 Java核心基础 IO流 字符流和字节流 字符流和字节流在每次处理数据的单位不同&#xff0c;一个是字符&#xff0c;一个是字节 如果复制文件类型是文本类型&#xff0c;字节流字符流都可以 如果复制的文件类型是非文本类型&#xff0c;则只能使用字节流&#xff0c;使…

泄露测试仪CTS的Sentinel I28使用

前言:本文档主要讨论CTS Sentinel I28的使用方法,设备图片如下: 具体文档可从下面链接下载: https://download.csdn.net/download/qq_34047402/90471262 泄露测试仪CTS的SentinelI28使用资源-CSDN文库 [注意] 调压方式,若选择机械式调压,那么测试的压力值只能有1个,…

YOLOv11融合[CVPR205]SCSegamba中的GBC结构

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《SCSegamba: Lightweight Structure-Aware Vision Mamba for Crack Segmentation in Structures》 一、 模块介绍 论文链接&#xff1a;https://arxi…

C++蓝桥杯皮亚诺曲线距离求解

C蓝桥杯皮亚诺曲线距离求解 一、题目概述二、解题分析2.1解题思路2.2k值范围限制 三、实现代码四、代码测试4.1蓝桥杯测试平台4.2直接传入原始输入的k值4.3限制k值大小4.4pow函数求整数高次幂存在误差4.5满分代码 附录error: ‘long long int y1’ redeclared as different kin…

uni-app+vue3学习随笔

目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内&#xff0c; 非 static 目录下的文件&#xff08;vue组件、js、css 等&#xff09;只有被引用时&#xff0c;才会被打包编译。 css、less/scss 等资源不要放在 static 目录下&#xff0c;建议这些…

为什么大模型网站使用 SSE 而不是 WebSocket?

在大模型网站&#xff08;如 ChatGPT、Claude、Gemini 等&#xff09;中&#xff0c;前端通常使用 EventSource&#xff08;Server-Sent Events, SSE&#xff09; 来与后端对接&#xff0c;而不是 WebSocket。这是因为 SSE 更适合类似流式文本生成的场景。下面我们详细对比 SSE…

【2025】基于python+django的考研自习室预约系统(源码、万字文档、图文修改、调试答疑)

考研自习室预约系统通过 Python Django 技术栈的深度整合&#xff0c;为考研学生和自习室管理者打造了一个高效、便捷、智能的自习室预约管理平台。系统不仅满足了学生便捷预约自习室的需求&#xff0c;提升了备考效率&#xff0c;还帮助管理者实现了自习室资源的科学管理和优…

Flutter中stream学习

Flutter中stream学习 概述Stream的基础概念stream的常用方法Stream.fromFuture(Future<T> future)Stream.fromFutures(Iterable<Future<T>> futures)Stream.fromIterable(Iterable<T> elements)Stream.periodic(Duration period, [T computation(int c…

计算机网络:计算机网络的组成和功能

计算机网络的组成&#xff1a; 计算机网络的工作方式&#xff1a; 计算机网络的逻辑功能; 总结&#xff1a; 计算机网络的功能&#xff1a; 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点&#xff08;计算机或设备&…

【redis】五种数据类型和编码方式

文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串&#xff1a;Java 中的 String哈希&#xff1a;Java 中的 HashMap列表&#xff1a;Java 中的 List集合&#xff1a;Java 中的 Set有序集合&#xff1a;除了存 member 之外&#xff0c;还有…

AI与现有运维管理软件之间的相互影响和协同发展

AI与现有运维软件之间的相互影响和协同发展。我们可以从几个角度来探讨&#xff1a; 1. AI与运维软件的共生关系 已有运维软件作为大模型的一部分&#xff1a;运维软件&#xff08;如监控易&#xff09;在长期运行中积累了大量的数据和经验&#xff0c;这些数据和经验可以被用来…

深度评测DeepSeek、ChatGPT O1和谷歌Gemini AI应用开发场景 - DeepSeek性能完胜!

下面我会展示我为期一周的实验结果&#xff0c;创作不宜&#xff0c;希望大家关注我&#xff0c;以后多多互3&#xff01;前一阵我在互联网上看到很多关于DeepSeek R1的讨论&#xff0c;这个开源模型据说可以媲美&#xff0c;甚至优于像OpenAI o1这样的付费模型。 由于我在日常…

使用DeepSeek+蓝耘快速设计网页简易版《我的世界》小游戏

前言&#xff1a;如今&#xff0c;借助先进的人工智能模型与便捷的云平台&#xff0c;即便是新手开发者&#xff0c;也能开启创意游戏的设计之旅。DeepSeek 作为前沿的人工智能模型&#xff0c;具备强大的功能与潜力&#xff0c;而蓝耘智算云平台则为其提供了稳定高效的运行环境…

Hcaptcha验证码自动识别方案详解

Hcaptcha验证系统简介 这个令人头疼的验证系统长这样: 还有这样: 看着就让人不开心,每次都要玩这种小游戏。 工作原理 1. 环境评估(形式主义阶段) 它会检查这些东西: 浏览器指纹行为数据IP地址网站设置 如果你看起来像个"正常访客",它可能就放你过。但要是发现…