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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 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.文件上传目录设置为不可执行

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

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

相关文章
|
1天前
|
XML JSON 安全
Base64编码原理与在网络传输中的应用
Base64编码原理与在网络传输中的应用
|
1天前
|
网络协议 数据安全/隐私保护 网络架构
计算机网络基础概念与网络通信原理
计算机网络基础概念与网络通信原理
|
1天前
|
安全 网络安全 量子技术
网络安全与信息安全: 漏洞、加密技术与安全意识的融合之道
在数字化时代,网络安全与信息安全成为了全球关注的焦点。本文从数据导向的角度出发,深入分析了网络安全漏洞的成因与影响,探讨了加密技术在保护信息安全中的关键作用,并强调了提升个人与企业的安全意识的必要性。通过引用最新的科研研究、实验证据和权威统计数据,结合逻辑严密的分析,旨在为读者提供一套综合性的网络与信息安全知识框架,以应对日益复杂的网络威胁环境。
5 0
|
1天前
|
机器学习/深度学习 安全 网络安全
利用深度学习优化网络安全:技术分享与实践指南数字时代的守护者:网络安全漏洞、加密技术与安全意识的深度剖析
随着信息技术的飞速发展,网络安全问题日益凸显。传统防护措施面对复杂多变的网络攻击手段逐渐显得力不从心。本文将深入探讨如何通过深度学习技术提升网络安全防护能力,分析其在识别和预防潜在网络威胁方面的有效性,并结合实际案例,为读者提供一套可行的技术实施方案。 在数字化浪潮中,网络安全成为维护信息完整性、保密性和可用性的关键。本文深入探讨了网络安全的三大支柱:网络漏洞的识别与防护、加密技术的演进与应用、以及安全意识的培养与提升。通过分析最新的研究数据和案例,揭示这些要素如何共同构建起防御网络威胁的坚固堡垒。
|
1天前
|
机器学习/深度学习 安全 算法
利用机器学习优化网络安全防御策略
在数字化时代,网络安全威胁日益增多,传统的防御手段已难以应对复杂多变的攻击模式。本文旨在探讨如何通过机器学习技术优化网络安全防御策略,提高防御效率和准确性。文章首先分析当前网络安全面临的挑战,然后介绍机器学习在网络安全中的应用,并通过实际案例展示机器学习如何提升安全防御能力。最后,讨论实施机器学习时需要注意的问题和未来发展趋势。
|
1天前
|
SQL 安全 物联网
网络防御前沿:探索安全漏洞与加密技术
在数字化时代,网络安全已成为维护信息完整性、保障个人隐私和公司资产的关键战场。本文深入探讨了网络安全漏洞的成因与影响,分析了加密技术的演进及其在现代网络防御中的作用,并强调了提升公众和企业安全意识的重要性。通过结合最新的研究成果和实际案例,本文旨在为读者提供一套全面的网络安全知识框架,以应对不断变化的网络威胁。
8 0
|
1天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:漏洞、加密技术及安全意识的深度解析
在数字化时代,网络安全和信息安全的重要性日益凸显。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面,以期为读者提供更全面的知识分享。我们将通过数据支持的观点、科学严谨的分析以及逻辑严密的论证结构,揭示这些主题之间的相互关联性,并提出相应的解决方案。
3 0
|
1天前
|
安全 网络安全 区块链
网络安全漏洞、加密技术与安全意识:保护信息安全的关键因素
在数字化时代,网络安全已成为全球关注的焦点。本文将探讨网络安全漏洞、加密技术和安全意识的重要性,以及它们如何共同作用以保护我们的信息安全。通过深入分析最新的研究数据和案例,我们将揭示网络攻击的常见形式、加密技术的最新发展,以及提升个人和组织安全意识的有效策略。文章旨在为读者提供实用的知识,帮助他们更好地保护自己免受网络威胁。
|
26天前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
43 1
|
11天前
|
安全 物联网 Linux
学习Linux对网络安全的重要性
**学习Linux对网络安全至关重要:** 1. 开源操作系统广泛应用于服务器、网络设备,掌握Linux是安全专家必备技能。 2. Linux内置安全特性,如最小权限和防火墙,加上丰富的安全工具,提供强大保障。 3. 可定制性允许灵活配置,满足安全需求,开源社区提供持续更新和教育资源。 4. 学习Linux能提升攻防能力,用于系统加固和渗透测试,适应跨平台安全场景。 5. 随着云计算和物联网发展,Linux在网络安全中的角色日益关键。
38 3