网络安全-文件上传漏洞的原理、攻击与防御

简介: 网络安全-文件上传漏洞的原理、攻击与防御

介绍

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

分类

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

上传-javascript检测

简介

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

原理

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

攻击

Firebug插件删除判断函数

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

tupian.php

<?php
    echo phpinfo();
?>

2020062310470442.png

                                                  js检测到不符合要求

F12查看代码

2020062310470442.png

                                                   checkFileExt

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

2020062310470442.png

                                                    删除后

我们再次上传tupian.php

2020062310470442.png

                                                      文件上传成功

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

2020062310470442.png

                                      代码已运行

可以看到代码已经运行。

中间人攻击-burpsuite拦截

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

防御

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

上传-MIME检测

简介

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

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

text/plain
text/html
image/jpeg
image/jpg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

攻击

中间人攻击-burpsuite拦截

2020062310470442.png

                                           burpsuite拦截

2020062310470442.png

                                         修改Content-Type

2020062310470442.png

                                                  Forward

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

防御

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

上传-后端文件格式检测

简介

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


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

型 二进制值
JPG FF D8 FF E0 00 10 4A 46 49 46
GIF 47 49 46 38 39 61
PNG 89 50 4E 47
TIF 49 49 2A 00
BMP 42 4D

原理

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

攻击

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

2020062310470442.png

                                               图片格式检测

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

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

2020062310470442.png

                                               2.PNG

2020062310470442.png

                                                      ca.png

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

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

2020062310470442.png

                                         生成新图片

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

2020062310470442.png

                                                    上传成功

image.png

                                                     打开

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

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

image.png

                                                       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状态。

攻击

image.png

                                              php版本调整为5.3.29

image.png

                                    参数设置

正好被水印挡住了,挡住的部分就是参数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的一个可能的安全漏洞 - 风雪之隅

绕过

前端绕过

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

黑名单绕过

使用更多后缀

jsp jspx jspf

asp asa cer aspx

php php3 php4 pht phtml

后缀大小写绕过

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

1.pHP

后缀双写绕过

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

1.phphpp

空格绕过

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

1.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时,解析器就会认为字符串已经读取完毕

1.php%00a.jpg

十六进制的0x00也可

文件头检查绕过

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

条件竞争绕过

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

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

解析绕过

                                        解析漏洞

image.png

防御

.文件类型判断

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

2.文件重命名

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

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

相关文章
|
人工智能 运维 安全
从被动防御到主动免疫进化!迈格网络 “天机” AI 安全防护平台,助推全端防护性能提升
迈格网络推出“天机”新版本,以AI自学习、全端防护、主动安全三大核心能力,重构网络安全防线。融合AI引擎与DeepSeek-R1模型,实现威胁预测、零日防御、自动化响应,覆盖Web、APP、小程序全场景,助力企业从被动防御迈向主动免疫,护航数字化转型。
从被动防御到主动免疫进化!迈格网络 “天机” AI 安全防护平台,助推全端防护性能提升
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
322 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
监控 安全 Devops
DevOps 流水线的网络安全盲区与防御策略
在软件研发中,DevOps流水线加速了开发与交付,但也带来严重安全风险。自动化节点和第三方集成成为攻击入口,凭证泄露、供应链渗透、配置错误和依赖混乱等问题频发。企业需构建全流程安全体系,嵌入自动化安全策略,强化访问控制与监控,提升全员安全意识,实现效率与安全的协同发展。
821 1
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
757 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
XML 安全 网络安全
Nipper 3.7.0 Windows x64 - 网络设备漏洞评估
Nipper 3.7.0 Windows x64 - 网络设备漏洞评估
369 0
Nipper 3.7.0 Windows x64 - 网络设备漏洞评估
|
SQL 安全 网络安全
网络安全防御矩阵:从云防火墙流量清洗到WAF语义分析的立体化防护
在数字化浪潮中,网络安全日益重要。云防火墙依托云计算技术,提供灵活高效的网络防护,适用于公有云和私有云环境;Web应用防火墙专注于HTTP/HTTPS流量,防范SQL注入、XSS等攻击,保护Web应用安全。两者结合使用可实现优势互补,构建更强大的网络安全防线,满足不同场景下的安全需求。
703 1
|
SQL 监控 安全
网络安全与信息安全:漏洞、加密与安全意识
随着互联网的迅猛发展,网络安全和信息安全问题日益受到关注。本文深入探讨了网络安全漏洞、加密技术以及提高个人和组织的安全意识的重要性。通过分析常见的网络攻击手段如缓冲区溢出、SQL注入等,揭示了计算机系统中存在的缺陷及其潜在威胁。同时,详细介绍了对称加密和非对称加密算法的原理及应用场景,强调了数字签名和数字证书在验证信息完整性中的关键作用。此外,还讨论了培养良好上网习惯、定期备份数据等提升安全意识的方法,旨在帮助读者更好地理解和应对复杂的网络安全挑战。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
622 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
463 10
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
426 10