今天,我们将仔细研究一下上传文件漏洞攻击。这部分是EdgeOne专项练习的一部分。
在这一段之后,我们将不再详细介绍如何购买软件包或配置站点等基本应用程序。在讨论了攻击之后,我们还将介绍一些可以采取的预防措施,以保护您的服务器免受攻击。因此,本文的重点仍然是腾讯云的EdgeOne。
靶场搭建
考虑到攻击别人的服务器是违法的,你需要思考如何更好地保护自己的服务器。出于测试和学习目的,您可以构建一个特殊的射击场来模拟文件上传漏洞攻击。下面是我搭建的环境和一些参考资料,供学习参考。您也可以自行探索相关内容。
使用腾讯云轻量级应用服务器Linux版时,由于环境要求严格,自行搭建可能会出现很多错误。通过拉取别人打包的Docker 镜像来立即部署。
docker pull c0ny1/上传实验室
docker run -d -p 8289:80 c0ny1/upload-labs
启动后,请务必访问腾讯云控制台配置防火墙规则。否则,您可能无法正常访问。您可以将访问地址http://ip:8289替换为您自己的IP地址和端口号。
系统可以正常启动。但是,当我尝试上传文件时,收到一条消息,指出找不到所需的上传目录。要解决此问题,您必须使用Docker 容器控制台手动添加上传目录。
进入后,运行以下命令:
目录上传
chmod 777 上传
一切工作正常,范围设置也很好。学习完毕后不要攻击别人的服务器。这一点非常重要,记住,记住,记住。
文件上传漏洞
射击场共有20个级别,每个级别代表不同的漏洞案例。在此,我们选取几个典型案例与大家分享和借鉴。那么我们现在就开始吧!
upload-labs靶场攻略
为了避免长文本分散您的注意力,我们准备了一个任何人都可以轻松理解的简洁流程图。首先,看这张照片。我想你会发现一切都很简单。我们已经准备好了,请系好安全带。
接下来,所有任务都依赖于上传一个或多个文件来访问服务器配置信息。攻击脚本的设计也非常简单,目标也同样明确。只需通过其他方式访问攻击脚本并运行即可成功。
?php
phpinfo();
?
当我们谈论获取信息的用处时,是否可以用于攻击?实际上,我们的主要目的是运行脚本。脚本说什么并不重要,重要的是它运行顺利。你可以自由替换脚本中的语句,比如像蚁剑这样的一句话脚本来获取shell。这只是为了演示攻击。
从这里我将解释如何使用射击场。 每个页面都有查看源代码和查看提示的功能。如果查看源代码后不知道如何攻击,可以按照提示一步步完成关卡。那么让我们开始吧。
前端页面校验漏洞
我们先看一下源码:
如果你看一下这段代码,你会发现这只是前端的基本后缀检查。
然后,您可以选择修改前端代码以删除此验证步骤并在不依赖工具的情况下上传,或者手动修改请求以将文件后缀更改为.php。让我们从简单的方法开始。
然后删除该文件并保存,然后再次上传脚本文件。
请务必在保存更改后刷新页面,以便界面识别您上传的以.php 结尾的文件。
它无法显示,因为它不是图像。所以右键单击图像并复制路径即可查看。手术很成功。
后端校验文件类型漏洞
当然,即使是最差的公司也不能仅仅依靠前端来进行验证,所以第二阶段开始涉及后端操作。现在我们继续看源码。
后端的主要功能是检索上传文件的类型。要更改文件类型,必须使用Burp Suite 工具拦截文件类型。这里传输的文件类型是通过Content-Type头传递的,具体是application/octet-stream,所以改变文件后缀是不够的。
如果您的系统后台是基于文件类型的,您只需调整文件类型即可满足您的后台验证要求,如下所示。
正如预期的那样,上传继续成功。
对于其余步骤,右键单击图像文件地址将其打开。在下一个级别,您不再需要演示显示PHP 信息,只需验证您的代码是否成功运行即可。
老版本文件后缀
如果您发现无论如何都无法在此级别有效执行验证,那么最好的办法是直接限制可以上传的文件的后缀名。然而,仅仅依靠文件扩展名进行限制也会带来潜在的安全风险。我们来具体分析一下这个问题。
在Web 开发的早期,PHP 文件通常以.php3 结尾。这是因为旧版本的PHP 不直接支持.php,仅支持.php3 后缀。尽管现代PHP 版本不需要任何特定的文件后缀,但出于历史或兼容性原因,某些网站仍然使用.php3 后缀。为了支持这些旧版本的网站,Apache 的默认配置支持解析带有.php3 后缀的PHP 文件。
现在问题很简单,只要上传不在后缀限制数组中的文件就可以了。
利用Apache配置文件
有些人可能已经注意到,当遇到上述情况时,简单的文件扩展名不再免费提供。进入第四阶段需要全面审查和加强该领域的法规。现在让我们仔细看看源代码。
当然,您不必限制自己上传PHP 文件。现在我们可以利用另一个配置文件漏洞。
.htaccess 是用于配置Apache Web 服务器的配置文件,其名称是“Hypertext Access”的缩写。网站管理员可以通过在网站根目录或特定目录中创建.htaccess 文件来配置和控制网站行为,而无需更改主配置文件(例如httpd.conf)。
.htaccess 文件包含各种指令和规则,用于控制对网站的访问、重定向URL、设置自定义错误页面、启用压缩、禁止目录列表、限制访问速率等等。htaccess 文件使网站管理员可以灵活地配置和管理网站,而无需服务器级访问。
请注意,htaccess 文件仅在Apache Web 服务器上有效,它们的配置会影响网站性能,特别是当它们包含复杂规则或需要频繁读取文件时。
接下来,首先创建脚本,然后上传文件。
文件匹配“loudong.jpg”
SetHandler 应用程序/x-httpd-php
/文件匹配
这个语句的意思是,当访问名为loudong.jpg的文件时,Apache Web服务器会将其视为PHP脚本,而不是仅仅将其作为静态文件直接返回给用户。
即使攻击脚本实际上伪装成图像,它也会继续上传jpg 图像。
大小写漏洞
如果发现漏洞,只需添加限制即可解决问题。因此,第五级解决方案是直接禁止.htaccess文件上传。
当然,还有一个问题他没能发现。我们再看一下源代码。
文件名都是小写的,但您应该检查PHP 是否支持大写文件名。您可以尝试直接拦截请求并更改文件名进行测试。
空格漏洞
检查案例并仔细查看源代码后,我发现没有空间限制。如果实际上没有空间限制,则文件扩展名限制也会被禁用。
我们使用Burp Suite 拦截出站请求。默认情况下没有文件名,所以我自己在文件名后面添加了一个空格。
最后文件成功上传。还有许多其他方法可以绕过文件扩展名检查,我不会全部列出。主要问题是代码解析不准确,漏洞之一是可以直接上传脚本文件。
文件包含漏洞
当这个图像不仅仅是一个视觉元素时,它从前面看起来很普通,但实际上在后半部分包含代码。
看这个级别的源码。
如果您只读取前两个字节,则通常会获取图像文件的文件头信息。它包含有关文件类型和格式的重要数据。接下来,打开这三个图像文件并在记事本中编辑它们,看看它们是否有任何共同的特征或属性。
本节还有一件事需要注意。这是一个文件包含漏洞。您知道什么是文件包含漏洞吗?
?php
/*
该页面包含一个文件包含漏洞,用于测试Ema是否可以成功运行。
*/
header(\’Content-Type:text/html;charset=utf-8\’);
$file=$_GET[\’文件\’];
如果(isset($文件)){
包括$文件。
}除此之外{
显示源(__文件__);
}
?
直接使用include 函数而不正确清理或验证$file 参数,允许攻击者制作包含任意文件(包括远程恶意文件)的恶意请求。文件上传后,我们获取了文件地址,尝试了包含漏洞的文件,发现存在此风险。
二次渲染绕过
由于这个关卡的源代码较多,所以我决定只复制并分享关键代码,供大家参考。
//使用上传的图片生成新图片
$im=imagecreatefromjpeg($target_path);
//使用上传的图片生成新图片
$im=imagecreatefrompng($target_path);
//使用上传的图片生成新图片
$im=imagecreatefromgif($target_path);
这一步的主要目的是判断用户上传的图片的格式,并重新生成新的图片。在此过程中处理GIF 图像时应特别小心。 GIF 图像在重新渲染后变化不大。主要原因是压缩算法优化和格式限制是固定的,因此大多数更改仅影响少量数据,不会导致整个图像文件发生较大更改。
流程需要改进。首先,不要随意修改图片文件,先上传下载图片,然后与本地图片进行比较。确定哪些内容没有更改,将代码一一复制并粘贴,并重新定位任何错误。
最后,在这里改一下。
如果上传后继续利用文件包含漏洞:
条件并发竞争
在此阶段,仅对上传的文件进行保存、验证、重命名和移动。如果验证失败,该文件将被删除。虽然这表面上看起来似乎是良性的,但实际上存在许多潜在的漏洞。
首先,文件类型未经验证就保存,然后验证并删除。该漏洞提供了攻击服务器的切入点。 Burp Suite 可用于拦截请求并发起一系列攻击。只要您有权访问执行删除操作之前上传的文件,就可以运行该脚本。现在就采取行动。
成功拦截请求后,下一步就是配置并发请求开发。我们计划以默认并发数10 开始攻击。
在这里观察攻击的效果。只要任何访问成功,攻击就被认为是成功的,尽管通常会及时清除。开始吧。
在解释了如何使用文件上传攻击服务器之后,我们现在将重点了解如何有效防御这些攻击。防御胜于攻击,因此在服务器端实施适当的防护措施非常重要。接下来我们就结合上面的典型案例来讨论一下如何加强您的服务器的安全性。
EdgeOne防护措施
如果程序员无法检查他们编写的代码或者没有能力自行进行代码审计,他们就必须依赖外部保障措施。在这种情况下,仍然建议使用EdgeOne来解决这些问题。我还画了一张图供大家参考,以便大家能更清楚地理解。读完这张图后,问题变得非常简单且易于应用,就像在您的架构中使用可插拔中间件一样。
文件漏洞防护手段
现在我们已经详细介绍了各种攻击方法,让我们看看您应该防范的方面。
无限的文件类型:您可以上传任何类型的文件,包括可执行文件。未检查文件内容:未检查文件内容是否存在恶意代码。无限的文件上传频率:在之前的演示中,我们看到频繁的文件上传会导致条件竞争。
除了上述措施外,还有一件事需要注意。这是文件大小限制。考虑到您拥有自己的服务器资源,可以避免消耗不必要的流量。因此,该领域也需要适当的管理。
接下来,将这些防护措施一一落实。您会发现只需进行最少的调整即可获得最佳的安全结果。
文件敏感后缀检查
如果您上传webshell,文件的内容必须包含您的脚本的内容。因此,您应该检查EdgeOne是否提供相关的检查和验证功能。如果您购买了EdgeOne的标准版,您可以立即上传未经修改的文件,看看是否可以有效拦截。
正常情况下,EdgeOne 应该拦截此类请求,但您应该再次检查示例日志,看看是否确实有未拦截的请求。
当我们意识到这一点时,我们意识到该请求不仅被捕获,而且被识别为保护规则,并且实际上被监视而不是被直接拦截。这很重要,因为默认情况下,EdgeOne 仅监视请求,而不直接拦截它们。为了理解这条规则的具体功能,我们需要进一步考察这条规则的身份。
首先,进入您配置的站点,找到安全防护-网页防护-托管规则-过滤规则ID。
这个问题很麻烦。这是因为示例日志并没有直接显示当前规则ID的具体限制,需要您自己查找。但最终你会找到这些信息。通过这种方式能够识别文件后缀,就无需在处理文件后缀时在前后端编写大量限制性代码。
事实上,之前案例中的文件上传漏洞主要是由于文件后缀问题造成的。 EdgeOne技术可以通过简单的方式为程序员解决代码松散的问题。
请务必关闭相关保护请求的全局监控模式。这允许您单独配置每个规则的拦截方式。所以,关闭全局监控模式。
因此,为了看看我们是否可以有效拦截这些请求,我们再做一个。
我们的业绩是否已经发生了翻天覆地的变化?为什么还是监听模式呢?我觉得应该是可以拦截请求的状态,而不仅仅是监听模式。这就涉及到防护等级的问题。默认设置可能更宽松一些。
接下来,您需要调整保护级别,以确保阻止不应直接访问后端的请求。但是,请记住,如果您需要单独配置规则,则必须采用与父规则相同的方式配置它。让我们仔细看看:
一定!因此,让我们上传文件并检查结果。
这种效应在实际应用中非常重要。剩下的奇怪敏感后缀不再显示,因为最终的拦截结果是一致的。对于企业和个人来说,只需要两个简单的按钮开关操作,极其人性化。
伪文件代码注入检查
尝试绕过扩展名检查会创建一个扩展名为.jpg 的文件,该文件实际上是一个欺骗性的图像文件。首先,让我们验证这个简单的模拟文件是否有效。
如果文件内容实际上是PHP 脚本,则文件后缀设置为.jpg,这不是敏感后缀文件,可能会绕过EdgeOne 的后缀规则检查。所以你可以尝试上传看看是否成功。
尝试没有成功。那么我们就看看他是否被那条保障规则拦截了。
成功绕过敏感后缀保护检查后,接下来需要进一步分析哪些特定规则被绕过。
这种保护非常好,以至于PHP 脚本都被阻止了。
那么,如果你想测试更复杂的伪装文件,比如在看似普通的图像文件中嵌入代码脚本,你的保护规则能够检测到它们吗?在寻找绕过图像重新渲染的方法时,以下我尝试将PHP 代码插入到GIF 文件中,如下所示。
当然,我们是否可以检查是否有办法绕过这个安全措施?但是,该安全措施似乎仍然可以有效地防止它。
查看这些示例日志。由于它们都属于同一个保护规则ID,所以我们不会再次检查它们,但我们会继续考虑其他测试方法。
除了上面的代码注入来阻止图片渲染之外,还有一种方式,就是在没有二次渲染的情况下,直接在图片末尾添加内容。这个操作很简单。让我们看看它是否可以提供额外的保护。
演示中存在一些小故障,但都很好。如果您无法保护自己,也可以联系腾讯客服快速报告情况。我给他们所有的测试文件和网站链接,供他们测试并找出问题所在。
经过长时间的深入沟通和分析,我们终于成功帮助他们发现了问题,他们决定自己解决剩下的问题。
为什么这里没有条件竞争保护的演示?他们不应该添加上传频率规则吗?如果您上传了PHP 脚本并且它在短时间内通过了验证,则可能会发生条件竞争攻击。不知道你还记不记得发动攻击做了什么。首先PHP脚本必须上传成功,但是现在EdgeOne已经拦截了这个脚本,如何才能有效实现后续的上传限速呢?
文件上传速率限制
之前我们谈到了在我们的演示条件下避免争用攻击,但是现在我们为什么要限制上传速率呢?这个限制是为了防止频繁的文件上传导致服务器网络IO过度拥塞。这其实涉及到两个问题。一方面,我们不是在谈论脚本化服务器攻击,但用户可以通过频繁上传文件来占用服务器资源。频繁上传可能会导致您的服务器对其他用户的访问无响应,从而导致网站停机。这种情况非常严重,其影响也可能非常严重。
让我们做一个演示并设置一些限制。我将上传常规图像用于演示目的,因为上传脚本文件将被拦截。同时,我们经常使用Burp Suite 测试我们的文件上传攻击服务器,如图所示。
然后直接启动并发请求。我们计划使用以下测试并发规则进行测试:每秒5、10、15、30 和100 次。首先以每秒10 个并发的速度进行测试,然后尝试每秒100 个并发的速度。
发送多个请求后检查服务器资源的状态。
虽然这里服务器的流量封装增加了,网站还是可以访问的,但是达到了目的,消耗了大量的网站流量。
这次,大家可以看到EdgeOne的统计分析不仅注重网络安全分析,还注重指标分析。您会注意到对您的服务器有大量异常流量请求。遇到这样的情况该怎么办?
请参阅下面的请求分析。如图所示:
首先,通过分析图表,您可以确定哪些IP 地址被请求以及哪些URL 被频繁请求。这些信息是制定有效策略的基础。
尽管此方法不是最佳方法,但您可以将客户的IP 地址列入黑名单,以限制对您网站的访问。虽然这种方法比较笨重,但至少是可行的,因为客户的IP可能会改变,配置必须不断更新。
接下来,将IP地址添加到黑名单中。这提供了额外的安全性。当然,您可以根据个人需要添加更多的IP地址段。在此示例中,出于演示目的,我们仅添加了一个IP 地址。
好的,已保存。然后发送请求并检查请求是否被成功拦截。
成功拦截所有请求后,您可以再次查看示例日志。
是的,这个规则ID就是您之前生成的唯一标识符。
考虑到这一点,第二种方法是限制请求的频率。
这里的限制太宽松了,需要收紧一些。你不能那么快提问。
如果您继续发送并发请求进行测试,您将看到EdgeOne 可以识别后续请求,并且可以使用JavaScript 质询脚本,而不是直接响应服务器。
这也可以在检查样本日志时得到验证。
这是一个简单的全局限制。当然,一些企业用户的网站可能需要允许其客户进行大量点击,因此这是需要考虑的。但不用担心。这个过程是可以精确控制的。接下来,了解如何设置特定URL 的请求限制。根据指标分析异常请求,并制定相应的控制策略。您可以根据您的个人需求设置自己的限制。
您可以在此处设置有关文件上传路径的所有限制。您应该仔细检查所有这些路径是否都被完全阻塞。例如,/Pass-10/index.php。
看来他们成功地阻止了潜在的攻击。这里先说一下上传速度的问题。
文件大小限制
有速度限制,并且无法上传太大的文件。由于您只需要上传照片而不是视频,因此设置一个限制(例如2M 或更少)是有意义的。这个范围应该可以满足大多数需求。让我们仔细看看。请注意,此操作是在站点加速层中执行的,而不是在Web保护层中执行的。
为了使演示更容易理解,我们将使用差异化配置而不是全局配置。这意味着根据您的业务需求使用特定路径单独配置文件上传,如图所示。
当我尝试上传一个非常大的文件来测试上传过程时。
结果,感觉网站被屏蔽了,无法访问。您似乎需要设置一个自定义响应页面,以便您的访问者不会错误地认为您的网站不稳定。
现在您需要设置响应页面。内容非常简洁明了,完全按照官网提供的示例进行呈现。
上述页面已创建,但尚未绑定413状态码。接下来,让我们进一步细化我前面提到的规则。参见下图。
再检查一下它的效果,你可以根据自己的需要稍微美化一下,让外观更加漂亮,如下图所示。
截至目前,所有潜在的文件上传漏洞攻击均已得到有效防范,但路还很长,实践需要耐心,年轻人还需要不断努力。
总结
在本文中,我们将深入探讨文件上传漏洞攻击的各种示例、防范措施以及设置攻击范围时的实际操作。从前端和后端验证漏洞到利用Apache配置文件和文件包含中的漏洞的攻击方法,每一步都体现了安全防护的重要性。
学习和实践过程不仅关注如何进行攻击,还将关注如何保护公司的服务器免受此类攻击。我们以EdgeOne作为示例解决方案,演示了如何利用EdgeOne提供的防护规则来有效防御文件上传漏洞。
无论是靶场建设过程中的具体操作,还是攻击案例的分析,安全意识和防护措施的落实都极其重要。我们希望通过本文,读者能够更好地理解和应用这些安全原则,以保护他们的网络和服务器免受攻击。
在网络安全的道路上,学习永无止境。让我们不断提高自身技能,共同努力确保网络环境的安全稳定。
作者:勤奋小宇
链接:https://juejin.cn/post/7395385447294124070
以上#EdgeOne安全特别实践:上传文件漏洞利用详解及防范措施相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93938.html