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

article/2025/9/28 14:01:29

检测维度

javascript

检查没有流量产生,F12或者FireBug移除JS代码

MIME

MIME检测,burp拦截后更改MIME类型

if($_FILES['userfile']['type'] != "image/gif") { // check Content-type

目录路径

需要存储路径可控(或文件名完全可控)

00截断

$FilePath=evil.php%00.gif;//$_POST['filename']

move_uploaded_file($_FILES['file']['tmp_name'], $FilePath);

5.4.x<= 5.4.39, 5.5.x<= 5.5.23, 5.6.x <= 5.6.7 and gpc 关闭对应:CVE-2015-2348

1、上传时路径可控,使用 00 截断

2、文件下载时,00 截断绕过白名单检查

3、文件包含时,00 截断后面限制(主要是本地包含时)

4、其它与文件操作有关的地方都可能使用 00 截断。

/. 绕过

$sFilePath=evil.php/.

move_uploaded_file( $oFile['tmp_name'], $sFilePath)

扩展名检测

黑名单绕过(大小写(win),asa/cer/cdx(IIS6)/php345/inc/phtml/phps/phpt,win server命名. _ 空格,asp0x00截断,.htaccess, .user.ini(见下文))

php

由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。

jsp

引擎则可能会解析 jspx / jspf / jspa / jsw / jsv / jtml 等后缀,asp支持 asa / asax / cer / cdx / aspx / ascx / ashx / asmx / asp{80-90} 等后缀。

其他

同样可能带来问题,如 vbs / asis / sh / reg / cgi / exe / dll / com / bat / pl / cfc / cfm / ini 等。

系统特性

在Windows系统中,上传index.php.会重命名为.,可以绕过后缀检查。 也可尝试 index.php空格,index.php:1.jpg, index.php::$DATA 等。

以及 windows 通配符:大于号(>)相等于通配符问号(?),小于号(

c167bb625ccc9c11b469c632eeac94af.png

在Linux系统中,可以尝试上传名为 index.php/. 或 ./aa/../index.php/. 的文件

白名单(asp 0x00,解析漏洞,文件包含,NTFS ADS特性)

.htacess

一般来说,配置文件的作用范围都是全局的,但 Apache 提供了一种很方便的、可作用于当前目录及其子目录的配置文件—— .htaccess(分布式配置文件)

.htaccess

SetHandler application/x-httpd-php

要想使 .htaccess 文件生效,需要两个条件:

一是在 Apache 的配置文件中写上:

AllowOverride All

若这样写则 .htaccess 不会生效:

AllowOverride None

二是 Apache 要加载 mod_Rewrite 模块。加载该模块,需要在 Apache 的配置文件中写上:

LoadModule rewrite_module/usr/lib/apache2/modules/mod_rewrite.so

若是在 Ubuntu 中,可能还需要执行命令:

sudo a2enmod rewrite

配置完后需要重启 Apache。

文件内容检测

1.文件幻数检测:

JPEG:FF D8 FF E0 00 10 4A 46 49 46

PNG:89 50 4E 47

GIF:47 49 46 38 39 61

PHP:<?php>、 、 phpinfo();

PHP tag

short_open_tag 決定是否可使用短标签或是编译php时 --enable-short-tags

自PHP 7.0.0起,被移除

=等价 <?php echo自PHP 5.4.0起,可用!

2.文件相关信息检测:添加文件信息

3.文件加载检测:二次渲染,考虑攻击加载器/绕过二次渲染

解析漏洞

apache

(2.0-2.2 可能影响版本)一个文件名为 x1.x2.x3 的文件,Apache 会从 x3 的位置往 x1 的位置开始尝试解析如果 x3 不属于 Apache 能解析的扩展名,那么 Apache 会尝试去解析 x2 的位置,这样一直往前尝试,直到遇到一个能解析的扩展名为止.

修复方案

后缀验证尽量使用白名单的方式,这样即使使用不存在的后缀名,也无法绕过。

配置问题导致漏洞

1、如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含 .php 即使文件名是 test2.php.jpg 也会以 php 来执行。

2、如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg即使扩展名是 jpg,一样能以 php 方式执行。

修复方案

apache 配置文件,禁止 .php. 这样的文件执行,配置文件里面加入

Order Allow,Deny

Deny from all

用伪静态能解决这个问题,重写类似.php.*这类文件,打开 apache 的 httpd.conf 找到

LoadModule rewrite_module modules/mod_rewrite.so

把 # 号去掉,重启 apache, 在网站根目录下建立 .htaccess 文件,代码如下:

RewriteEngine On

RewriteRule .(php.|php3.) /index.php

RewriteRule .(pHp.|pHp3.) /index.php

RewriteRule .(phP.|phP3.) /index.php

RewriteRule .(Php.|Php3.) /index.php

RewriteRule .(PHp.|PHp3.) /index.php

RewriteRule .(PhP.|PhP3.) /index.php

RewriteRule .(pHP.|pHP3.) /index.php

RewriteRule .(PHP.|PHP3.) /index.php

2.4.0-2.4.29 %0a绕过扩展名检测。只要用正则来匹配后缀进行php解析的Apache就有这个问题。而这个做法刚好是为了解决Apache老的解析漏洞而做的,可谓非此即彼,必然存在一种解析漏洞。详见P牛博文。

IIS

IIS6.0 在解析 asp 格式的时候有两个解析漏洞,一个是如果目录名包含 ".asp" 字符串 ,那么这个目录下所有的文件都会按照 asp 去解析,另一个是只要文件名中含有 ".asp;jpg",服务器默认不解析;号后面的内容,因此 xx.asp;.jpg 便被解析成 asp 文件了,会优先按 asp 来解析

IIS7.0/7.5是对 php 解析时有一个类似于Nginx 的解析漏洞,对任意文件名只要在 URL后面追加上字符串 "/ 任意文件名 .php" 就会按照 php 的方式去解析 (IIS6.0 没测试 )

Nginx

一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是 test.jpg,可以添加为 test.jpg/x.php 进行解析攻击。(php-cgi php

php-cgi

修复方案

上传目录、静态资源(CSS/JS/图片等)目录,都设置好屏蔽 PHP 执行权限;

图片与源站分离;

图片进行处理。

(0.5.,0.6, 0.7 <= 0.7.65, 0.8 <= 0.8.37)还有一种是对低版本的 Nginx 可以在任意文件名后面添加 %00.php 进行解析攻击。

其他

软链接任意读文件

上传的压缩包文件会被解压的文件时,可以考虑上传含符号链接的文件 若服务器没有做好防护,可实现任意文件读取的效果。

ln -s index.php text.txt

tar cvf test.tar text.txt

文件名 fuzz 字典

上传漏洞跟那些因素有关:

可解析的后缀,也就是该语言有多个可解析的后缀,比如php语言可解析的后缀为php,php2,php3等等

大小写混合,如果系统过滤不严,可能大小写可以绕过。

中间件,每款中间件基本都解析漏洞,比如iis就可以把xxx.asp;.jpg当asp来执行。

系统特性,特别是Windows的后缀加点(.),加空格,加::$DATA可以绕过目标系统。

语言漏洞,流行的三种脚本语言基本都存在00截断漏洞。

双后缀,这个与系统和中间件无关,偶尔会存在于代码逻辑之中。

.user.ini 配置文件

此类文件仅被 CGI/FastCGI SAPI 处理。在php执行的过程中,除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。

如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。 .user.ini 中可以定义除了PHP_INI_SYSTEM以外的模式的选项,故可以使用 .user.ini 加上非php后缀的文件构造一个shell,比如

auto_prepend_file=01.gif

.htaccess 配置文件

解析

影响当前目录的解析,一般常用:

SetHandler application/x-httpd-php

或者

AddType application/x-httpd-php .asp

修改配置

可以添加后门

php_value auto_prepend_file "/var/www/html/header.php"

php_value auto_append_file "/var/www/html/footer.php"

CGI

此外,还可以尝试通过 CGI 达到 RCE,上传 .htaccess 如下,

Options ExecCGI

AddHandler cgi-script .xx

上传 xx 扩展名文件如下:

#!/bin/bash

echo "Content-Type: text/plain"

echo ""

ls -lah /

exit 0

服务器状态

SetHandler server-status

竞争上传绕过

有的服务器采用了先保存,再删除不合法文件的方式,在这种服务器中,可以反复上传一个会生成Web Shell的文件并尝试访问,多次之后即可获得Shell。

畸形请求

移除 Content-Type: xxx

修改 Content-Disposition: form-data; name="file"; filename="1.jsp"

reference:

1.《Upload Attack Framework》 v1.0 CasperKid [Syclover][Insight-Labs]

2.XMAN 2017 Web

3.利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

4.信安之路

5.Web安全学习笔记-文件上传

xmsec


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

相关文章

上传漏洞上传方法总结

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…

全网最详细的postman接口测试教程,一篇文章满足你

目录 目录 1、前言 2、接口理论 3、接口实例 一、POST 二、GET 4、总结&#xff1a; 1、前言 之前还没实际做过接口测试的时候呢&#xff0c;对接口测试这个概念比较渺茫&#xff0c;只能靠百度&#xff0c;查看各种接口实例&#xff0c;然后在工作中也没用上&#xff0c;…

简单粗暴的PostMan使用说明文档让你一片文章看懂PostMan怎么使用

PostMan功能简单介绍 创建文件夹 点击Collections创建新的文件夹&#xff0c;可以将不同的接口存入不同的文件夹中 点击右边三个点可以进行设置&#xff0c;Rename是重新命名 点击Add request&#xff0c;会在右侧创建一个get请求方式的request。 点击Add Folder&#xff0…

postman基础使用教程

Postman教程大全 - 简书推荐一款接口测试工具&#xff01;POSTMAN&#xff01;简单来说&#xff0c;四个词&#xff0c;简单实用大方美观&#xff01; Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 Postman背景...https://www.jianshu.com/p/97ba64888894 …

不会接口测试?用Postman轻松入门(一)—— Postman实现get和post请求

测试行业现在越来越卷&#xff0c;不会点接口测试好像简历都已经拿不出手了&#xff0c;但很多小伙伴都会头疼&#xff1a;接口测试应该怎么入门&#xff1f;那么多的接口测试工具应该学哪个&#xff1f; 其实&#xff0c;接口测试工具&#xff0c;就像吃饭用的筷子&#xff0…

Postman快速入门(一)

一、基本介绍 postman是一款流程的接口调试工具&#xff0c;其特点就是使用简单&#xff0c;功能强大。使用角色也非常广泛&#xff0c;后端开发&#xff0c;前端人员&#xff0c;测试人员都可以使用它进行接口调试或测试。 下图是基本功能介绍 发送第一个请求 如果你是第一次…

Postman工具介绍以及使用方法教程(一)

Postman工具 1、postman简介 Postman最早是Google浏览器的一个插件存在的&#xff0c;因为Google退出国内市场&#xff0c;现在postman主要是以一个 APP的形式存在。 Postman最初设计上就是为接口测试而设计的&#xff0c;对于测试人员来说主要用来做接口测试。 2、postman的…

使用PostMan上传文件,有图易懂

现在&#xff0c;越来越多的人习惯用postman来测试接口。那么&#xff0c;关于如何使用postman来上传文件&#xff0c;本文进行讲解 1、将请求方式选择为post 2、填写接口地址 3、填写请求头 key&#xff1a;Content-Type value&#xff1a;multipart/form-data 4、填写Body…

postman-使用post请求

一. postman简介 Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上…