Section outline

  • 我们现在可以发起 Shellshock 攻击。该攻击不依赖于 CGI 程序中的内容,因为它针对的是 CGI 脚本执行之前调用的 bash 程序。你的任务是通过 URL http://www.seed-server.com/cgi-bin/vul.cgi 发起攻击,以便让服务器运行任意命令。

    如果你的命令有纯文本输出,并且你希望输出返回给你,输出需要遵循如下协议:它应该以 Content-type: text/plain 开头,后跟一个空行,然后就可以放置纯文本输出。例如,如果你希望服务器返回其文件夹中的文件列表,你的命令应该像下面这样:

    echo Content-type: text/plain; echo; /bin/ls -l

    在这个任务中,请使用三种不同的方法(即三种不同的 HTTP 头字段)来对目标 CGI 程序发起 Shellshock 攻击。你需要实现以下目标,但对于每个目标,你只需要使用一种方法,但总共需要使用三种不同的方法。

    • 任务 3.A: 让服务器返回 /etc/passwd 文件的内容。

    • 任务 3.B: 让服务器返回其进程的用户 ID。你可以使用 /bin/id 命令打印出 ID 信息。

    • 任务 3.C: 让服务器在/tmp文件夹中创建一个文件。你需要进入容器查看文件是否被创建,或者使用另一个 Shellshock 攻击来列出 /tmp 文件夹中的内容。

    • 任务 3.D: 让服务器删除你刚刚在 /tmp 文件夹中创建的文件。

      • 请回答以下问题:

        • 问题 1: 你能否从服务器窃取 /etc/shadow 文件的内容?为什么或者为什么不行? 任务3.B 中获得的信息应该能给你一些线索。

        • 问题 2: HTTP GET 请求通常会在 URL 中附加数据,放在? 标记后面。我们可以试着用这些数据来发起攻击。在以下示例中,我们在 URL 中附加了一些数据,我们发现这些数据被用来设置成环境变量:

        $ curl "http://www.seed-server.com/cgi-bin/getenv.cgi?AAAAA"
        ...
        QUERY_STRING=AAAAA
        ...

        我们能否使用这种方法发起 Shellshock 攻击?请进行你的实验,并根据实验结果得出结论。