无论是漏洞挖掘还是漏洞复现,最让人痛苦的一件事莫过于搭建环境。特别是一些大型应用的调试环境搭建,可谓又复杂又难搞,而且几乎很难找到现成成体系的资料。为了避免大家在漏洞挖掘或者复现过程中浪费时间去自行搜索与探究试错。这里我将为大家详细整理一下在Weblogic
漏洞挖掘与复现过程中最难搞的调试环境搭建。
Oracle的东西有个很恼火的问题,就是他的一些下载入口、文档入口、通告入口巨难找。
首先第一步,我们需要从Oracle官网下载最新版的Weblogic安装包。以下为下载地址:
https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html
我们直接下载通用下载其,下载后我们将得到一个压缩包,对压缩包解压将得到一个jar包,然后直接执行命令进行安装。注意使用管理员权限打开命令行,否则可能因为权限不够而失败。
java -jar fmw_14.1.1.0.0_wls_lite_generic.jar
这里需要说明的是,JDK的安装路径中不能有空格,否则在安装完成后启动配置向导会失败,也就是说JDK不能安装在Program Files (x86)
或Program Files
目录下。另外Weblogic的一些漏洞是需要通过JNDI的方式利用的,而Oracle在JDK 1.7开始就对RMI与LDAP开始进行限制了,故使用的JDK版本不能太高,我这里使用的JDK版本是JDK 8U121
,JDK的归档下载在
https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html
注意可能下载的版本与网页上标记的版本不一致,注意查看下载的文件名中真正的版本号,如果不是自己想要的,就找更低的版本下载就可以了。
在打开安装程序后会见到下面的状态
一直点击下一步到安装位置
选项,选择一个空闲空间较大的磁盘进行安装,安装时注意路径中不要带中文与空格。
下一步到安装类型
,默认即可
下一步到先决条件检查
选项,安装程序会检查系统环境是否符合安装,如果使用较低版本的JDK可能会有警告,不用管继续下一步即可
到了安装概要
界面,选择安装,等待系统安装完毕
当下一步按钮变成可点击状态后,点击下一步,切记不要点完成。
勾选自动启动配置向导
复选框,点击完成。会弹出一个控制台,等待配置向导打开
打开后下一步到模板
选项,勾选所有复选框点击下一步
在管理员账户
选项设置管理员账号与密码
到高级配置选项
,全部选中
继续到节点管理器
选项,输入前面输入的用户名密码,继续下一步
然后一直下一步知道配置概要
选项,点击创建,开始创建域。待配置完成点击下一步
如果勾选启动管理服务器
,将启动weblogic服务器,这里我们不勾选直接点完成,因为我们需要更改启动配置以开启调试模式
我们找到%WLS_HOME%user_projectsdomainsbase_domainbin
下的setDomainEnv.cmd
文件
在其开头增加两行,分别表示开启调试模式与设置调试端口为5005
。这两行也不要太靠前,可以搜索debugFlag
第一次出现的位置,在其前面增加即可。
set debugFlag=true
set DEBUG_PORT=5005
修改完保存后,我们到%WLS_HOME%user_projectsdomainsbase_domain
目录下执行命令
startWeblogic.cmd
等待服务启动。
在Weblogic
服务启动后,我们需要对IDEA
进行配置以进行调试
首先我们需要找导Weblogic
使用的jar
包,在IDEA
里新建一个项目,将这些jar
包添加到项目ClassPath
中去。如果你在网上找,他们你抄我我抄你,会告诉你使用一个什么jarbuilder
的jar
包或者复制weblogic.jar
到ClassPath
去就行,我这里告诉你是不行的,新版本的Weblogic
移除了这些命令,Weblogic.jar
包也被重构了,里面什么也没有,就只有一个空目录,指向了一些被依赖的其他jar
包。
这里我们直接使用命令将我们Weblogic
的所有jar
包都找出来
我们进入到%WLS_HOME%wlserver
目录,在该目录中创建一个新的目录lib
,或者其他什么名字,然后想办法将这个wlserver
目录复制到你的Linux
虚拟机里面去,你可以通过共享文件夹或者VMTools
直接拖拽,或者使用Windows
的WLS
来执行以下命令将所有的jar
包都复制到lib
目录中去
find ./wlserver -name '*.jar' -exec cp {} ./wlserver/lib ;
然后讲wlserver
在idea
中作为一个项目打开
然后我们选择File->Project Structure
打开项目结构设置,在这将我们的lib
目录添加为模块的依赖保存
然后等待IDEA
索引反编译jar
包成功后我们就可以打开这些jar
包了。当jar
包出现这样的箭头则表示添加依赖成功且发编译成功,我们可以打开这些jar
包直接查看反编译后的可读代码,并下断点调试。
如果需要进行调试我们还需要新增一个远程JVM
调试的配置,我们在idea
右上角选择Edit Configurations
我们新增一个JVM Remote Debug
设置一下名字以及远程目标,目标的IP
即Weblogic
服务器地址,端口即前面修改的setDomainEnv.cmd
文件中设置的端口
配置增加后我们点击调试即可开启调试模式
点击后会弹出调试窗口,如果没有报错类似如下的界面则表示连接成功
此时我们便可以打断点调试了
另外,如果我们需要调试漏洞的话,这样做可能会有问题,理想的方式是在当前项目下创建一个子项目,然后在子项目中引入漏洞需要的一些依赖,这样就可以将漏洞依赖于Weblogic依赖分开。因为Weblogic整个系统太过庞大,存在一些相同的类不同的jar包中的情况,这样如果我们进行可能导致程序找到错误的jar包中的类,从而使得运行失败,所以我们选择新建子项目进行漏洞PoC或者Exp的运行。
例如,如果我们测试JNDI注入,如果一股脑使用所有依赖则在new InitialContext
的时候会卡住。
在最新版的Weblogic中,如果你使用的是T3协议,你最好单独在子模块中引入wlthint3client.jar
这个jar包,如果使用iiop
模块也需要单独引入com.oracle.weblogic.iiop.jar
等jar包。
如果你不知道你使用的类来自哪个jar包,你可以使用jd-gui
这个工具将Weblogic
所有的jar
包导入然后搜索即可,谁让IDEA不能搜索反编译jar包中的内容呢。
原文始发于微信公众号(一个安全研究员):手把手教你搭建Weblogic调试环境
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论