php 上传文件漏洞,【文件上传】PHP文件上传漏洞

article/2025/9/29 5:30:56

0x01 文件上传漏洞

文件上传漏洞顾名思义就是用户上传一个可执行的脚本文件,获得了执行服务器端命令的能力。通常,文件上传是getshell最常用、最直接的方式了。但是,文件上传本身是一个正常的业务需求,因此问题在于如何安全的上传。

0x02 文件上传的触发条件

上传的文件被Web容器解释执行

用户能够从web页面访问到被上传的文件(直接或间接)

用户上传的文件通常不能被网站程序压缩、修改内容

0x03 从防御的角度看上传

通常防御文件上传漏洞是分几个点的,大体上就以下几方面

1. 客户端javascript校验

在浏览加载文件,但还未点击上传按钮时变弹出对话框,内容可能是“只允许上传xxx后缀名的文件”之类的,而此时并没有发送数据包。

绕过方法:

关闭浏览器的javascript功能

用burp抓包改后缀名

2. 检测MIME 类型

· 客户端判断:

$_FILES['myfile']['type'] == 'image/jpeg'

· 服务端判断:

$fileinfo = finfo_open(FILEINFO_MIME);

$mimetype = finfo_file($fileinfo, $file_true_name);

绕过方法:

用burp抓包,修改Content-Type

3. 检查内容

服务器端会读取上传的文件然后判断文件内容时候有<?php之类的

bbad15b3445a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

绕过方法:

如果检查文件头的话就就可以找张真正的图片然后用winhex在图片的末尾写php代码

4. 检查文件扩展名

一般检查文件扩展名为最直接有效的方法,通常是基于白名单或者黑名单来实现的。

黑名单绕过

可以使用能够被解析的其他文件扩展名

jsp jspx jspf

asp asa cer aspx

php phtml php3 php4 php5 PHP phtm

exe exee

特殊文件名绕过

比如在上传的时候改成test.asp.或者test.asp_(下划线为空格,这里方便大家看用下划线表示了),这种命名方式在windows下是不允许的,绕过验证后windows系统自动去掉后面的点和空格,但要注意Unix/Linux是没有这个特性的。

00截断

有的时候可能会遇到服务器端把后缀名已经定好了,而恰好别的地方有一个可以任意读取php文件的服务,这个时候可以把图片马上传后在这里查看,查看的时候用%00把后面的.php给截断就好了

.htaccess文件攻击

配合名单列表绕过,上传一个自定义.htaccess文件,即可轻松绕过各种检测。

解析漏洞绕过

这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析漏洞即可

白名单绕过

%00截断

跟之前说的很像,就是上传一个比如shell.php%00.jpg,服务器检测后缀名是.jpg,但实际上已经被截断了。

解析漏洞利用

这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析漏洞

.htaccess文件攻击

配合名单列表绕过,上传一个自定义.htaccess文件,即可轻松绕过

0x04 与文件上传息息相关的解析漏洞

IIS5.x-6.x解析漏洞

•使用iis5.x-6.x版本的服务器,大多为windowsserver2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。

•目录解析(IIS6.0),只要文件夹有asp的话,该目录下所有文件都会当作asp来解析,www.xxx.com/xx.asp/xx.jpg(xx.asp要存在)

•www.xxx.com/xx.asp;.jpg服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。(xx.asp;.jpg为上传文件)

IIS的PUT上传

•PUT是在WebDav中定义的一个方法,允许用户上传文件到指定目录。

•在许多WebServer中都默认禁用了此方法,或者对上传做了严格限制。但在IIS中,如果目录支持写权限,同时开启了WebDav,就会支持PUT,再结合MOVE方法,可Getshell。

apache解析漏洞

•Apache解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.owf.rar“.owf”和”.rar”这两种后缀是apache不可识别解析,apache就会把test.php.owf.rar解析成php•www.xxxx.xxx.com/test.php.php123

•Apache的httpd.conf的AddHandler php5-script .php这时只要文件名里包含.php即使文件名是test2.php.jpg也会以php来执行。(配置错误)

nginx解析漏洞(Nginx<8.03)

•当cgi.fix_pathinfo开启时(为1)

•当访问www.xx.com/phpinfo.jpg/1.php时,会将phpinfo.jpg当做php进行解析

•其中1.php是一个不存在的文件

0x06 参考

某大佬的PPT

文件上传框架


http://chatgpt.dhexx.cn/article/uaEjo4hU.shtml

相关文章

文件上传之图片上传题目

[A]文件上传之图片上传题目 Give me your photo PLZ 提示 我好想看一些好康的图片呜呜 题目 .htaccess是Apache的又一特色。一般来说&#xff0c;配置文件的作用范围都是全局的&#xff0c;但Apache提供了一种很方便的、可作用于当前目录及其子目录的配置文件——.htaccess&…

mysql文件上传漏洞_[转载]文件上传漏洞

文件上传漏洞 实验环境&#xff1a; Windows 7 X64 Phpstudy 2018 PHP 5.4.45 Apache 2.4.23 靶机项目地址&#xff1a;https://github.com/c0ny1/upload-labs Pass01 — JS限制 开启burp抓包&#xff0c;尝试上传eval.php,点击上传后页面直接提示该文件不允许上传&#xff0c;…

文件上传upload-lads

文件上传upload-lads 第一关 前端绕过&#xff08;js&#xff09; 本关是对文件名的过滤(在客户端进行) 即若文件名中存在php等后缀则直接过滤&#xff08;弹窗&#xff09; 上传一个webshell到服务器 但只容许上传".jpg|.png|.gif"; ".jpg|.png|.gif&quo…

上传绕过php文件改为图片,文件上传绕过(二)

基于文件后缀名的绕过 同理&#xff0c;我们先看源码$is_upload false; $msg null; if (isset($_POST[submit])) { if (file_exists($UPLOAD_ADDR)) { $deny_ext array(.asp,.aspx,.php,.jsp); $file_name trim($_FILES[upload_file][name]); $file_name deldot($file_nam…

文件上传思路总结

#思路总结 当遇到js前端脚本限制上传文件类型当服务器检测上传文件的MIME类型即媒体类型时文件头校验后端设置了后缀名黑名单文件解析漏洞htaccess文件大小写绕过加空格绕过加点绕过::$DATA绕过点加空格加点绕过双写绕过 后端设置了后缀名白名单当只能上传图片文件时&#xff0…

细说——文件上传漏洞(另附文件上传靶场通关记录)

目录 漏洞描述漏洞危害常见上传点和绕过方式上传点后缀绕过解析漏洞常见绕过类型 脑图漏洞在系统中的差异IIS 5.x/6.0解析漏洞Nginx 解析漏洞Apache 解析漏洞 靶场环境准备理解文件上传Pass-1-js检查【前端绕过】Pass-2-只验证Content-type【考核&#xff1a;MIME绕过】Pass-3-…

文件上传漏洞获取服务器,渗透测试-文件上传漏洞

声明&#xff1a;文中出现的ip为练习靶场&#xff0c;本文仅供学习&#xff0c;旨在学习web安全&#xff0c;不允许任何侵权行为 WebShell与WebShell管理工具 文件上传漏洞概述 文件上传漏洞绕过 文件上传漏洞防御 一、WebShell与WebShell管理工具 什么是WebShell webshell&…

php文件上传小结,文件上传总结

检测维度 javascript 检查没有流量产生&#xff0c;F12或者FireBug移除JS代码 MIME MIME检测&#xff0c;burp拦截后更改MIME类型 if($_FILES[userfile][type] ! "image/gif") { // check Content-type 目录路径 需要存储路径可控(或文件名完全可控) 00截断 $FilePat…

上传漏洞上传方法总结

title: 上传漏洞[汇总] copyright: true top: 0 date: 2018-07-31 22:40:47 tags: 上传漏洞 categories: 渗透测试 permalink: password: keywords: description: 对上传漏洞的大部分上传方式作总结。 最后必然失去的希望就是毒药啊。 个人对上传漏洞的理解在第一章节就说过了&…

php 文件上传抓包,详解文件上传漏洞

介绍 在现代互联网网站中,上传文件基本上是一种常见的功能,允许用户上传一些图片,视频以及其他类型的文件。如果网站出现文件上传漏洞,那么恶意用户就可以将可执行脚本程序上传到web服务器中,获得网站权限,进一步 gongji web服务器。 当上传文件时,如果服务端未对客户端…

文件上传漏洞总结

文件上传 文件上传漏洞产生的原理 文件上传漏洞是指用户通过界面上的上传功能上传了一个可执行的脚本文件&#xff0c;而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好。 文件上传漏洞的危害 1、由于是上传的文件&#xff0c;所以文件由用户决定&#xff0c;上传we…

php 上传文件触发,PHP文件上传漏洞浅析

PHP文件上传漏洞的浅析。 文件上传简介 在一个正常的网站中&#xff0c;通常都会存在一些允许用户上传文件的地方。但是有一些上传功能的地方没有对用户上传的内容进行过滤&#xff0c;导致会上传木马到服务器并执行命令&#xff0c;甚至控制服务器的权限。 文件上传实现 前端代…

文件上传漏洞

文件上传漏洞 1. 文件上传功能 文件上传功能是大部分WEB应用的必备功能&#xff0c;站点常见文件上传点有&#xff1a;用户头像上传、社交类网站允许用户上传照片、服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而&#xff0c;看似…

java fckeditor 上传图片_java下FCKeditor上传图片问题

展开全部 先到tomcat->webapps里建立一个文件夹叫mysite。把FCKeditor里的/editor和fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml四个文件copy到mysite文件夹里&#xff0c;因为别的文件对我32313133353236313431303231363533e58685e5aeb931333239303264们…

Consider defining a bean of type ‘com.course.server.mapper.TestMapper‘ in your configuration.

问题 Description:A component required a bean of type com.course.server.mapper.TestMapper that could not be found.Action:Consider defining a bean of type com.course.server.mapper.TestMapper in your configuration.解决 我用了mybatis&#xff0c;在mapper层忘记…

@ManyToMany mappedby

学生和老师就是多对多的关系。一个学生有多个老师&#xff0c;一个老师教多个学生。多对多映射采取中间表连接的映射策略&#xff0c;建立的中间表将分别引入两边的主键作为外键。jpa 对于中间表的元数据提供了可配置的方式&#xff0c;用户可以自定义中间表的表名&#xff0c;…

MapDB简单用法

MapDB提供了Java映射、集、列表、队列和其他由非堆或磁盘存储支持的集合。它是java集合框架和嵌入式数据库引擎之间的混合。它是Apache许可下的免费和开放源码。 如果处理GB级数据&#xff0c;请考虑使用非缓存存储容器&#xff0c;比如本篇提到的MapDB&#xff0c;而不要把庞大…

BaseMapper

* 1.公共的方法进行抽取,抽取到BaseMapper接口中,将用户操作的方法对象,转化为数据库能够识别的SQL语句 * 2.通过userMapper查找父级接口BaseMapper * 3.根据BaseMapper查找泛型对象User对象 * 4.根据user对象查找指定的注解TableName,获取表明 * 5.根据user对象的属性,动态获取…

MappedBy

对于mappedBy复习下&#xff1a; a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性&#xff0c;ManyToOne不存在该属性&#xff1b; b) mappedBy标签一定是定义在the owned side(被拥有方的)&#xff0c;他指向the owning side(拥有方)&#xff1b; c) mappedBy的含义…

Data Mapper

使用 Data Mapper分离数据源的Model和页面现实的Model&#xff0c;不要因为数据源的增加、修改或者删除&#xff0c;导致上层页面也要跟着一起修改 interface Mapper<I,O> {fun map(input:I):O }data class CarEntity(var no:String) data class CarModel(var num:String…