后缀名检测与绕过之Windows特性(末尾的点【.】)绕过

文章介绍了服务器端文件上传的防护重要性,包括后缀名检测、MIME类型检测等方法,并详细阐述了各种绕过策略,如大小写绕过、黑名单列表绕过,以及利用BurpSuite工具抓包修改后缀名来绕过Windows系统的限制。实验过程演示了如何上传脚本文件并成功解析执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验原理

文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:

1. 后缀名检测绕过
2. MIME类型检测与绕过
3. 文件内容检测与绕过
4. 00截断绕过
5. 条件竞争检测与绕过

后缀名检测的绕过方法也有很多,常见的有:

1. 黑名单--大小写绕过
2. 黑名单--名单列表绕过
3. 黑名单--Windows特性(末尾的点【.】)绕过
4. 黑名单--Windows特性(空格【 】)绕过
5. 黑名单--Windows特性(::$DATA)绕过
6. 白名单(需要结合文件包含漏洞或者Web服务器解析漏洞)
7. .htaccess文件攻击--匹配文件内容
8. .htaccess文件攻击--配皮文件名中的关键字
9. .htaccess文件攻击--匹配文件名
10. Apache解析漏洞

一些特殊的文件命名方式在Windows下是不被允许的,利用Burp Suite工具抓包修改后缀名,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的。
注:此方法只适应于Windows,因为Unix/Linux系统没有这个特性。

实验步骤

1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload3.html

2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件

3、点击“选择文件”按钮,选中要上传的文件

4、点击“submit”按钮,文件上传失败,此文件不允许上传

5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传

6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具

7、切换到“Proxy”代理模块的“Options”,查看Bp的代理

8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致

9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包

10、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.

11、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

12、关闭浏览器代理

13、访问http://ip/upfile/2/upload/info.php.(访问http://ip/upfile/2/upload/info.php也可以),上传的脚本文件成功解析

实验总结

掌握文件上传的服务端检测中的后缀名检测原理,“【.】”在Windows下是不被允许的,利用Burp Suite抓包在文件后缀名处添加“【.】”,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的点(【.】)。

### 绕过文件上传限制的技术手段 #### 利用 Windows 系统特性 在特定环境下,可以通过向 PHP 文件名添加额外的句号(`.`),利用 Windows 操作系统的特殊处理方式来绕过文件上传限制。当文件被上传至 Windows 服务器时,操作系统会自动移除文件名末尾多余的句号,从而使得原本带有非法扩展名的文件得以成功存储并保留其原始扩展名[^1]。 例如,在尝试上传 `x.php.` 至目标服务器的过程中,尽管初始状态下该文件可能因不符合安全策略而遭到拦截;但在实际落地于磁盘之后,则会被重命名为 `x.php` 并保持可执行状态。 ```php // 示例:恶意用户提交名为"x.php."的文件 $file = 'x.php.'; ``` 需要注意的是,这种方法仅适用于基于 Windows 的 Web 应用程序部署场景,并且依赖于应用程序本身对于输入数据缺乏充分校验的情况。 #### Apache 后缀解析机制 Apache HTTP Server 解析 URL 请求时遵循一种特殊的后缀匹配逻辑——即自右向左逐一遍历直到发现已知 MIME 类型为止。如果存在未知类型的后缀则忽略之继续向前查找下一个有效部分[^2]。因此,攻击者能够巧妙设计文件名称结构以规避某些形式上的过滤规则: 假设服务器配置允许 `.jpg` 图片格式却阻止了直接上传 `.php` 脚本的情形下,构造形如 `shell.jpg%00.php` 或者其他变体形式就有可能实现预期目的。 然而值得注意的一在于现代版本的主流软件产品通常已经针对此类技巧进行了针对性防护措施升级,单纯依靠上述简单手法难以奏效。 #### 缺乏严格的内容验证流程 代码片段展示了典型的文件上传功能实现过程中的安全隐患所在之处。由于未能实施必要的安全性检查环节,导致任意类型的文档都能够毫无阻碍地进入受保护区域内部[^3]。具体表现为如下几个方面: - **未审查源文件类型**:没有对接收到的数据流做任何性质判断; - **忽视潜在风险评估**:忽略了对所接收对象进行全面细致的安全性考量; - **疏忽最终安置位置控制**:任由外部实体指定存放地址而不加以约束管理。 综上所述,为了防止遭受类似的威胁侵害事件发生,建议开发者务必重视起前端表单参数净化以及后台服务端接口层面的有效治理工作,确保整个交互链条各节均处于严密监控之下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值