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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 网络安全-文件上传漏洞的原理、攻击与防御

介绍

文件上传漏洞是指用户上传了一个可执行的脚本文件(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.文件上传目录设置为不可执行

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

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

相关文章
|
5天前
|
存储 安全 网络协议
网络安全的盾牌与剑:漏洞防御与加密技术
【9月更文挑战第10天】在数字时代的浪潮中,网络安全成为守护信息资产的盾牌与剑。本文将探讨网络安全的两个核心议题:网络漏洞的防御策略和加密技术的应用。通过深入浅出的分析,我们将了解如何识别和防范安全威胁,以及如何利用加密技术保护数据安全。文章旨在提升公众的安全意识,为打造更安全的网络环境提供实践指南。
29 11
|
6天前
|
SQL 监控 安全
数字堡垒之下:网络安全的现代挑战与防御策略
在这个数字信息日益增长的时代,网络安全已成为保护个人隐私和企业资产的关键战场。本文将深入探讨网络安全中常见的漏洞、先进的加密技术以及提升安全意识的重要性。通过分析最新的网络攻击案例和防御措施,我们旨在为读者提供一套实用的网络安全知识框架,帮助大众构建更为坚固的数字防线。
23 7
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深度剖析深度神经网络(DNN):原理、实现与应用
本文详细介绍了深度神经网络(DNN)的基本原理、核心算法及其具体操作步骤。DNN作为一种重要的人工智能工具,通过多层次的特征学习和权重调节,实现了复杂任务的高效解决。文章通过理论讲解与代码演示相结合的方式,帮助读者理解DNN的工作机制及实际应用。
|
2天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【9月更文挑战第14天】网络协议是机器间交流的约定格式,确保信息准确传达。主要模型有OSI七层与TCP/IP模型,通过分层简化复杂网络环境。IP地址全局定位设备,MAC地址则在本地网络中定位。网络分层后,数据包层层封装,经由不同层次协议处理,最终通过Socket系统调用在应用层解析和响应。
|
3天前
|
云安全 缓存 网络协议
如何防护DDoS攻击,筑牢网络安全防线
随着信息技术的飞速发展,网络已成为现代社会不可或缺的一部分,极大地便利了个人社交和商业活动。然而,网络空间在创造无限机遇的同时,也潜藏着诸多威胁,其中分布式拒绝服务攻击(DDoS,Distributed Denial of Service)以其高破坏力和难以防范的特点,成为网络安全领域的一大挑战。本文将从DDoS攻击的原理出发,详细探讨如何有效防护DDoS攻击,以筑牢网络安全防线。
|
3天前
|
SQL 安全 网络安全
网络安全的盾牌与矛:漏洞防御与加密技术
【9月更文挑战第12天】在数字时代的浪潮中,网络安全成为保护信息资产不可或缺的防线。本文深入探讨了网络安全的核心问题——安全漏洞及其防范措施,同时对加密技术进行了详细解读,旨在提高公众的安全意识,并分享实用的防护策略。从基础概念到实际操作,我们一步步揭示如何在日益复杂的网络环境中保护自己的数据不受威胁。
|
3天前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
17 2
|
6天前
|
存储 SQL 安全
网络安全的盾牌:漏洞防御与加密技术解析
【9月更文挑战第9天】在数字时代,网络安全的重要性日益凸显,它不仅是保护个人隐私和数据安全的屏障,也是维护社会稳定和经济繁荣的关键。本文将深入探讨网络安全中的漏洞防御策略、加密技术的运用以及提升公众安全意识的必要性,旨在通过知识分享,增强大众对网络威胁的防范能力,共同构建更安全的网络环境。
|
1天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第14天】本文将深入探讨网络安全与信息安全的重要性,包括网络安全漏洞、加密技术以及安全意识等方面。我们将通过实例和代码示例,帮助读者更好地理解网络安全的基本概念和应用,以及如何提高自己的网络安全意识和技能。
|
1天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第14天】在数字化时代,网络安全和信息安全已经成为了我们生活中不可或缺的一部分。本文将介绍网络安全的基本概念,包括网络攻击者的动机和常见类型,以及如何通过加密技术和提高安全意识来保护我们的信息。我们还将探讨一些常见的网络安全漏洞,并提供一些实用的防护措施。无论你是个人用户还是企业,都可以从中获得有价值的信息。
19 12