最近一直在做一些项目,因为对一些原理性的知识不懂感觉渗透很难再继续往上走,因此接下来打算将精力放在漏洞的理解和分析,工具的编写和优化上面,而不再执着于更多的技巧。
weblogic是一款比较经常使用的java容器,当然它爆出的漏洞也是层出不穷,为了能让自己更加了解weblogic漏洞的形成原因,我决定和大家一起调试weblogic各个版本的一些漏洞,并最终编写一个简单的weblogic漏洞检测工具,在这片文章中,我们首先一起来学习一下如何搭建weblogic的调试环境。
调试环境搭建
首先,在官网下载weblogic的安装包,双击进行安装
安装好以后,创建weblogic域
安装成功后,在domains下的bin目录下有个startWebLogic.cmd文件
编辑startWebLogic.cmd文件,在文件的开头加上如下内容
1 | set JAVA_OPTIONS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n |
双击startWebLogic.cmd启动weblogic,可以看到已经开启了9999端口的监听
同时使用netstat查看,也可以看到9999端口的监听
打开idea,import wlserver_10.3这个目录
在server/lib目录上选择add as library
选择调试配置
添加一个remote的配置
端口选择9999端口
我们再点击debug,如果成功则会出现Connected to the target VM, address: ‘127.0.0.1:9999’, transport: ‘socket’,没成功的话可以重新运行startWebLogic.cmd文件再去debug。
为了测试能否下断点,我们首先测试一下CVE-2017-10271这个漏洞,再漏洞的返回包中查看调用链,这里可以看到调用了weblogic.wsee.workarea.WorkContextXmlInputAdapter类的readUTF方法
我们找到readUTF方法并下断点,查看能否断住,我这里可以成功下到断点,至此,weblogic的调试环境搭建成功。
JDK内置函数无法继续跟踪
在调试过程中,发现当调用xlDecoder.readObject()函数时,无法继续深入跟踪,在idea的顶部也有一个报错。
经过分析weblogic默认使用自带的jdk6来编译运行,而我使用的是jdk8,因此需要改变jdk的版本。选择 Project Structure
,在project中new一个jdk,选择weblogic自带的jdk,如下如图所示:
修改以后即可跟踪到readObject这个函数的执行过程
参考文章