CVE-2020-26945 mybatis反序列化复现思考

前言

就不完整写了,漏洞刚出来时候跟了跟,发现自己的想法行不通,当作记录吧.一些碎碎念

漏洞笔记

漏洞通告:https://github.com/mybatis/mybatis-3/pull/2079

​ 开启二级缓存后第一次查询的结果会被缓存至PerpetualCache.cache中,起初的想法是能不能动本地缓存LocalCache,通过类似内存shell的思路反射修改内存Map.

image-20201014093350160

​ 在实战场景下通过任意代码执行能够修改cache中的Map,将key对应的value修改为我们的恶意类,在请求一次sql语句就能成功执行代码。但是该属性或者调用的cache类都由MappedStatement类息息相关。然而该类没有构造方法,无法反射获取,也就造成了不能直接通过反射修改cache中的value值.

image-20201013193401259

最后的思路或许只能利用缓存库,手动修改内容,造成反序列化,实战可以配合redis漏洞

参考如下链接:https://mp.weixin.qq.com/s?__biz=MzUzNTEyMTE0Mw==&mid=2247484196&idx=1&sn=735666b28cff6e6552d8f3e16b1be9a5&chksm=fa8b1ebccdfc97aa80b6103587fd418b63c6b0d290cd4229ccc999b3706fe4f325595049a7ce&mpshare=1&scene=23&srcid=1013pFDy9OUsVb24733hEAhA&sharer_sharetime=1602582161965&sharer_shareid=8a8448ee03016e30de742559b7359a01%23rd

漏洞修复

开启jep290