# 004_Was环境基于IBM JDK1.7及JDK1.8反序列化漏洞报错解决方案
# 漏洞说明
java.io.ObjectInputStream反序列化流时,存在安全漏洞,导致EOS的应用,在未登录状态下登录,只要发起post请求,就会触发参数的反序列化。
Window环境执行打包jar如下图报错:

# 问题原因
rt的压缩算法和默认jar的压缩算法不一致导致。
# 解决方案
修改源码的rt.jar路径,执行命令
修改rt.jar路径,修改代码如下:
public class SerialKillerGenerator { public static void main(String[] args) throws Throwable { String javaHome = System.getProperty("java.home"); // System.out.println(javaHome); // FileInputStream in = new FileInputStream(javaHome + "/lib/rt.jar"); FileInputStream in = new FileInputStream( "xxxrt-compile/rt1.jar"); JarInputStream jarInputStream = new JarInputStream(in);修改rt1.jar路径: FileInputStream in = new FileInputStream( "xxx/rt-compile/rt1.jar");
将IBM的jre/lib/rt.jar, 解压到一个rt的目录。
修改gen.bat 参考如下:
set "JAVA_HOME=D:\ibm_jdk1.7_x64" echo %JAVA_HOME% if "%JAVA_HOME%"=="" ( echo "Please specify the JDK path." ) else ( "%JAVA_HOME%/bin/java" -version echo "javac" "%JAVA_HOME%/bin/javac" -cp asm-7.1.jar -encoding utf8 com/primeton/SerialKillerGenerator.java java/io/SerialKiller.java echo "inject killer" "%JAVA_HOME%/bin/java" -cp asm-7.1.jar;. com.primeton.SerialKillerGenerator echo "Complate !!!" )注意:要设置jdk的路径,不能用jre的路径,IBM 的jre/bin目录下没有javac命令,导致编译会失败
jar -cfv rt1.jar * 进行打包,然后用rt1.jar放入jre/lib中,将那个代码的rt.jar路径改为rt1.jar,运行gen.bat就可以。