Upload Bypass


客户端 JavaScript

某些网站通过前端 JavaScript 来检查上传文件的后缀,不要怕,一切的前端验证都是纸老虎!!

1. Burpsuite 抓包修改后缀

2. 将上传页面保存到本地(不能直接修改,因为浏览器有缓存),删除其中用于检查后缀的 JS 代码

3. 禁用浏览器 JS 或 通过 Burp 删除 JS(不推荐,因为禁用所有 JS 可能会影响其他功能)

服务端 后缀检查

1. 利用黑名单漏网之鱼

AddType application/x-httpd-php .php5 .phtml

2. 上传自定义的 .user.ini

前提是上传目录有 .php 文件,并且能够访问到它,让其包含我们上传的图片马

auto_prepend_file=shell.jpg        //让当前目录的所有 .php 文件在顶部包含 shell.jpg
auto_append_file=shell.jpg         //让当前目录的所有 .php 文件在底部包含 shell.jpg

3. 上传自定义的 .htaccess

.htaccess 是 Apache 的一种分布式配置文件,该文件中的配置指令作用于该文件所在的目录及其所有子目录,但子目录中的指令会覆盖父目录或者主配置文件中的指令

Apache 需要开启 mod_rewrite 模块,以及设置 AllowOverride All 才能生效,以下配置会让 Apache 把 shell.gif 交给 PHP 去解析

"shell.gif">
    SetHandler application/x-httpd-php

4. 00 截断

PHP 版本小于 5.3.4 且 php.ini 中的 magic_quotes_gpc 为 OFF 状态

由于 POST 请求不会自动解码,所以需要在 Burp 中将 %00 选中,Ctrl+shift+u 进行 URL 解码,而 GET 会自动解码一次,所以不需解码

1.php%00.png                # 文件名截断 .png 绕过了后缀检查,但由于截断,最终只有 1.php 被保留
/uploads/1.php%00            # 上传路径可控

5. 特殊后缀

(1)空格或点

 Windows 会自动去除后缀名后面的空格或小数点

(2)::$DATA

Windows 会把 ::$DATA 数据当作文件流处理,不会检测后缀名,且会保持 ::$DATA 之前的文件名不变

(3)双写后缀

后端若只将不合法后缀替换为空一次,那么 pphphp 过滤一次就会剩下 php 了

(4)大小写混写

服务端 内容检查

1. 图片马

若服务端检查文件头,则可以尝试上传图片马,然后配合文件包含漏洞或者中间件的解析漏洞

2. 代码逻辑

若先上传再验证(上传过程不进行验证),这样文件会暂时保存到服务器上,可以趁程序对此文件进行操作(例如改名,移动),访问文件进行占用

声明:本文仅用于学习,切勿对网站进行非授权测试!!

相关