Section outline

      • 在我们的设置中,Web 服务器容器的 IP 地址是 10.9.0.5,主机名是 www.seed-server.com,我们需要将这个主机名和 IP 地址的映射添加到 /etc/hosts 文件中。需要使用 root 权限来修改该文件:

        10.9.0.5       www.seed-server.com
      • 解压 Labsetup 压缩包, 进入 Labsetup 文件夹,然后用 docker-compose.yml 文件安装实验环境。 对这个文件及其包含的所有 Dockerfile 文件中的内容的详细解释都可以在用户手册(注意:如果你在部署容器的过程中发现从官方源下载容器镜像非常慢,可以参考手册中的说明使用当地的镜像服务器)中找到。 如果这是你第一次使用容器设置 SEED 实验环境,那么阅读用户手册非常重要。

        在下面,我们列出了一些与 Docker 和 Compose 相关的常用命令。 由于我们将非常频繁地使用这些命令,因此我们在 .bashrc 文件 (在我们提供的 SEED Ubuntu 20.04 虚拟机中)中为它们创建了别名。

        $ docker-compose build  # 建立容器镜像
        $ docker-compose up     # 启动容器
        $ docker-compose down   # 关闭容器
        
        // 上述 Compose 命令的别名
        $ dcbuild       # docker-compose build 的别名
        $ dcup          # docker-compose up 的别名
        $ dcdown        # docker-compose down 的别名

        所有容器都在后台运行。 要在容器上运行命令,我们通常需要获得容器里的 Shell 。 首先需要使用 docker ps 命令找出容器的 ID , 然后使用 docker exec 在该容器上启动 Shell 。 我们已经在 .bashrc 文件中为这两个命令创建了别名。

        $ dockps        // docker ps --format "{{.ID}}  {{.Names}}" 的别名
        $ docksh <id>   // docker exec -it <id> /bin/bash 的别名
        
        // 下面的例子展示了如何在主机 C 内部得到 Shell
        $ dockps
        b1004832e275  hostA-10.9.0.5
        0af4ea7a3e2e  hostB-10.9.0.6
        9652715c8e0a  hostC-10.9.0.7
        
        $ docksh 96
        root@9652715c8e0a:/#
        
        // 注: 如果一条 docker 命令需要容器 ID,你不需要
        //     输入整个 ID 字符串。只要它们在所有容器当中
        //     是独一无二的,那只输入前几个字符就足够了。

        如果你在设置实验环境时遇到问题,可以尝试从手册的“Miscellaneous Problems”部分中寻找解决方案。

      • 在本实验中,我们将对 Web 服务器发起 Shellshock 攻击。许多 Web 服务器都用了 CGI,这是 Web 应用程序中生成动态内容的常用方法。许多 CGI 程序是 shell 脚本,因此在 CGI 程序运行之前,shell 程序会先运行。这种调用是由远程计算机的用户触发的,如果该 shell 程序是一个存在漏洞的 bash 程序,那么我们就可以利用 Shellshock 漏洞来获取服务器上的权限。

        在我们的 Web 服务器中已经设置了一个非常简单的 CGI 程序 vul.cgi), 它是个 shell 脚本,功能就是打印出 "Hello World"。该 CGI 程序放在 Apache 的默认 CGI 文件夹/usr/lib/cgi-bin 中,它必须设置成可执行的。

        #!/bin/bash_shellshock
        
        echo "Content-type: text/plain"
        echo
        echo
        echo "Hello World"

        该 CGI 程序使用 /bin/bash_shellshock(第一行),而不是使用/bin/bash。这一行指定应当调用哪个 shell 程序来运行脚本。在本实验中,我们需要使用有漏洞的 bash 程序。

        要从 Web 访问 CGI 程序,我们可以通过浏览器输入以下URL: http://www.seed-server.com/cgi-bin/vul.cgi, 或者使用以下命令行程序 curl 来执行相同操作。

        $ curl http://www.seed-server.com/cgi-bin/vul.cgi