upload文件上传漏洞

upload-labs有较全的文件上传漏洞题目类型,可以搭建一试。
c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场

针对目标网站在前端js对文件后缀名进行校验,可以在浏览器中禁用js后刷新网页重新上传webshell,当然单纯的禁用js可能会引起网站的其他功能异常,可以上传后缀名为jpg的webshell文件,在上传文件过程中抓包,修改文件后缀名后放行。

针对目标网站对请求头的 Content-Type 进行校验,正常上传php文件,抓包修改 Content-Type 为 image/jpeg 放行即可。

针对目标网站在服务端对文件后缀名进行校验的,可以尝试不同的文件后缀名,如 .php5 .phtml 等等,或许也能够解析成功。

我们可以通过上传 .htaccess 文件,增加解析规则,让非php文件解析为php文件执行。
SetHandler application/x-httpd-php
表示该目录下所有文件均被视为php文件执行。

AddType application/x-httpd-php .gif
当然也有不同的规则,此规则表示该目录下所有 .gif 文件均被视为php文件执行。

还可以对被解析的文件范围做进一步的缩小。

1
2
3
<FilesMatch "exp.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

在该目录下,如果匹配到 exp.jpg 文件,则被视为php文件执行。

我们可以通过上传 .user.ini 文件,增加配置项,指定文件自动解析执行。
auto_prepend_file=exp.jpg
表示指定一个文件 exp.jpg ,加载访问的php文件之前,会先加载该文件。

当然也可以指定一个文件 exp.jpg ,加载访问的php文件之后,再加载该文件。
auto_append_file=exp.jpg

windows服务端对文件名不区分大小写,会自动去除文件名末尾的空格和点。
如果过滤不完全,可以修改后缀名为 .PHP、.php 、.php.绕过。

windows服务端中,PHP会把 ::$DATA 之后的数据当成数据流处理,创建文件时保持 ::$DATA 之前的文件名,因此可以通过在后缀名中加 ::$DATA 的方法绕过黑名单。

针对目标网站在服务端使用 str_ireplace() 函数对文件名中黑名单关键词替换为空的,可以使用双写绕过的方法绕过黑名单。
.pphphp

当服务端 php 版本小于5.3.4,并且配置文件中的配置项 magic_quotes_gpc 值为 0FF 时,可以使用00截断的方法绕过。

针对目标网站在服务端使用 fread() 、getimagesize() 、exif_imagetype() 等函数对文件的前几个字节进行校验的,都可以通过图片马成功上传文件,但是要结合文件包含漏洞进行攻击。

对于目标网站将上传文件进行二次渲染的,可以选择gif类型的图片马上传,减少二次渲染过程中对图片内容的压缩损失,也避免了图片马中php代码的丢失。

对于目标网站服务端是先把文件上传到目标目录下,然后判断文件类型,如果不是图片类型的文件,则再删除该文件的流程,可以使用条件竞争的方法进行攻击。