网络启示录 2025 - 网络攻击

· 4min · Juicecat
Table of Contents

网络攻击(网络)

对于此挑战,我们会获得一个 IP 以及该 IP 上网站的源代码

index.md-53.pngindex.md-54.png

查看代码,我们看到了几个潜在注入的位置。该网站使用 cgi python 脚本来处理请求,并且使用基本的 index.php,不会弹出服务器端漏洞。首先想到的是 CRLF 注入,因为我们在名称参数上没有看到正则表达式验证或清理,并且它被详细地打印为标题。 index.md-55.png 我们可以这样验证: index.md-58.png

这是有效的,因为在打印标头时,我们注入 \r\n,然后我们可以将任意标头注入到其中

此外,我们在cgi-bin中看到了一个看似受保护的其他脚本,这意味着我们需要在攻击attack-ip之前首先利用attack-domain index.md-56.png 这是 attack-ip 的代码: index.md-57.png 在这里我们看到与 os.popen 相同的命令注入,但这次是 它不受正则表达式保护,这意味着这应该是我们的最终目标。

所以我们需要: 1.利用attack-domain中的SSRF 2. 让服务器调用127.0.0.1/cgi-bin/attack-ip来绕过apache配置 3. 将有效负载注入os.popen

当查看挑战附带的 dockerfile 时,我们看到故意启用了几个 apache 插件,这让我很好奇: index.md-69.png 我花了 长的 时间尝试替代的漏洞利用路径并深入兔子洞,但我最终在 mod_proxy_fcgidocumentation 中偶然发现了这一点。您会注意到它有一个特殊的 proxy: 符号。

index.md-68.png

在测试之前,我设置了一个可公开访问的隧道,这样我就不需要依赖 ngrok 或 burp 协作者,我将在这里托管一个简单的 python Web 服务器来捕获回复 index.md-60.png

现在我们发送一个盲负载来 ping 我们的隧道。请注意,我们需要对代理请求进行双重编码,因为它是嵌套在第一个请求中的第二个请求 index.md-75.png

发送有效负载验证了我们的 SSRF 怀疑 index.md-61.png SSRF 已实现。现在我们开始利用。请记住,我们已经看到了 attack-ip 的代码,因此我们知道它很容易受到命令注入的攻击,因为没有正则表达式保护它。我将在我的隧道上创建 index.html,其中包含一个用于泄露标志的脚本 index.md-64.png 并将有效负载更改为管道到 bash 中,以便它实际执行: index.md-73.png 然后我们得到带有 base64 编码标志的回调! index.md-67.png