触发点在
com.mysql.cj.jdbc.result.ResultSetImpl.getObject()
可以看到在触发readObject之前还对data的前两个字节进行了比较来判断是不是序列化对象,-84,-19,这里就派上用处了。
接下来就是正常的找链环节了,找哪里调用了
getObject
,找到
com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor.populateMapWithSessionStatusValues()
跟进
resultSetToMap
,到此链子就结束了,有点小短(
现在的问题是找rs,toPopulate,上面可以看到
rs = stmt.executeQuery("SHOW SESSION STATUS");
,rs其实是这个sql语句的返回值,如果我们能控制一个恶意mysql服务端,岂不是就能控制这条sql语句的返回值了,这样rs也就能控制了,这样就能反序列化了。
注意getObject这里有个if判断,这个
autoDeserialize
的value值得是true,才能进入
声明:小猿资源站是一个资源分享和技术交流平台,本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。