文件上传

Chiexf Lv4

一、文件上传的原理

由于程序员对用户上传功能实现时,没有对其名称、类型、内容或大小等进行验证和限制,导致攻击者可以向服务器上传一个与网站相应的恶意代码文件。如webshell(即ASP木马、PHP木马、JAVA木马等),通过执行这些恶意代码,获取服务器权限等。

二、文件上传的危害

执行任意代码:攻击者可以上传包含恶意代码的文件,然后在服务器上执行该代码,从而控制服务器并获取敏感信息。

篡改网站内容。

数据泄露。

拒绝服务攻击:上传大量无效文件来占用服务器存储空间和带宽,从而使服务器无法正常工作。

三、文件上传的利用

前端校验

1
2
3
4
传正常文件修改数据包
复写校验函数
用bp修改返回包
禁止js

MIME头检测

1
修改Content-Type类型

黑名单限制不完全

1
2
3
利用别名绕过
大小写绕过
双写绕过

Apache解析漏洞

1
. 绕过

上传 .htaccess

1
2
3
4
只在apache服务器上起作用。
AllowOverride指令,该指令应设置为All或相应的选项。
AddType application/x-httpd-php //将所有文件按照php文件进行解析。
AddType application/x-httpd-php .jpg //将jpg文件按照php文件进行解析。

上传 .user.ini

1
2
3
4
5
PHP 5.3.0+
.user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。此类文件仅被 CGI/FastCGISAPI 处理。
存在可利用 .php 文件
auto_prepend_file=a.jpg //在页面顶部加载文件
auto_append_file=a.jpg //在页面底部加载文件

windows

1
2
3
4
空格绕过
. 绕过
::$DATA绕过
注:php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名。

%00截断 GET POST

1
2
< php6.3.4
magic_quoles Off

图片马

1
2
3
4
5
6
7
8
9
图片马+文件包含漏洞
二次渲染
条件竞争 上传-判断-删除

补充:
Png图片文件包括8字节:89 50 4E 47 0D 0A 1A 0A。即为.PNG。
Jpg图片文件包括2字节:FF D8。
Gif图片文件包括6字节:47 49 46 38 39|37 61 。即为 GIF89(7)a。
Bmp图片文件包括2字节:42 4D。即为 BM。

四、文件上传漏洞修复

文件类型验证:在上传文件前,必须对文件类型进行严格的检查和校验,仅允许上传已授权的文件类型。

文件内容检查。

上传文件重命名。

隐藏上传文件目录,文件路径随机化。

安全权限设置:对于上传文件所在目录,设置合适的文件访问权限。