修复路径穿越、任意文件写入漏洞

这篇具有很好参考价值的文章主要介绍了修复路径穿越、任意文件写入漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

修复路径穿越、任意文件写入漏洞

背景

前段时间随手写的一个文件上传服务,在公司的渗透测试下漏洞百出,其中少不了路径穿越和任意文件写入漏洞。其实这两个漏洞的修复并不复杂,只要对入参进行两个条件的校验就可以了。

问题分析

先来了解一下这两个漏洞是什么

路径穿越漏洞

路径穿越(Path Traversal)是一种常见的安全漏洞,攻击者通过该漏洞可以访问系统中未授权的文件或目录。修复该漏洞的方法包括以下几个步骤:

  1. 验证输入:首先,需要对所有输入进行严格的验证。攻击者通常会利用路径穿越漏洞通过输入特定字符来访问系统中的敏感文件或目录。因此,在代码中验证输入是非常重要的。
  2. 检查路径:在使用输入来构造路径之前,需要检查路径是否存在于预期的目录中。如果路径指向系统中未授权访问的目录,应该立即停止程序的执行,并返回错误。
  3. 使用绝对路径:为了避免路径穿越攻击,最好使用绝对路径而不是相对路径。相对路径可能会导致程序访问不想访问的目录。使用绝对路径可以确保程序只访问所期望的目录。
  4. 限制访问:最后,为了保护系统中的文件和目录,应该限制程序的访问权限。程序只应该访问必要的文件和目录,不应该访问不需要的文件或目录。

通过上述步骤,可以有效修复路径穿越漏洞,并提高系统的安全性。

任意文件写入漏洞

任意文件写入漏洞(Arbitrary File Write)是一种常见的安全漏洞,攻击者可以利用此漏洞将任意数据写入到服务器上的任意位置,从而可能导致服务器上的敏感信息泄漏或系统被控制。

攻击者通常利用应用程序中存在的缺陷或漏洞来进行攻击,例如:

  • 输入验证不充分:如果应用程序没有对用户输入的数据进行充分的验证和过滤,攻击者可以将恶意代码或脚本注入到应用程序中,从而使其执行任意操作,包括写入任意文件。
  • 路径遍历攻击:攻击者可以利用路径遍历漏洞来绕过应用程序的安全检查,从而写入到系统上的任意文件,例如 /etc/passwd 文件。
  • 错误的文件权限:如果应用程序具有写入某些目录的权限,而该目录的权限过于宽松(例如,目录的权限为777),攻击者可以将任意数据写入该目录。

为了防止任意文件写入漏洞,开发人员可以采取以下几个措施:

  • 输入验证:开发人员应该对输入的数据进行充分的验证和过滤,以避免攻击者能够注入恶意代码或脚本。
  • 文件权限控制:开发人员应该限制应用程序的访问权限,例如仅允许访问特定目录,并使用适当的文件权限设置,以确保只有授权用户才能访问该目录。
  • 安全编程实践:开发人员应该遵循安全编程实践,例如使用编程语言提供的安全函数,如 Java 中的 File.createTempFile() 或 Python 中的 tempfile.mkstemp(),以确保应用程序在创建临时文件时安全可靠。
  • 日志监控:监控应用程序的访问日志,以及服务器上的文件系统活动,以及对文件系统进行的任何非正常操作,例如对未知目录的写入操作。这有助于尽早发现潜在的任意文件写入漏洞并进行修复。

说白了,路径穿越就是别人攻击你的时候,文件名带有/\../这类的相对路径,篡改了你保存文件的目录;任意文件写入就是,攻击你的服务器时,比如说你原先只能上传图片的,它给你上传了一个shell脚本到服务器的敏感位置,那你的数据安全就别妄想了。

问题解决

基于上面的分析,我们很容易想到了,对传入的文件名进行两道校验:

  • 文件名只能包含数字、英文(大小写)、下划线、横杠、小数点
  • 后缀只能支持指定的文件类型

我们来编码实现一下这两个功能

public class UploadCheckUtil {
    // 检查文件名是否合法
    public static boolean checkFileName(String fileName) {
        String reg = "^[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z0-9]+$";
        Pattern p = Pattern.compile(reg);
        return p.matcher(fileName).find();
    }
    // 检查文件类型
    public static boolean checkSuffix(String fileName) {
        int index = fileName.lastIndexOf(".");
        String suffix = index == -1 ? "" : fileName.substring(index + 1);
        String reg = "(jpg|jpeg|gif|png|mp4|flv|avi|rm|wmv)";
        Pattern p = Pattern.compile(reg);
        return p.matcher(suffix).find();
    }
}

^[a-zA-Z0-9][a-zA-Z0-9._-]*\.[a-zA-Z0-9]+$这个正则表达式的含义是:

  • ^ 和 $ 表示匹配整个字符串,不能有额外的字符;
  • [a-zA-Z0-9]+ 表示文件名由至少一个字母或数字组成;
  • ([.-][a-zA-Z0-9]+)* 表示文件名中可以包含多个分隔符(.、、-),以及一个或多个字母或数字;
  • . 表示文件名和文件类型之间有一个点号;
  • [a-zA-Z0-9]+ 表示文件类型由至少一个字母或数字组成。
    这个正则表达式可以匹配例如 test.png、test_image.jpg、document.txt 这样的文件名,但不能匹配 …/test.png 这样的包含路径遍历符号的文件名。可能有些同学就很疑惑我为什么都是写0-9、a-z、A-Z这种,通配符我是不是不懂,质疑我\w\d是否有了解过。那是因为如果用通配符攻击者可能会将路径信息编码成文件名中的特殊字符。如果文件名可为中文字符的话,可添加\u4e00-\u9fa5\u4e00表示中文第一个字符,/u9fa5表示中文最后一个字符。

(jpg|jpeg|gif|png|mp4|flv|avi|rm|wmv)匹配的是其中的任意一个短语。你可以替换成你实际开发需要限制的文件类型。

在使用时,我们只需要把上传的文件名进行传入,当两个校验都通过时,方可进行transfer,否则抛出文件名不合规的异常即可。

这个正则表达式可以有效地预防路径穿越攻击,但并不能彻底地预防路径穿越攻击。

总结

正则表达式的作用主要是限制上传的文件名只包含特定的字符和格式,从而减少路径穿越攻击的风险。但是,如果攻击者利用其他漏洞(例如文件上传的身份验证绕过漏洞)来绕过这个限制,仍然可以上传包含路径遍历符号的恶意文件。

因此,防止路径穿越攻击需要综合考虑多种安全措施,包括但不限于:

对上传的文件进行验证,确保文件类型和大小符合预期。

对上传的文件进行存储限制,防止上传可执行文件或恶意脚本。

对上传的文件进行安全性检查,例如扫描病毒、检查文件内容是否包含恶意代码等。

对上传的文件进行隔离,避免上传的文件对其他文件和系统资源产生影响。

综上所述,虽然正则表达式可以有效地预防路径穿越攻击,但是仍然需要综合考虑多种安全措施来保护系统安全。文章来源地址https://www.toymoban.com/news/detail-435212.html

到了这里,关于修复路径穿越、任意文件写入漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx漏洞修复之目录穿越(目录遍历)漏洞复现及修复

    前言 Nginx是一个高性能的HTTP和反向代理服务器,经常被做为反向代理,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。 漏洞出现在服务器的静态文件中。如果静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名 。

    2024年02月04日
    浏览(43)
  • CVE-2021-41773/42013 apache路径穿越漏洞

    影响范围 CVE-2021-41773 Apache HTTP server 2.4.49 CVE-2021-42013 Apache HTTP server 2.4.49/2.4.50 漏洞原理 Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码,然后判断是否存在…/的路径穿越符,如下所示: 当检测到路径中存在%字符时,如果紧跟的2个

    2024年02月08日
    浏览(39)
  • Apache Http Server 路径穿越漏洞复现(CVE-2021-41773)

    Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器软件,可以在大多数电脑操作系统中运行。由于其跨平台和安全性,被广泛使用,是最流行的 Web 服务器软件之一。它快速、可靠并且可通过简单的 API 扩展,将 Perl/Python 等解释器编译到服务器中。

    2024年02月08日
    浏览(78)
  • 【漏洞复现】Apache_HTTP_2.4.50_路径穿越漏洞(CVE-2021-42013)

    感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 说明 内容 漏洞编号 CVE-2021-42013 漏洞名称 Apache HTTP_2.4.50_路径穿越漏洞 漏洞评级 高危 影响范围 2.4.49 2.4.50 漏洞描述 CVE-2021-42013是由CVE-2021-41773的不完整修复导致的漏洞,攻击者可以使用路径遍历攻击将

    2024年02月05日
    浏览(34)
  • WordPress博客出现的绝对路径泄露漏洞及修复方法

    某天用360的漏洞检测,总共用了56分钟才检测完。 检测结果如图: 漏洞修复 漏洞文件:(根据报警信息,修改这些文件,并不是每个人都一样) 1、/wp-includes/registration-functions.php 2、/wp-admin/admin-functions.php 修复方法一:在以上文件的的头部 error_reporting(0); 修复方法二:找到

    2023年04月18日
    浏览(36)
  • Web漏洞-任意文件读取漏洞

    任意文件读取漏洞 原理 任意文件读取是属于文件操作漏洞的一种,通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感文件,正常读取的文件没有经过校验或者校验不严格,用户可以控制这个变量或者

    2024年02月13日
    浏览(47)
  • 渗透测试漏洞原理之---【任意文件读取漏洞】

    1、概述 一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露; 任意文件读取大多数情况是由

    2024年02月10日
    浏览(50)
  • 【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

      首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识 超详细的网络安全笔记 分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记​编辑https://m.tb.cn/h.5JdFcih?tk=OuVrWRl9vMx%20CZ3457 https://m.tb.cn/

    2024年02月07日
    浏览(48)
  • 任意文件读取及漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取很多情况是由于其他漏

    2024年02月09日
    浏览(55)
  • 任意文件读取和漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是漂代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取大多数情况是由于其他

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包