文件上传

文件上传漏洞
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

一般分为前端检测和后端检测
一.前端检测:主要通过javascript检测
如何判断当前页面使用前端is的验证方式?
@ 检查有没有检查函数来判断文件类型的
@ 前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求,或者是burp看可不可以抓到包。
二.后端检测绕过
分为检查后缀,内容,条件竞争
2.1 检查后缀分为黑名单和白名单
黑名单:
绕过方式:
2.1.1 解析漏洞
@ .htaccess apache解析漏洞
@ iis 6.0解析漏洞
目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp/.asa,.asa目录下的文件都解析成asp文件。
文件解析
形式:www.dazhi.com/xxx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
@ IIS7.0 | IIS7.5 | Nginx的解析漏洞
2.1.2 截断绕过
xxx.jpg%00.php (Nginx <0.8.03版本 存在空字节代码执行漏洞)
PHP%00截断
条件:php<5.3.4,magic_quotes_gpc=OFF;
2.1.3 大小写绕过
PhP Asp PhP
2.1.4 双写绕过
phphpp
2.1.5 黑名单的漏网之鱼
asp: asa cer aspx jsp: jspx jspf
php: php php3 php4 php5 phtml pht
exe: exee
2.1.6 Windows的命名机制
shell.php.
shell.php空格
shell.php:1.jpg
shell. php::$DATA
shell.php:1.jpg
在windows中,后缀名后面的点和空格都会被删除
白名单
2.1.7 解析漏洞
2.1.8 MIME检测
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
常见的MIME类型:
text/plain (纯文本)
text/html (HTML文档)
text/javascript (js代码)
application/xhtml+xml (XHTML文档)
image/gif (GIF图像)
image/jpeg (JPEG图像)
image/png (PNG图像)
video/mpeg (MPEG动画)
application/octet-stream (二进制数据)
application/pdf (PDF文档)
绕过原理:在文件上传过程中,服务端会针对我们的上传的文件生成一个数组,这个数组其中有一项就是这个文件的类型file_type;服务端对文件进行检测时,就是通过检测脚本中的黑白名单和这个数组中的file_type进行对比,如果符合要求就允许上传这个文件。
部分Web应用系统判定文件类型是通过content-type字段,黑客可以通过抓包,将content-type字段改为常见的图片类型,如image/gif,从而绕过校验。
2.2 内容检测
2.2.1文件头检查
添加GIF89a头即可
2.2.2
  一般文件内容验证使用getimagesize或exif_imagetype()函数检测,会判断文件是否是一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。
copy a.png /b + a.php /a 3.php
/b:指定以二进制格式复制、合并文件,用于图像或者声音类文件
/a:指定以ascii格式复制、合并文件用于txt等文本类文件
一般解析图片马需要结合解析漏洞或者文件包含才能解析图片马
2.2.3 二次渲染
原理:在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。
https://xz.aliyun.com/t/2657
2.3 条件竞争
 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。

上传文件源代码里没有校验上传的文件,文件直接上传,上传成功后才进行判断:如果文件格式符合要求,则重命名,如果文件格式不符合要求,将文件删除。
由于网站会检查客户端所上传的文件,但是不会检查其自己生成的文件,利用时间差让服务器生成一个他自己信任的WebShell脚本文件。
由于服务器并发处理(同时)多个请求,假如a用户上传了木马文件,由于代码执行需要时间,在此过程中b用户访问了a用户上传的文件,会有以下三种情况:

1.访问时间点在上传成功之前,没有此文件。

2.访问时间点在刚上传成功但还没有进行判断,该文件存在。

3.访问时间点在判断之后,文件被删除,没有此文件。
就是让上传的这个文件在未被删除之前我们访问上传的文件让它代码实现生成一个一句话木马文件,我们再来访问那个文件。
三.WEB服务器解析漏洞
1.IIS解析漏洞
1、IIS5.x - 6.x版本服务器,大多数为windows server 2003,开发语言为asp,该解析漏洞也只能解析asp,不能解析aspx
2、目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理:服务器默认把.asp或.asa目录下的文件都解析成asp文件

3、文件解析
形式:www.xxx.com/xx.asp;xx.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;xx.jpg便被解析成asp文件

4、解析文件类型
IIS6.0 默认可以执行文件除了asp还包含这三种:

/test.asa
/test.cer
/test.cdx
IIS7.5解析漏洞
IIS7.5的漏洞与nginx的类似,都是由于php配置文件(php.ini文件)中,开启了cgi.fix_pathinfo,而这并
不是nginx或者iis7.5本身的漏洞,都是配置不当引起的。
2.apache 1.xx/2.2xxx

  1. 示例:www.xxxx.xxx.com/test.php.php123
     Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如
    test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把
    xx.php.owf.rar解析成php
    比如我们将sql.php改为sql.php.xxxx,正常来讲的话是不能解析的,但是老版本的apache(apache2.2
    版本及之前的)是能够正常将这个文件解析为php文件的
    3.nginx解析漏洞
    当php.ini配置文件中开启了cgi.fix_pathinfo,该值默认为1,表示开启。看名字大概知道是处理路径用
    的配置。
    比如我们上传了一个木马文件web.jpg,因为web.php不能上传,现在我们想执行这个web.jpg,可以如下路
    径访问
    xxxx.com/pikachu/web.jpg/aaa.php
    而目标服务器上没有aaa.php文件,本来如果nginx.conf的配置没有问题的话,nginx会先去找下这个文件
    是否存在,如果存在,在找php解释器来解释执行代码,如果不存在,nginx会直接返回错误信息,说找不到
    该文件,但是如果nginx.conf配置不当会导致nginx把以’.php’结尾的文件交给fastcgi处理,也就是说
    首先nginx看到你路径中要找aaa.php,哦,原来是php文件,nginx不去找这个文件了,而是就直接交给了
    fastcgi,fastcgi又去找php解释器去处理该路径,而php开启了cgi.fix_pathinfo,那么php解释器处
    理这个路径的时候,发现没有aaa.php文件,那么他会找路径中上一层路径的文件作为aaa.php来运行,如是
    乎就找到了web.jpg,将web.jpg当作aaa.php来运行了,所以代码被执行,看到如下效果
    守夜人Jaden-吴
posted @ 2025-04-05 15:28  大智不遇  阅读(24)  评论(0)    收藏  举报