打补丁修改jar包

长话短说,我们用2024长城杯的一道AWD赛题中的漏洞修复来演示,首先我们先看一下这道题,首先将jar包进行反编译,在配置文件pom.xml中发现了shiro的特征,并且在lib中发现了shiro相关的jar包

上工具进行爆破key和利用链,发现不成功,但是在源码中的shiro配置文件中,我们还是发现了shiro的key

通过工具验证可以发现key正确,并且成功发现了利用链

并且继续审计源码,发现TestController存在后门,可任意命令执行

1
payload:test/backd0or?cmd=whoami

接下来开始修复,首先先将jar包进行解压

随后创建文件夹,并且复制class相关文件到目录中

使用下面的脚本,将class转换成java文件,如果能看到.java说明成功反编译了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#!/bin/bash
# 设置CFR JAR文件的路径
CFR_JAR="cfr-0.152.jar"
# 设置class文件的根目录
CLASS_ROOT="src/main/java"
# 查找所有的class文件并反编译为java文件
find $CLASS_ROOT -name "*.class" | while read class_file; do
# 获取class文件的目录和文件名
class_dir=$(dirname "$class_file")
class_name=$(basename "$class_file" .class)
echo $class_name
# 反编译class文件并将输出重定向到.java文件
~/java/jdk1.8.0_181/bin/java -jar $CFR_JAR "$class_file" > "$class_dir/$class_name.java"
done

将shiro配置文件中的key值进行修改

修改完成之后进行打包

1
2
CLASS_LIB=$(find example/BOOT-INF/lib/ -name "*.jar" | tr '\n' ':');
javac -cp ".:${CLASS_LIB%:}" src/main/java/com/example/doctoolkit/shiro/ShiroConfig.java

但是发现了四个错误,通过报错提示可以看到,需要将这几个java文件一起进行编译

1
javac -cp ".:${CLASS_LIB%:}" src/main/java/com/example/doctoolkit/shiro/ShiroConfig.java src/main/java/com/example/doctoolkit/shiro/UserRealm.java src/main/java/com/example/doctoolkit/controller/admin/AdminController.java

此时class文件已经产生,我们需要进行重新打包,在此之前,首先需要替换原来的class文件

替换结束之后重新打包,解压每一个嵌套的JAR文件到单独的目录中

再重新打包嵌套的JAR文件

最后,重新打包主jar文件

1
jar -cvfM0 ../example_repacked.jar -C . .

运行jar文件,重启服务测试,可以发现原来的key已经失效


打补丁修改jar包
http://example.com/2024/06/05/打冷补丁修改jar包/
作者
liuty
发布于
2024年6月5日
许可协议