WebLogic历史漏洞代码审计(一):远程调试环境搭建
前言
vulhub+远程调试是java代码审计较为方便的一种方式,本文将详细介绍win10进行调试所需的环境搭建(本文是对《java代码审计(入门篇)》书籍中远程调试的复现,将一些大佬觉得太简单的细节重新补充一下)
一、Win10环境下,Docker的安装
进入如下网址,选择x86的Docker Desktop下载。
https://docs.docker.com/desktop/install/windows-install/
下载后,点击运行Docker Desktop Installer.exe即可启动
启动后,右键单击右下角小鲸鱼图表,点击Change settings修改配置
首先最重要的是修改Docker的镜像源配置,将下图中registry-mirrors修改为如下网址,后点击Apply & Restart保存修改并重启Docker Desktop
https://hub-mirror.c.163.com/
但很多时候镜像源会过期或网络不稳定,个人推荐使用Docker拉取环境前先将自身设备网络与外网相通,保证能顺畅访问外网,懂得都懂
打开一个新的命令行终端,输入docker run ubuntu echo “helloworld” 命令行,如成功输出helloworld,表示Docker安装并运行成功,如不能首先看看提示是否为网络连接超时,搜索新的镜像源,或使用其他手段保证与外网正常连接
二、VulHub的配置与jar包的复制
下载vulhub
https://github.com/vulhub/vulhub
进入vulhub文件中/weblogic/CVE-2017-10271文件夹,修改其中的docker-compose.yml文件,加入8453端口方便调试
进入/weblogic/CVE-2017-10271目录,运行docker-compose up -d命令编译镜像并启动容器,如下图容器启动成功(我的已经启动过一次)
输入docker ps -a查看所有docker容器的信息,可知该容器ID为b156419e780e(ID简称为b1)
使用docker exec -it b1 /bin/bash命令进入容器
使用vi /root/Oracle/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh加入如下两行代码
ebugFlag="true"
export debugFlag
使用docker restart命令重启容器,再进入容器,将/root/Oracle/Middleware文件夹下的modules文件夹和wlserver_10.3文件夹使用zip命令压缩成zip压缩包,容器为一个简单的Linux系统,需要执行apt-get install zip来安装zip压缩功能,然后执行zip modules.zip modules与zip wlserver_10.3.zip wlserver_10.3压缩文件夹(Windos命令行对路径长度有限制,如果直接使用docker的cp命令就有会报错,这里要养成好习惯)
exit命令退出容器内部,用docker cp b1:/root/Oracle/Middleware/modules.zip (你所创建的文件夹的绝对或相对路径) 与docker cp b1:/root/Oracle/Middleware/wlserver_10.3.zip.zip (你所创建文件夹的绝对或相对路径) 将两个压缩包复制到物理机中的文件夹
三、IDEA远程调试的配置
用IDEA打开之前的文件夹,点击右上角的当前文件并编辑配置,点击“+”并选择“远程JVM调试”(英文版为Remote)
将端口号修改为8453(注意:这个端口号要与第一步在 docker-compose.yml 文件中添加的端口号保持一致),填完后点击应用再点击确定!
选中wlserver_10.3/server/lib 文件和 modules 文件并右键单击,选择“添加为库”(或Add as Library)
添加依赖文件,这样就可以将这些文件加入到项目中了(如果遇到其他jar包无法调试或有些函数明明在文件夹可以搜索但在项目中没有,都可以尝试这个方法)
在 wlserver_10.3/server/lib/weblogic.jar!/weblogic/wsee/jaxws/ WLSServletAdapter.class 的 hadle 方法处设置断点,接着单击右上角的 Debug 按钮(绿色小虫子图标)运行 Debug 模式。然后使用浏览器访问 http://127.0.0.1:7001/wls-wsat/CoordinatorPortType,同时查看 IDEA 是否如下图所示,程序在断点处停止
如成功停止代表调试成功
总结
本文参考书籍《java代码审计(入门篇)》的weblogic远程调试章节而写,书籍中的步骤相比网上很多调试教程要全面的多,本篇文章如有写的不全可以看看该书对照使用。