1. Bash简介
1.1 定义
Bash(GNU Bourne-Again Shell)是许多Linux发行版的默认Shell。
1.2 概述
目前的Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“() {”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
从阐述的漏洞原理可知,漏洞的根本原因存在于Bash的ENV命令实现上,因此漏洞本身是不能够直接导致远程代码执行的。如果达到远程代码执行的目的,必须要借助第三方服务程序作为媒介才能够实现,第三方服务程序也必须要满足众多条件才可以充当此媒介的角色。目前自己已验证第三方服务程序apache2便可充当此媒介,其CGI组件满足远程访问并调用Bash的ENV命令进行访问数据解析功能。具体如何实现,参见下面的原理图:CVE-2014-6271漏洞实现远程代码执行原理图。
2. 数据包分析
Bash远程代码执行漏洞主要是以“() {”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。所以在数据包的payload构造时我们需要构造一个以“() {”开头的环境变量以及一段可执行的shell脚本。通过python将请求数据发送至服务器,Apache的cgi组件远程访问并调用Bash的ENV命令进行访问数据解析功能,执行payload脚本。
2.1 探测数据包
具体流程如下:
- 在含有破壳漏洞的bash版本的虚拟机(Ubuntu12.04)中对Apac