[Java代码审计]——远程调试初探

Posted huamanggg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java代码审计]——远程调试初探相关的知识,希望对你有一定的参考价值。

Jar包的调试

这里以冰蝎做示例
把冰蝎的jar包和他必须的db数据库文件放到项目的lib目录下
把jar包添加到库

如下配置调试配置
新建远程JVM调试
JVM的命令行参数,根据JDK的版本去选择

然后比如在这打一个断点

然后在jar包目录下执行如下命令,后面的参数是刚刚配置调试的那个配置
注意这里,suspend要改成y,不然会卡不住断点,这个参数的意思是:是否等待调试器的接入

回到idea,debug就可以卡住断点了

Weblogic的远程调试

这里我们是以dacker来配合Idea进行代码调试,使用的是vulhub项目
示例:CVE-2017-10271
在docker-compose.yml里面加上8453端口,这个端口是用于调试的

docker-compose up -d获取镜像并启动后,进入命令行,修改配置文件
在如下路径的setDomainEnv.sh文件中,找到JAVA_DEBUG这里,在下面追加如下代码

enbugFlag="true"
export debugFlag


然后执行docker restart xxx命令,重启容器

下一步我们需要把源代码提取到本地
我们需要/root/Oracle/Middleware/下的modules和wlserver_10.3文件

使用cp命令的缺点:操作一些长文件名的时候会报错
推荐使用zip压缩后,cp提取出压缩包

打开idea,将wlserver_10.3/server/lib添加为库

配置调试器,和上面的jar包一样,端口换成8453就行了

Tomcat的远程调试

以CVE-2017-12615漏洞环境示例
开启5005调试端口,我这里把8080换成了1002,防止端口冲突,本地还是开了挺多服务的


访问1002端口,成功部署

在catalina.sh里面插入如下代码
/usr/local/tomcat/bin/catalina.sh

JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"

然后重启docker
注意⚠️ ,这里不能直接拿vscode改,重启会报错找不到catalina.sh文件。。。踩坑找了好久才找到原因

这里要用vim写进去,但是可惜,vulhub的这个项目没有vim,得先换源,再apt-get去安装一个vim
换源:

root@1b4671904bfa:/#  mv /etc/apt/sources.list /etc/apt/sources.list.bak
root@1b4671904bfa:/#  echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list
root@1b4671904bfa:/#  echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
root@1b4671904bfa:/#  echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
root@1b4671904bfa:/#  echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

下一步就是导出docker里面的lib

docker cp 79:/usr/local/tomcat/lib ./

在idea,创建项目,把lib添加为库

配置调试器还是一样的,端口换成5005

成功卡住

以上是关于[Java代码审计]——远程调试初探的主要内容,如果未能解决你的问题,请参考以下文章

当前市面上的代码审计工具哪个比较好?

如何使用 Idea 远程调试 Java 代码

PHP代码审计1-审计环境与调试函数

初探JSP与LEeclipse

远程debug调试java代码

Java代码审计-CC1 Chains