Task 1: Experimenting with Bash Function

Task 1:with Bash
16.04中的Bash程序已被修补,因此它不再容易受到的攻击 。为了本实验的目的,我们在/bin文件夹中安装了易受攻击的Bash版本 。它的名字叫 。我们需要在任务中使用此Bash 。请运行此易受攻击的版本的Bash,如下所示,然后设计一个实验来验证该Bash是否易受攻击攻击与否 。
$ /bin/bash_shellshock
在补丁版本的bash(/bin/bash)上尝试相同的实验,并报告您的观察结果 。
实验步骤如下:
1,设计一个实验 。定义一个包含特殊内容的shell变量foo 。用一个看上去是函数定义的字符串作为变量foo的值,并且在结尾的大括号后面添加一个额外的命令(echo)(左大括号前后都需要有一个空格) 。在补丁版本的bash(/bin/bash)上尝试,对于当前进程来说,这些圆括号、大括号没有任何特别的含义,它们仅仅是一个变量的内容,就如同内容中的其他字符一样 。这也是用命令列出所有函数定义时显示为空的原因 。因为foo只是一个变量,不是函数 。
2,用 命令标记该shell变量,这样它会作为环境变量传给子进程 。此时运行有漏洞版本的bash,当一个子Bash进程被创建时,子shell将会解析该环境变量,把它转化为子函数定义 。在解析的过程中,由于漏洞,Bash将执行大括号后面的额外命令 。因此,当有漏洞版本的Bash在子进程中运行后,一个“ extra”字符串被打印出来 。
3,在补丁版本的bash(/bin/bash)上运行结果如下:
额外的命令不会被打印出来 。
总结:父进程可以通过环境变量向子shell进程传递函数定义 。当子进程中的Bash将环境变量转换成函数时,Bash应当将变量中的指令解析出来,而不是执行它们 。但是由于解析逻辑中的漏洞,Bash可能会执行变量中包含的一些指令 。
实验说明有漏洞版本的Bash易受攻击攻击 。
Task 2:up CGI
在本实验中,我们将在远程Web服务器上发起攻击 。许多网络服务器启用CGI,这是用于在网页和Web应用程序上生成动态内容的标准方法 。许多CGI程序是使用Shell脚本编写的 。因此,在执行CGI程序之前,需要一个Shell程序将首先调用,然后由用户从远程计算机触发这样的调用 。如果外壳该程序是一个易受攻击的Bash程序,我们可以利用易受攻击的程序来获取特权服务器 。
在此任务中,我们将建立一个非常简单的CGI程序(称为.cgi),如下所示 。它只需使用shell脚本打印出“ Hello World” 。
请确保在第?行中使用/bin/bash,而不要使用/bin/bash 。的行指定应调用哪个外壳程序来运行脚本 。我们确实需要利用弱势群体在本实验中重击 。请将上面的CGI程序放在/usr/lib/cgi-bin目录中并设置其755的权限(因此它是可执行的) 。您需要使用root特权来执行这些操作,因为该文件夹仅root可写 。该文件夹是 Web服务器的默认CGI目录 。要从Web访问此CGI程序,可以使用浏览器通过键入以下URL:,或使用以下命令行程序curl做同样的事情:
$ curl http://localhost/cgi-bin/myprog.cgi
在我们的设置中,我们从同一台计算机上运行Web服务器和攻击,这就是为什么我们使用本地主机在实际攻击中,服务器运行在远程计算机上,而不是使用,我们使用服务器的主机名或IP地址 。
实验步骤如下:
1,创建一个CGI程序,命名为.cgi内容如下:把这个程序建立在/usr/lib/cgi-bin这个路径下,并且设置权限为755,这样它就是可执行的 。这些操作需要使用root权限(用sudo)来完成,因为只有root用户可以修改目录中的文件 。
把这个程序设置权限为755: