JAVA代码审计IDEA+JDWP常见框架远程调试总结 2020-09-23 06:06:12 Steven Xeldax ## 目录 tomcat 远程调试 weblogic 远程调试 jboss 远程调试 struts 远程调试 sprintboot 远程调试 shiro 远程调试 ## tomcat 远程调试 下载好tomcat的服务器安装包,进入包内部后搜索JPDA_ADDRESS  可以看到对于tomcat而言,已经定义了远程调试的方法,只要在启动时候加入jdpa start就可以开启8000调试端口 ``` root@4180a868cf90:~/apache-tomcat-7.0.100/bin# ./catalina.sh jpda start Using CATALINA_BASE: /root/apache-tomcat-7.0.100 Using CATALINA_HOME: /root/apache-tomcat-7.0.100 Using CATALINA_TMPDIR: /root/apache-tomcat-7.0.100/temp Using JRE_HOME: /root/jdk1.8.0_241 Using CLASSPATH: /root/apache-tomcat-7.0.100/bin/bootstrap.jar:/root/apache-tomcat-7.0.100/bin/tomcat-juli.jar Tomcat started. ``` 找到tomcat中的jar包并将文件复制出来 ``` root@4180a868cf90:~/apache-tomcat-7.0.100# find ./ -iname "*.jar" ./bin/bootstrap.jar ./bin/tomcat-juli.jar ./bin/commons-daemon.jar ./webapps/examples/WEB-INF/lib/taglibs-standard-impl-1.2.5.jar ./webapps/examples/WEB-INF/lib/taglibs-standard-spec-1.2.5.jar ./lib/catalina.jar ./lib/tomcat-i18n-zh-CN.jar ./lib/tomcat-coyote.jar ./lib/tomcat-dbcp.jar ./lib/tomcat-util.jar ./lib/tomcat-i18n-es.jar ./lib/ecj-4.4.2.jar ./lib/jasper-el.jar ./lib/tomcat-i18n-fr.jar ./lib/el-api.jar ./lib/annotations-api.jar ./lib/websocket-api.jar ./lib/catalina-tribes.jar ./lib/tomcat7-websocket.jar ./lib/tomcat-i18n-ja.jar ./lib/tomcat-i18n-de.jar ./lib/tomcat-i18n-ru.jar ./lib/jasper.jar ./lib/catalina-ant.jar ./lib/tomcat-i18n-ko.jar ./lib/tomcat-api.jar ./lib/catalina-ha.jar ./lib/servlet-api.jar ./lib/jsp-api.jar ./lib/tomcat-jdbc.jar ``` 把docker中的tomcat文件给导出,并用idea加载  idea中进入project structure选项  将tomcat相关的lib文件给加载到libraries中  然后进行远程调试的配置  设置配置,这边我将端口进行了修改  然后下端点进行调试就可以了 ## weblogic 远程调试 启动docker,在远程的服务器上运行weblogic靶机 > docker run --rm -p 7001:7001 -p 8453:8453 -it vulhub/weblogic  然后开始做准备工作,我们将docker内部weblogic的文件全部复制出来 docker exec -it xxxxx /bin/bash 进入打一份tar包  然后docker cp复制出来  再一次进入docker中修改一下启动参数,给启动参数加上jdwp调试的配置参数。  weblogic是用过startWebLogic.sh脚本进行启动的,其中通过调用setDomainEnv脚本来完成各个配置。  setDomainEnv中有设置JAVA_DEBUG,添加两行代码启动debugFlag debugFlag="true" export debugFlag  然后重启docker 用idea打开/root/Oracle/Middleware/wlserver_10.3   下面开始配置idea,使用命令把middleware目录下所有的*.jar包复制在统一一个文件夹内部 ``` find Middleware/ -name "*.jar" -exec cp {} ./test/ \; ``` 复制完毕  打开project structure然后配置sdk  然后在libraries下添加test目录  添加成功后  接着我们添加远程服务器  修改端口参数  尝试连接下  成功 我们可以下一个断点看看是否能够被调试 /wlserver_10.3/server/lib/weblogic.jar!/weblogic/wsee/jaxws/WLSServletAdapter.class  我们访问一下  成功触发断点  ## jboss 远程调试 一般而言大部分的框架都会留置一下debug的选项供调试,jboss也不例外 我们全局grep一下有关debug的关键字  发现还是有这一部分的配置的,并且可以知道jboss开放了8787端口给开发人员进行调试  我们修改一下standalone.conf 将debug的选项注释给关掉  启动jboss单独实例   可以看到端口已经开放  将源代码全部复制出来用IDEA打开  把所有的jar给复制出来  增加library  配置远程调试成功连接,并触发断点  ## struts 远程调试 运行struts2看一下  由于是用maven启动的我们需要找一下apache框架jar包的位置  然后把这个jar包全部复制出来,另外需要把源码也要复制出来 可以使用之前的方法加到library中但idea可以自动加载mvn项目,所以也可以不用复制等待下载依赖就行。 将代码载入IDEA就会调用maven自动补全lib  补全完成  maven下进行远程调试的方法 > mvn myapp:run -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5000 但是报错了  ps -ef看下进程  手动加上debug ``` root@208427eb3c06:/usr/src# /usr/local/openjdk-8/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5000 -classpath /usr/share/maven/boot/plexus-classworlds-2.6.0.jar -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven -Dlibrary.jansi.path=/usr/share/maven/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/usr/src org.codehaus.plexus.classworlds.launcher.Launcher jetty:run ```  可以看到5000端口已经开放,idea连接即可  ## sprintboot 远程调试 sprintboot test下载 ``` https://github.com/iuieSL/springboot-test/blob/93fd8e80f2c567fac318fa1487989b0ed39ffac8/target/springboot-test-1.0-SNAPSHOT.jar ``` ``` java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 springboot-test-1.0-SNAPSHOT.jar ```  新建一个空白项目  添加jar包  jar包里还有jar包而且还点不进去 尴尬了 点不进去就没办法下断点了  使用JDGUI我们是可以看的,但是并没有什么乱用  解决方法是先把第一层的jar包导出来然后再导入一遍IDEA > jar xf xxxxxxxxx.lib  将这些lib再重新导入库内部就可以了  调试模式   ## shiro 远程调试 方法同springboot系列的调试 ## 总结 1. 找到开启远程调试的方法,一般是在启动脚本中某个debug参数进行修改,如果实在不行就在java命令后面手动增加调试选项 2. 本地IDEA里把项目中涉及到jar包都拷贝出来作为libraries 3. IDEA配置远程调试IVM信息,打上断点连接remote JVM ## 参考资料 https://paper.seebug.org/1316/#apache-dubbodockerjar https://www.cnblogs.com/ph4nt0mer/p/11772709.html https://developer.ibm.com/zh/articles/j-lo-jpda1/