0x01 序言
之前有大佬写了个fastjson的检测插件,于是想着能不能写个shiro反序列化检测的插件,最后就照着那个UI写了个shiro的检测插件。
0x02 历程
首先,网上的shiro利用工具都要用到一个名叫ysoserial的jar包,想要写出这个插件,就要去除这个jar包,在探测key的过程中,都会用到这个jar包的URLDNS来生成payload,在参考一篇文章后,发现其原理就是序列化一个HashMap,HashMap里存放了一个URL对象,其hashCode属性值为-1,借此就成功完成了去jar包,实现代码如下,在put前先要将hashcode的值改掉,不然会额外触发一次dns请求,结果就不准确:
完成去jar包的过程后,接下来就要对流经的流量进行检测,当然不能对每个流经burp的请求包去跑一边key,那样开销太大,shiro组件有一个特征,就是你主动发一个请求,cookie带上rememberMe=123,它返回的响应包会有Set-Cookie:rememberMe=deleteMe,可以借此判断该页面是否使用了shiro组件,实现代码如下:
之后如果判断出当前页面使用了shiro,就将所有的key跑一遍,然后利用dnslog平台的记录判断是否存在反序列化漏洞,利用uuid和key的一一对应关系,来判断是哪个key,如果判断出了key,就返回并在界面上显示,代码如下:
这里其实可以使用burp自带的collaborator来实现,但我在写的时候,调试时由于一直接收不到记录,就放弃了…最终选择用dnslog平台来实现,并且还用不了外部类httpclient,于是用java的原生类实现了获取dnslog域名和记录的方法,代码如下:
0x03 使用
打开burp的extender模块,点add
选择java,并选择对应目录下的jar包,点next即可安装成功
注意使用时要保证被动扫描的开关打开
所有流经burp的流量都会被动检测,存在漏洞的会输出,效果如下:
项目放到github上了,觉得好用的师傅可以点个star
https://github.com/amad3u4/ShiroScanner/
参考链接
来源:freebuf.com 2020-07-29 13:00:24 by: 栗悟饭与龟波气功
请登录后发表评论
注册