安全漏洞预警公告-Struts2存在远程命令执行漏洞 --终极解决方案

本文详细介绍了Struts2框架中存在的远程代码执行漏洞及其成因,并提供了有效的解决方案。通过在OGNL执行前进行判断,阻止了恶意代码的执行,确保了应用的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2支持url?action:%{ognl expr}形式指定调用action,这种方式绕过了struts2的默认拦截器对action名称的限制,后续框架默认代码逻辑会对action名称做OGNL解析。所以导致远程代码执行漏洞。

所有的struts2项目,默认都存在这个漏洞,没有幸免。

 

解决方案:

应用该方案后,攻击者只能读取一些sessionapplication中的内容,无法做危险操作。

       原理是,在OGNL执行之前,对语句做判断,看到有不好的代码,就干掉。理论上,开发人员不会自己写OGNL用于操作文件,执行命令等。

       Ognl.Ognl类,public static Object parseExpression(String expression)函数添加如下代码:

    public static Object parseExpression(String expression)

            throws OgnlException {

        // hackedbykxlzx

        String evalMethod[] = { "Runtime""new file""PrintWriter",

                "new java.io.File""ProcessBuilder""Response""Stream",

                "exit""Thread" };

        String methodString = null;

        methodString = expression.toLowerCase();

        for (int i = 0; i < evalMethod.length; i++) {

            if (methodString.indexOf(evalMethod[i].toLowerCase()) > -1) {

                System.out.println("OGNL证在执行恶意语句" + methodString

                        + "!看到这个消息,请联系安全工程师!!!");

                throw new OgnlException("OGNL证在执行恶意语句" + methodString

                        + "!看到这个消息,请联系安全工程师!!!");

            }

        }

 

        try {

            OgnlParser parser = new OgnlParser(new StringReader(expression));

            return parser.topLevelExpression();

        } catch (ParseException e) {

            throw new ExpressionSyntaxException(expression, e);

        } catch (TokenMgrError e) {

            throw new ExpressionSyntaxException(expression, e);

        }

    }

 

 

       其中”//hackedbykxlzx”部分是添加的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值