文件上传漏洞小结

1 概念

      上传文件时,服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。

2 危害

• 网站被控制,对文件增删改查,执行命令,链接数据库

• 如果服务器长久未更新,可以利用exp提权,导致服务器沦陷

• 同服务器的其他网站沦陷

3 导致漏洞原因

      ·服务器配置不当(iis6.0 put 直接写文件)

      ·本地文件上传限制被绕过(js验证)

      ·服务端过滤不严格被绕过(禁止php等,未禁php3、asa、cer、cdx等)

      ·文件路径截断(0x00、\0、?等字符,超长文件路径)

      ·文件解析漏洞到导致文件执行(iss,apache,nginx)

      ·开源编辑器上传文件漏洞(fckeditor自定义文件名、文件夹结合IIS6.0解析漏洞,ewebeditor可登陆后台配置上传文件类型)

4 利用条件

      1、有文件上传功能   2、上传文件能够执行   3、上传文件路径可知

5 利用方法

• 找到上传点,尝试上传脚本文件

• 上传成功,访问上传的脚本文件

• 上传失败,采取过滤绕过方法

6 利用步骤

思路:

·什么语言?什么容器?什么系统?都是什么版本?

·都可以上传什么格式的文件?

·上传大的文件会不会重命名或者二次渲染?

6.1 客户端校验

js校验

      浏览器审查元素,删除οnsubmit="return checkFile()"校验;

      或 将上传马的类型改为指定类型,burp抓包后改回脚本类型上传

6.2 服务器检测

6.2.1 MIME检测(Content-type内容)

      Burp suite 抓包,修改content-type为image/jpeg、image/gif、image/png或image/bmp

 文件上传漏洞小结_第1张图片

 文件上传漏洞小结_第2张图片

6.2.2 目录路径检测(path 参数相关内容)

00截断:

Currentfolder=xxx.php%00.gif

(原因:低层调用类似C语言,遇到0x00会自动截断)

6.2.3 文件扩展名检测(extension 相关内容)

黑名单机制

a)     大小写绕过

b)     名单列表绕过

asa、cer等后缀名可能黑名单没有列出

c)     特殊文件名

(windows中)burp抓包修改为test.asp.或test.asp_(下划线为空格),绕过验证,被windows系统自动去掉点和空格。

d)     0x00截断绕过

gettype(name)函数处理方式从后往前扫描扩展名,将test.asp .jsp(asp后面为0x00)识别为jpg

e)     .htaccess文件攻击

上传.htaccess文件,内容如下

     

      SetHandler application/x-httpd-php

     

上传文件名为haha的任意名的PHP木马,菜刀链接即可

(通过一个.htaccess 文件调用php 的解析器去解析一个文件名中只要包含"haha"这个字符串的任意文件,所以无论文件名是什么样子,只要包含"haha"这个字符串,都可以被以php 的方式来解)

f)      解析调用

接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞

g)     构造包含脚本的图片

方法1:桌面cmd命令下,执行copy 0000.png/b + hack.php/a hack.jpg

方法2:文件所在目录cmd命令下,执行 copy /b 0000.png + hack.php=hack.jpg

白名单机制

0x00 截断绕过

常见asp 的程序。用像test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击。

Iiis6.0中将木马名改为test.asp;1.jpg上传绕过。

6.2.4 文件内容检测(检测内容是否合法或含有恶意代码)

代码层检验最后一关

6.2.5 文件幻数检测

jpg文件开头写上JFIF FF D8 FF E0 00 10 4A 46 49 46   后加一句话木马

gif文件开头写上GIF 89a 47 49 46 38 39 61   后加一句话木马

png文件开头写上PNG 89 50 4E 47   后加一句话木马

6.2.6 文件相关信息检测

图像文件相关信息检测常用getimagesize()函数。需要把文件头部分伪造好,即在幻数的基础上还加了一些文件信息

类似如下结构

GIF89a

(...some binary data for image...)

(... skipping the rest of binary data ...)

6.2.7 文件加载检测

一般是调用API 或函数去进行文件加载测试

常见的是图像渲染测试,更严格的是进行二次渲染      

6.3 web应用程序解析漏洞攻击

6.3.1 Apache解析漏洞

Apache解析文件名从后往前。

一个文件名为x1.x2.x3 的文件,Apache 会从x3 往x1 开始尝试解析如果x3 不属于Apache 能解析的扩展名,会尝试去解析x2 ,一直往前尝试,直到遇到一个能解析的扩展名为止。

可能影响的版本:

 文件上传漏洞小结_第3张图片

6.3.2 IIS解析漏洞

IIS6.0

目录名包含".asp"字符串,目录下所有文件都按照asp解析

只要文件名包含".asp",会有限按照asp解析

常见名称格式:

test.asp/任意文件名、test.asp;任意文件名、任意名/任意名.php

IIS7.0/7.5

对任意文件名只要在URL后追加字符串"/任意文件名.php"就会按照php方式解析。

6.3.3 Nginx解析漏洞

任意文件名,后面/加任意文件名.php解析攻击

低版本nginx,在任意文件名后面加%00.php解析攻击

已测试的影响范围:

Nginx 0.5.*、nginx 0.6.*、nginx 0.7<=0.7.65、nginx 0.8 <=0.8.37

6.4 小结

 文件上传漏洞小结_第4张图片

7 防御方法

      • 上传文件的存储目录不给执行权限

• 文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)

• 不能有本地文件包含漏洞(include dama.jpg)

• 及时更新web应用软件避免解析漏洞攻击

 

转载于:https://www.cnblogs.com/appear001/p/11141899.html

你可能感兴趣的:(php,运维,数据库)