weblogic漏洞分析系列之调试环境搭建

​ 最近一直在做一些项目,因为对一些原理性的知识不懂感觉渗透很难再继续往上走,因此接下来打算将精力放在漏洞的理解和分析,工具的编写和优化上面,而不再执着于更多的技巧。

​ weblogic是一款比较经常使用的java容器,当然它爆出的漏洞也是层出不穷,为了能让自己更加了解weblogic漏洞的形成原因,我决定和大家一起调试weblogic各个版本的一些漏洞,并最终编写一个简单的weblogic漏洞检测工具,在这片文章中,我们首先一起来学习一下如何搭建weblogic的调试环境。

调试环境搭建

​ 首先,在官网下载weblogic的安装包,双击进行安装

image-20201030210608351

​ 安装好以后,创建weblogic域

image-20201030210658376

​ 安装成功后,在domains下的bin目录下有个startWebLogic.cmd文件

image-20201030210904700

​ 编辑startWebLogic.cmd文件,在文件的开头加上如下内容

1
set JAVA_OPTIONS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n

image-20201030204516719

​ 双击startWebLogic.cmd启动weblogic,可以看到已经开启了9999端口的监听

image-20201030210943558

​ 同时使用netstat查看,也可以看到9999端口的监听

image-20201030211009015

​ 打开idea,import wlserver_10.3这个目录

image-20201030211258783

​ 在server/lib目录上选择add as library

image-20201030211344142

​ 选择调试配置

image-20201030211447373

​ 添加一个remote的配置

image-20201030230633634

端口选择9999端口

image-20201030230709499

​ 我们再点击debug,如果成功则会出现Connected to the target VM, address: ‘127.0.0.1:9999’, transport: ‘socket’,没成功的话可以重新运行startWebLogic.cmd文件再去debug。

image-20201030230745586

​ 为了测试能否下断点,我们首先测试一下CVE-2017-10271这个漏洞,再漏洞的返回包中查看调用链,这里可以看到调用了weblogic.wsee.workarea.WorkContextXmlInputAdapter类的readUTF方法

image-20201030230958127

​ 我们找到readUTF方法并下断点,查看能否断住,我这里可以成功下到断点,至此,weblogic的调试环境搭建成功。

image-20201030231147688

JDK内置函数无法继续跟踪

​ 在调试过程中,发现当调用xlDecoder.readObject()函数时,无法继续深入跟踪,在idea的顶部也有一个报错。

image-20201031095622944

​ 经过分析weblogic默认使用自带的jdk6来编译运行,而我使用的是jdk8,因此需要改变jdk的版本。选择 Project Structure,在project中new一个jdk,选择weblogic自带的jdk,如下如图所示:

image-20201031100649371

​ 修改以后即可跟踪到readObject这个函数的执行过程

image-20201031101247175

参考文章

WebLogic-动态调试环境搭建