浅析文件上传漏洞

it2023-11-27  73

文章目录

文件上传成因客户端校验服务器校验原理危害防御解析漏洞

文件上传

成因

对于上传文件的后缀名(扩展名)没有做较为严格的限制对于上传文件的MIMETYPE 没有做检查权限上没有控制对于上传的文件的文件权限,(尤其是对于shebang类型的文件)对于web server对于上传文件或者指定目录的行为没有做限制

客户端校验

前段js验证

可通过审计修改js代码或burp改包绕过

服务器校验

content-type字段校验

将Content-Type修改为image/gif,或者其他允许的类型删除整行删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意,双引号要跟着c.php将Content-Type修改为content-Type将 Content-Type: application/octet-stream 冒号后面 增加一个空格

文件头校验

将文件头修改为可允许上传文件类型的文件头

检查扩展名

黑名单策略

列表名绕过

查找黑名单中的漏网之鱼,比如asa,cer,cer,ashx,asa,cer,cdx,htr,

大小写绕过

比如aSp,pHp等

能被解析的后缀名:jsp,jspx,jspf,asp,asa,cer,aspx,ashx,php,php ,php3,php4,exe,exee

上传.htaccess文件

通过.htaccess 文件调用 php 的解析器去解析一个文件名只要包含”cimer”这个字符串的任意文件。一个自定义的.htaccess 文件可以以各种各样的去绕过很多上传验证机制。(配合黑名单检测)

1.建立.htaccess 文件,内容如下:<FilesMatch “cimer”> SetHandler application/x-httpd-php

上传 php 木马文件名包含 cimer

将一句话密码设置为cimer

利用 php 解析器来解析 jpg 文件创建.htaccess 文件内容如下:AddType application/x-httpd-php .jpg

空格绕过

在后缀名后添加空格

文件名绕过

php1,php2,php3,php4,php5,Php,aSp

特殊字符绕过

1.asp_

白名单策略

通过解析漏洞上传

0x00截断绕过

假设文件的上传路径为【http://xx.xx.xx.xx/upfiles/lubr.php.jpg】,通过抓包截断将【lubr.php】后面的【.】换成【0x00】。在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束,从而将【lubr.php.jpg】的内容写入到【lubr.php】中,从而达到攻击的目的。 上传抓包后(假如上传的jpg文件名字为1.jpg)在hex中找到1.jpg对应的十六进制,将“.”对应的十六进制(.的十六进制是2e)改为00,go,在上刀连接就行了

00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。PS:0x00是字符串的结束标识符

例:1.php%00.jpg

限制条件

PHP<5.3.29,且GPC关闭

原理

0x00是字符串的结束标识符,系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。注:00指的是文件的16进制内容里的00,而不是文件名中的00 !!!就是说系统是按16进制读取文件(或者说二进制),遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。

双扩展名绕过

apache的conf配置有AddHandler php5-script.php没有注释掉,文件名1.php.jpg就能当作php执行

文件类型验证

通过抓包将content-type字段改为允许上传的类型

原理

文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器,服务器未经任何检验或过滤,从而造成文件的执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。

危害

上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

防御

文件扩展名服务端使用白名单策略校验。文件内容服务端校验上传文件随机重命名隐藏上传文件路径文件上传的目录设置为不可执行单独设置文件服务器的域名

解析漏洞

IIS 6.0 在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。

IIS解析漏洞

IIS6.0

目录解析:/xx.asp/xx.jpg ,如果一个目录以"xxx.asp"的形式命名,那么该目录下的所有类型文件都会被当做asp文件来进行解析执行

文件解析:test.asp;.jpg ,在IIS6.0下,分号后面的不被解析,也就是说test.asp;.jpg会被服务器看成是test.asp

还有IIS6.0 默认的可执行文件除了asp还包含这三种.asa、.cer、.cdx

PUT漏洞

成因:IIS Server 在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,造成任意文件上传。

修复

关闭 WebDAV 和写权限

短文件名猜解 PS:IIS6.0~10.0都受影响

成因:IIS 的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。

修复

升级 .net framework

修改注册表禁用短文件名功能

快捷键 Win+R 打开命令窗口,输入 regedit 打开注册表窗口,找到路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,“1”代表不创建短文件名格式,修改完成后,需要重启系统生效

- CMD 关闭 NTFS 8.3 文件格式的支持 - 将 web 文件夹的内容拷贝到另一个位置,如 c:\www 到 d:\w ,然后删除原文件夹,再重命名 d:\w 到 c:\www。 - 修复成功后显示:Server is not vulnerable - 局限性 - 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解 - 如果文件名本身太短(无短文件名)也是无法猜解的 - 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配 - 远程代码执行 - 成因:在 IIS6.0 处理 PROPFIND 指令的时候,由于对 url 的长度没有进行有效的长度控制和检查,导致执行 memcpy 对虚拟路径进行构造的时候,引发栈溢出,从而导致远程代码执行。 - 修复 - 关闭WebDAV服务 - 使用相关防护设备 - IIS7.0/7.5 - test.jpg/.php URL 中文件后缀是 .php ,便无论该文件是否存在,都直接交给 php 处理,而 php 又默认开启 “cgi.fix_pathinfo” ,会对文件进行“修理”,可谓“修理”?举个例子,当 php 遇到路径 “/aaa.xxx/bbb.yyy” 时,若 “/aaa.xxx/bbb.yyy” 不存在,则会去掉最后的 “bbb.yyy” ,然后判断 “/aaa.xxx” 是否存在,若存在,则把 “/aaa.xxx” 当作文件。 若有文件 test.jpg ,访问时在其后加 /.php ,便可以把 “test.jpg/.php” 交给 php ,php 修理文件路径 “test.jpg/.php” 得到 ”test.jpg” ,该文件存在,便把该文件作为 php 程序执行了。

修复

对新建目录文件名进行过滤,不允许新建包含‘.’的文件取消网站后台新建目录的功能,不允许新建目录;限制上传的脚本执行权限,不允许执行脚本;过滤 .asp/xm.jpg,通过 ISApi 组件过滤。
最新回复(0)