网络启示录 2025 - 网络攻击
Table of Contents
网络攻击(网络)
对于此挑战,我们会获得一个 IP 以及该 IP 上网站的源代码


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

这是有效的,因为在打印标头时,我们注入 \r\n,然后我们可以将任意标头注入到其中
此外,我们在cgi-bin中看到了一个看似受保护的其他脚本,这意味着我们需要在攻击attack-ip之前首先利用attack-domain
这是 attack-ip 的代码:
在这里我们看到与 os.popen 相同的命令注入,但这次是 它不受正则表达式保护,这意味着这应该是我们的最终目标。
所以我们需要:
1.利用attack-domain中的SSRF
2. 让服务器调用127.0.0.1/cgi-bin/attack-ip来绕过apache配置
3. 将有效负载注入os.popen
当查看挑战附带的 dockerfile 时,我们看到故意启用了几个 apache 插件,这让我很好奇:
我花了 长的 时间尝试替代的漏洞利用路径并深入兔子洞,但我最终在 mod_proxy_fcgi 的 documentation 中偶然发现了这一点。您会注意到它有一个特殊的 proxy: 符号。

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

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

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