Weblogic反序列化漏洞修复

Weblogic反序列化在各大论坛的讨论一直是轰轰烈烈的,引发本漏洞其实并不能怪java的反序列化机制.
测试漏洞存在,应朋友的要求帮忙做个补救,翻遍网上大牛们的技术贴,有两种临时补救的方法,但是尝试过之后对应用有影响,放弃!
今天找到某牛写的贴子,里面提到可以自己禁止JVM 执行系统命令,经过一番研究,写了个servlet 放在系统里面跑了一下,成功防御,直接贴出代码:
 

import java.io.FilePermission;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.Permission;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class KriSecurityServlet extends HttpServlet {
	/**
	 * Constructoroftheobject.
	 */
	public KriSecurityServlet() {
		super();
	}

	public void destroy() {
		super.destroy();
		// Justputs"destroy"stringinlog
		// Putyourcodehere
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println(" <HEAD><TITLE>Errot</TITLE></HEAD>");
		out.println(" <BODY>");
		out.println("Security denied!!!");
		out.println(" </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void init() throws ServletException {
		SecurityManager originalSecurityManager = System.getSecurityManager();
		if (originalSecurityManager == null) {
			// 创建自己SecurityManager
			SecurityManager sm = new SecurityManager() {
				private void check(Permission perm) {
					// 禁止exec
					if (perm instanceof FilePermission) {
						String actions = perm.getActions();
						if (actions != null && actions.contains("execute")) {
							System.out.println("警告:>>检测到 weblogic 反序列化***...");
							throw new SecurityException("execute denied!");
						}
					}
					// 禁止设置新的SecurityManager,保护自己
					if (perm instanceof java.lang.RuntimePermission) {
						String name = perm.getName();
						if (name != null && name.contains("setSecurityManager")) {
							System.out.println("警告:<<检测到 weblogic 反序列化***...");
							throw new SecurityException("System.setSecurityManager denied!");
						}
					}
				}

				public void checkPermission(Permission perm) {
					check(perm);
				}

				public void checkPermission(Permission perm, Object context) {
					check(perm);
				}
			};
			System.setSecurityManager(sm);
		}
	}

}

 

//web.xml 配置文件中添加如下内容:
<servlet>
 <servlet-name>MySecurityServlet</servlet-name>
 <servlet-class>MySecurityServlet</servlet-class>
 <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
 <servlet-name>MySecurityServlet</servlet-name>
 <url-pattern>/servlet/MySecurityServlet</url-pattern>
</servlet-mapping>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值