WEB安全漏洞之路径遍历、跳转等漏洞解析

devtools/2024/12/27 2:46:29/

1. 路径遍历漏洞(Path Traversal Vulnerability)

路径遍历漏洞(又叫目录遍历漏洞)是指攻击者通过操控文件路径,使得应用访问服务器上未授权的文件或目录。攻击者通常通过操控文件路径中的 ../ (路径上移符号)来绕过访问控制,获取服务器上的敏感文件。

案例:路径遍历漏洞

假设有一个 Web 应用提供下载文件的功能,用户通过 URL 提供文件名来下载文件。代码示例可能如下:

import osdef download_file(filename):base_path = '/var/www/files/'file_path = base_path + filenamewith open(file_path, 'rb') as f:return f.read()

攻击方式:攻击者可以通过 URL 改变文件路径,例如:

https://example.com/download_file?filename=../../../../etc/passwd

这将导致系统尝试读取 /etc/passwd 文件,这是一个 Linux 系统上的敏感文件,包含用户账户信息。

防御手段
  • 路径过滤:确保请求的文件路径不能包含 ../..\ 等绕过目录访问的路径。

    def sanitize_path(filename):# 过滤掉路径穿越字符if '..' in filename or filename.startswith('/'):raise ValueError("Invalid file path")return filenamedef download_file(filename):filename = sanitize_path(filename)base_path = '/var/www/files/'file_path = os.path.join(base_path, filename)with open(file_path, 'rb') as f:return f.read()
    
  • 使用绝对路径:避免依赖用户输入构建文件路径,而是通过服务器端事先定义的安全路径来定位文件。

  • 文件存储限制:限制用户可访问的文件目录,确保不允许访问 Web 服务器的敏感文件(如 /etc//var/)。

  • 操作系统级安全措施:确保服务器上的文件系统权限配置正确,仅允许应用程序访问其需要的文件目录。


2. 跳转漏洞(Redirect Vulnerability)

跳转漏洞是指攻击者能够控制 Web 应用的跳转行为,从而将用户重定向到恶意网站或页面。常见的攻击方式是利用 LocationHTTP 301HTTP 302 等 HTTP 跳转功能。

案例:跳转漏洞

假设一个 Web 应用允许用户输入回调 URL,系统在某些操作后会跳转到该 URL。

import urllib.parsedef redirect_user(url):safe_url = urllib.parse.urlparse(url)if safe_url.netloc != 'example.com':raise ValueError("Invalid redirect URL")# 重定向到指定 URLreturn f"Redirecting to: {url}"

攻击方式:如果没有对 URL 进行严格验证,攻击者可能通过以下 URL 向应用提交:

http://example.com/redirect?url=http://evil.com

如果应用直接跳转到 http://evil.com,攻击者就可以利用这一点来钓鱼攻击、传播恶意软件等。

防御手段
  • 白名单校验:对所有用户提供的 URL 进行白名单校验,确保重定向只发生到预先允许的安全域名或路径。

    allowed_domains = ['example.com', 'trusted.com']def redirect_user(url):safe_url = urllib.parse.urlparse(url)if safe_url.netloc not in allowed_domains:raise ValueError("Invalid redirect URL")return f"Redirecting to: {url}"
    
  • 避免直接跳转:尽量避免在用户输入的 URL 上进行重定向,或者在跳转之前让用户确认目标地址。

  • 使用 GET 请求代替 POST:避免使用 URL 进行跳转。通过安全的参数传递机制,例如 POST 请求,通过后端进行处理,而不是客户端直接跳转。

  • 登录/认证跳转保护:在用户登录后重定向时,确认目标地址的合法性,避免跳转到不安全的第三方页面。


3. SSRF(服务器端请求伪造漏洞,Server-Side Request Forgery)

SSRF 漏洞允许攻击者通过精心构造的请求伪造服务端向内部或外部发起请求。通过 SSRF,攻击者可以让服务器发起请求到攻击者控制的目标,甚至可能访问内网资源。

案例:SSRF 漏洞

假设一个 Web 应用允许用户输入 URL,并让服务器向该 URL 发起请求,获取并返回其内容。

import requestsdef fetch_data(url):response = requests.get(url)return response.text

攻击方式:攻击者可以通过以下方式构造恶意 URL,访问本地服务器或内部网络资源:

http://example.com/fetch_data?url=http://localhost:8080/admin

如果服务器内网没有严格的访问控制,攻击者就能通过该漏洞访问敏感的内网资源,甚至执行进一步的攻击。

防御手段
  • 限制外部请求:限制服务器仅能访问预定义的、信任的外部资源,并禁止访问本地网络或内部资源(如 localhost127.0.0.1)。

    def fetch_data(url):if 'localhost' in url or '127.0.0.1' in url:raise ValueError("Access to local network is restricted")response = requests.get(url)return response.text
    
  • 白名单策略:对所有外部请求进行 URL 白名单过滤,只有信任的 URL 或 IP 地址才能被访问。

  • 请求头过滤:对请求头进行过滤,确保没有恶意的 HostX-Forwarded-For 头部。

  • 内部网络隔离:确保 Web 服务器与内部服务(如数据库、管理服务)之间进行网络隔离,防止内部服务被暴露给外部请求。


4. 短信/邮件炸弹/暴力破解

短信/邮件炸弹是指攻击者通过大量发送垃圾短信或邮件来使目标系统瘫痪。暴力破解是指通过不断尝试各种可能的用户名和密码组合,强行破解用户账户的密码。

案例:短信/邮件炸弹

假设一个 Web 应用提供短信/邮件通知功能,攻击者可以通过大量请求发送短信或邮件,导致服务被滥用。

攻击方式:攻击者通过脚本或工具不断向目标系统发送请求,触发大量的短信或邮件:

import requestsdef send_sms(phone_number, message):requests.post('https://sms-service.com/send', data={'phone': phone_number, 'message': message})

攻击者可以循环调用该 API,向目标发送大量短信。

防御手段
  • 验证码与限流:为每个请求增加验证码,避免机器人滥用接口。同时实施限流(rate limiting),限制每个 IP 或每个账户的请求次数。

    from time import time
    from collections import defaultdictrequests_per_user = defaultdict(int)def rate_limit(user_id):if requests_per_user[user_id] > 5:raise ValueError("Rate limit exceeded")requests_per_user[user_id] += 1return True
    
  • 黑名单和IP封禁:对于恶意来源的 IP 地址进行封禁,防止恶意攻击者发起暴力请求。

  • 多因素认证:防止暴力破解攻击,可以使用验证码、短信验证、身份验证等多因素认证方法。

  • 账号锁定:在连续错误尝试登录超过一定次数后,暂时锁定用户账户,防止暴力破解。

    def lock_account(user_id):# 锁定用户账户account_lock[user_id] = time() + 300  # 锁定 5 分钟
    

总结

漏洞类型攻击方式防御手段
路径遍历通过修改请求参数(如 ../)访问未经授权的文件输入过滤、路径规范化、限制文件访问目录、操作系统级别安全
跳转漏洞利用不安全的重定向功能跳转到恶意网站白名单校验、避免直接跳转、确认跳转目标安全
SSRF伪造服务器端请求,访问内部资源或外部恶意资源限制外部请求、白名单策略、请求头过滤、内部网络隔离
短信/邮件炸弹/暴力破解发送大量垃圾邮件/短信或通过暴力尝试破解账户限流、验证码、多因素认证、账号锁定、IP 封禁

通过综合应用这些防御措施,可以有效地防止这些漏洞对 Web 应用和系统的攻击。


http://www.ppmy.cn/devtools/145691.html

相关文章

WPF制作图片闪烁的自定义控件

1.定义自定义控件 BlinkingImage.cs: using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Animation; using System.Windows.Media.Imaging;namespace YourNamespace {public class BlinkingImage : Control{public static rea…

STM32HAL库中RTC闹钟设置时分秒,年月日

在STM32的HAL库中,RTC(实时时钟)模块提供了多种功能来管理时间和日期,包括设置闹钟。对于RTC闹钟功能,确实主要集中在时、分、秒的配置上,但年、月、日也可以通过RTC日期寄存器进行设置,并且可以…

Flutter persistentFooterButtons控件详解

文章目录 1. persistentFooterButtons 的用途2. persistentFooterButtons 的定义3. persistentFooterButtons 的基本用法示例 1:简单的底部按钮解释: 4. persistentFooterButtons 的常见用法示例 2:使用不同的按钮类型解释:示例 3…

中关村科金海外外呼机器人如何通过大数据分析帮助跨境电商实现精准营销?

精准营销是企业提升市场竞争力、优化客户体验和实现可持续增长的关键策略。与传统的广撒网式营销不同,精准营销通过数据分析、人工智能和机器学习等先进技术,深入了解客户的偏好、行为和需求,从而提供高度个性化的产品和服务推荐。中关村科金…

快速理解24种设计模式

简单工厂模式 建立产品接口类,规定好要实现方法。 建立工厂类,根据传入的参数,实例化所需的类,实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例,并提供一个访问他它的全局…

游戏引擎学习第52天

仓库 : https://gitee.com/mrxiao_com/2d_game 这节的内容相当多 回顾 在游戏中,实体被分为不同的类别:接近玩家的“高频实体”、距离较远并正在模拟的“低频实体”和不进行更新的“休眠实体”。这些实体会根据它们与玩家的距离进行处理,接…

机器学习-梯度下降+小批量梯度下降+数据归一化

文章目录 梯度下降小批量梯度下降多轮训练 数据归一化归一化原因损失函数等高线归一化 梯度下降 当前参数-损失函数关于参数的导数新参数,新参数会往损失函数减少的方向变化 小批量梯度下降 小批量梯度下降:每次选择部分数据计算损失率进行梯度下降 随…

Git(9)之创建新空白分支

Git(8)之创建新空白分支 Author:Once Day Date:2024年12月21日 漫漫长路有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&#xf…