【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

admin 2023年3月6日20:22:07评论29 views字数 3658阅读12分11秒阅读模式

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

网安教育

培养网络安全人才

技术交流、学习咨询




01
介绍


文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。



02
分类


根据简介,主要分为上传(客户端)、解析(服务端)两大类。


上传-javascript检测


简介

通过js代码,对文件后缀进行判断。


原理

一般使用白名单或黑名单的方式,判断文件后缀,根据后缀决定用户是否上传。


攻击

Firebug插件删除判断函数

使用靶机pikachu做例子,直接通过F12修改。

tupian.php

1<?php
2    echo phpinfo();
3?>


【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

js检测到不符合要求

F12查看代码

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


checkFileExt

客户端通过onchange实践的checkFileExt函数进行检测,我们删除掉调用这个函数的部分。

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


删除后

我们再次上传tupian.php

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


文件上传成功

可以看路径,我们修改上方的url,进行访问。

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


代码已运行

可以看到代码已经运行。


中间人攻击-burpsuite拦截


文件名符合规则,使用burpsuite拦截后,修改文件后缀即可。方法类似下方MIME攻击

防御

上传无法防御,可以进行文件重命名。


上传-MIME检测


简介

js的检测基本没有了,开始使用后端代码进行检测,虽然进行MIME检测是使用的后端代码,但是,依然是从客户端获取的,可以从客户端修改,我还是归于上传这一类了。

简单来说,在请求头中Content-Type:type/subtype来表明类型,常见的有

 1text/plain
2text/html
3image/jpeg
4image/jpg
5image/png
6audio/mpeg
7audio/ogg
8audio/*
9video/mp4
10application/*
11application/json
12application/javascript
13application/ecmascript
14application/octet-stream


攻击

中间人攻击-burpsuite拦截

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


burpsuite拦截

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

修改Content-Type

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

Forward

可以看到发送过去了,后序验证同上,不再重复截图。


防御

上传无法防御,可以进行文件重命名。


上传-后端文件格式检测


简介

一些后端代码含有一些函数,能够判断文件类型,获取文件的一些信息。以php为例,php的getimagesize函数可以获取图像的一些信息,如果不是图像,那么无法获取信息,就会报错。

有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


原理

如果你学过图像相关的课程,比如信息隐藏这门课,会使用Matlab读取图像,进行信息隐藏,你就会知道图像的一些格式,符合格式的话就是那个类型的文件,一般是头部的一些字节。我们通过将恶意代码前面添加其他类型文件的头部就可以伪造成另一个类型,进而绕过检测。


攻击

我们修改tupian.php为tupian.php.jpg,进行上传。

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

图片格式检测

可以看到,图片没有办法上传,虽然后缀对,但是内部是不正确的。

我们使用Linux中的xxd或od命令来查看.PNG或.png图片的信息(博主虽然是在Windows中,但是使用的是cygwin)。

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

2.PNG

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

ca.png

可以看到文件前面是一样的。

使用cmd命令 copy /b CA.png + tupian.php tupian.png

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

生成新图片

目录下会生成新图片tupian.png,而且符合png格式,但是在图片后面是php代码。

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

上传成功

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

打开

图片上传成功,但是打开后还是图片。

我们再使用之前的文件包含漏洞就可以了,注意url。

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

php代码运行成功

php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。

jsp引擎则可能会解析 jspx / jspf / jspa / jsw / jsv / jtml 等后缀

asp支持 asa / asax / cer / cdx / aspx / ascx / ashx / asmx / asp{80-90} 等后缀。

除了这些绕过,其他的后缀同样可能带来问题,如 vbs / asis / sh / reg / cgi / exe / dll / com / bat / pl / cfc / cfm / ini 等。


防御

若没有文件包含漏洞,问题不大,否则无法防御。


上传-文件截断


简介

php %00截断,由于00代表结束符,00后面的所有字符都会删除掉,发生在php5.3.4之前版本,php的magic_quotes_gpc为OFF状态。


攻击

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

php版本调整为5.3.29

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

参数设置

正好被水印挡住了,挡住的部分就是参数magic_quotes_gpc。


解析-Apache文件解析


一个文件可以有多个后缀,如:lady_killer.txt.png.mp3,在Windows中自然是认为这是mp3文件,也就是说最后的后缀生效。但是,Apache却是从右向左读后缀,不认识的跳过继续读,前面的文件就认为是图片,如果没有配置mp3后缀的话。因此,对于tupian.php.xxx就会认为这是php文件。类型的定义在Apache/conf/mime.types中。


解析-IIS文件解析


IIS 6也出现截断攻击,截断字符为";"。由于phpStudy没有这个版本,太老了,不想去实现了,知道下就行了。


解析-PHP CGI路径解析


没找到了2010年的cve,可能是提交的bug吧,就是路径为evil.jpg/1.php时,Nginx会把evil.jpg当做php文件交给php运行。

Nginx + PHP CGI的一个可能的安全漏洞 - 风雪之隅


03
绕过


前端绕过


通过抓包提交,绕过前端js检测,删除对js验证脚本的调用,使其不能对上传的文件类型做检测,从而达到绕过


黑名单绕过


使用更多后缀

1jsp jspx jspf
2
3asp asa cer aspx
4
5php php3 php4 pht phtml


后缀大小写绕过

由于windows不区分大小写,后端校验未使用strtolower等函数将文件后缀大小写统一处理,导致黑名单不完整而绕过

11.pHP


后缀双写绕过

后端过滤时,使用了preg_replace等替换函数将php关键字替换为空,但是却没有循环替换,导致前面的ph和后面的p重新组合成php,从而导致绕过

11.phphpp


空格绕过

由于Windows处理文件时,会自动删除文件后缀带有的空格和点,从而导致绕过。

11.php


后面有空格


::$DATA绕过

Windows的一种流文件格式,上传这种格式流文件格式的同时会在相同目录下生成一个含有相同内容宿主文件


MIME绕过

修改Content-Type中为允许的类型,以下为常见MIME类型

GIF image/gif

JPG image/pjpeg image/jpeg

ZIP application/x-compressed application/octet-stream

JSP text/html

EXE application/octet-stream


%00截断绕过

PHP<5.3.29,且GPC关闭时,%00在URL中充当结束符,当解析到%00时,解析器就会认为字符串已经读取完毕

11.php%00a.jpg


十六进制的0x00也可


文件头检查绕过

例如,仅允许上传图片,通过文件头来判断,这时可以将恶意代码拼接到图片后面


条件竞争绕过

有的文件上传功能是先将文件下载到服务器,如果是有问题的就删除,我们可以利用这一逻辑漏洞,不断上传文件,即可访问。

可查看文章CTF-【NSCTF 2015】WEB11 条件竞争


解析绕过

解析漏洞

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


04
防御


1.文件类型判断

后缀白名单,MIME类型判断结合

2.文件重命名

3.文件上传目录设置为不可执行


【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

版权声明:本文为CSDN博主「lady_killer9」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/lady_killer9/article/details/107997034

版权声明:著作权归作者所有。如有侵权请联系删除


开源聚合网安训练营

战疫期间,开源聚合网络安全基础班、实战班线上全面开启,学网络安全技术、升职加薪……有兴趣的可以加入开源聚合网安大家庭,一起学习、一起成长,考证书求职加分、升级加薪,有兴趣的可以咨询客服小姐姐哦!

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

加QQ(1005989737)找小姐姐私聊哦



精选文章


环境搭建
Python
学员专辑
信息收集
CNVD
安全求职
渗透实战
CVE
高薪揭秘
渗透测试工具
网络安全行业
神秘大礼包
基础教程
我们贴心备至
用户答疑
 QQ在线客服
加入社群
QQ+微信等着你

【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


我就知道你“在看”
【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御


原文始发于微信公众号(开源聚合网络空间安全研究院):【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月6日20:22:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞解析】一文读懂文件上传漏洞的原理、攻击与防御https://cn-sec.com/archives/1254170.html

发表评论

匿名网友 填写信息