Web Hacking Playground 是一个受控的 Web 黑客环境。它包含真实案例中发现的漏洞,既来自渗透测试也来自漏洞赏金项目。目标是让用户能够通过这些漏洞进行练习,并学习如何检测和利用它们。
还将涉及其他有趣的主题,例如:通过创建自定义有效载荷绕过过滤器、执行利用多个漏洞的链式攻击、开发概念验证脚本等。
应用程序源代码是可见的。然而,本实验室采用黑盒方法。因此,不应通过审查代码来解决问题。
此外,需要注意的是,模糊测试(包括参数和目录)以及暴力攻击在本实验室中不会带来任何优势。
建议使用 Kali Linux 进行此实验。如果使用虚拟机,建议使用 VMware Workstation Player 虚拟机管理程序。
环境基于 Docker 和 Docker Compose,因此需要安装两者。
要在 Kali Linux 上安装 Docker,请运行以下命令:
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl enable docker --now
要在其他基于 Debian 的发行版上安装 Docker,请运行以下命令:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker --now
要安装 Docker Compose,请运行以下命令:
sudo apt install -y docker-compose
注意: 如果使用 M1,建议在构建镜像前执行以下命令:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
下一步是克隆仓库并构建 Docker 镜像:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose build
另外,建议安装 Foxy Proxy 浏览器扩展,它可以让你轻松更改代理设置,以及 Burp Suite,我们将使用它来拦截 HTTP 请求。
我们将创建一个新的 Foxy Proxy 配置文件以使用 Burp Suite 作为代理。为此,进入 Foxy Proxy 选项,并添加一个具有以下配置的代理:
安装好所有必需的软件后,可以使用以下命令部署环境:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose up -d
这将创建两个基于 Flask 开发的应用程序容器,运行在 80 端口:
需要将容器的 IP 添加到 /etc/hosts 文件中,以便能够通过名称访问它们,并且使利用服务器能够与有漏洞的 Web 应用程序通信。为此,请运行以下命令:
sudo sed -i '/whp-/d' /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-socially) whp-socially" | sudo tee -a /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-exploitserver) whp-exploitserver" | sudo tee -a /etc/hosts
完成后,可以通过 http://whp-socially 访问有漏洞的应用程序,通过 http://whp-exploitserver 访问利用服务器。
使用利用服务器时,必须使用上述 URL,即使用域名而非 IP。这确保了容器之间的正确通信。
在黑客实践中,为了表示攻击者的服务器,必须使用本地 Docker IP,因为本实验不打算向外部服务器(如 Burp Collaborator、Interactsh 等)发送请求。可以使用 Python http.server 来模拟一个 Web 服务器并接收 HTTP 交互。为此,请运行以下命令:
sudo python3 -m http.server 80
环境分为三个阶段,每个阶段都有不同的漏洞。重要的是按顺序完成,因为后续阶段的漏洞建立在前面阶段的基础上。阶段如下:
以下是每个阶段漏洞的剧透。如果你不需要帮助,可以跳过此部分。另一方面,如果你不知道从哪里开始,或者想确认是否走在正确的道路上,可以展开感兴趣的部分。
在这个阶段,可以通过跨站脚本(XSS)窃取特定用户的会话,该漏洞允许执行 JavaScript 代码。为此,受害者必须能够在用户上下文中访问一个 URL,这种行为可以通过利用服务器模拟。
解决此阶段的提示如下:
在这个阶段,可以生成一个允许以管理员身份访问的令牌。这是一个典型的 JSON Web Token(JWT)攻击,其中可以修改令牌的有效载荷以提升权限。
解决此阶段的提示是,存在一个端点,给定一个 JWT,它会返回一个有效的会话 cookie。
在这个阶段,可以通过服务器端模板注入(SSTI)漏洞读取 /flag 文件。为此,你必须让应用程序在服务器上运行 Python 代码。可以在服务器上执行系统命令。
解决此阶段的提示如下:
易受攻击的功能受双因素认证保护。因此,在利用 SSTI 之前,必须找到一种绕过 OTP 代码请求的方法。有时应用程序会信任来自同一服务器的请求,而 HTTP 头部在这种情况中起着重要作用。
SSTI 是盲注的,这意味着执行的代码输出不会直接获得。Python smtpd 模块允许你创建一个将接收到的消息打印到标准输出的 SMTP 服务器:
sudo python3 -m smtpd -n -c DebuggingServer 0.0.0.0:25
该应用程序使用 Flask,因此可以推断出模板引擎是 Jinja2,因为官方 Flask 文档推荐它且被广泛使用。你必须获得一个兼容 Jinja2 的 payload 来获取最终 flag。
电子邮件消息有字符限制。如何在互联网上找到绕过此限制的信息。
每个阶段的详细解决方案可以在 Solutions 文件夹中找到。
以下资源可能有助于解决问题:
欢迎提交 Pull Request。如果发现任何错误,请提交 Issue。