91ri.org:我们在此呼吁,希望各位手握struts2 0day的同学,暂时不要传播struts2的漏洞利用工具及利用代码,给站长们一点打补丁的时间。
Struts2统一防御方案
首先升级到最新版本。
在ognl这个语言的入口,加入拦截代码,一旦发现危险调用,直接干掉。
代码原理是,在OGNL执行之前,对语句做判断,看到有黑名单的代码,就干掉。理论上,开发人员理论上不会自己写OGNL用于操作文件,执行命令等,他们最多从session中取一个值,或者在页面上取一个值。
覆盖掉Ognl.Ognl类,添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public static Object parseExpression(String expression)
throws OgnlException {
//。。。下面是白名单列表,请各位同学自行搜索java危险代码,之后加入列表,实在不会的,找几个webshell看看,我肯定不会把阿里正在使用的列表告诉你们的。
String evalMethod[] = { “Runtime”, “new file” };
String methodString = null;
methodString = expression.toLowerCase();
for (int i = 0; i < evalMethod.length; i++) {
if (methodString.indexOf(evalMethod[i].toLowerCase()) > -1) {
Log.securityLog(Log.getInfo()+“|OGNL正在执行恶意语句|” + methodString
+ “|看到这个消息,请联系安全工程师!!!”,“4700012@qq.com”);
}
}
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);
}
}
|
为什么要加入QQ邮箱呢?具体原因不说,只说结果,结果是,我的邮箱可以收到0DAY,你如果真的看懂了,自己猜猜原因?
91ri.org:我们提供Struts2 (S2-016)漏洞检测代码,站长们可以自行使用以下语句测试漏洞是否存在
1
|
http://localhost/Struts2/test.action?redirect:${%23w%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’).getWriter(),%23w.println(‘[/ok]‘),%23w.flush(),%23w.close()}
|
若漏洞存在则网页中将输出ok
struts2漏洞的相关文章参考《Struts2远程代码执行漏洞分析(S2-013)》《Struts2远程代码执行漏洞(S2-013) 临时解决方案》
原文link:http://www.inbreak.net/archives/507
本文作者空虚浪子心,由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理,转载请注明出处。
Copyright © hongdaChiaki. All Rights Reserved. 鸿大千秋 版权所有
联系方式:
地址: 深圳市南山区招商街道沿山社区沿山路43号创业壹号大楼A栋107室
邮箱:service@hongdaqianqiu.com
备案号:粤ICP备15078875号