一款检测Shiro反序列化的Burp插件

  • A+
所属分类:安全工具

一款检测Shiro反序列化的Burp插件

0x01 序言

之前有大佬写了个fastjson的检测插件,于是想着能不能写个shiro反序列化检测的插件,最后就照着那个UI写了个shiro的检测插件。


0x02 历程

首先,网上的shiro利用工具都要用到一个名叫ysoserial的jar包,想要写出这个插件,就要去除这个jar包,在探测key的过程中,都会用到这个jar包的URLDNS来生成payload,在参考一篇文章后,发现其原理就是序列化一个HashMap,HashMap里存放了一个URL对象,其hashCode属性值为-1,借此就成功完成了去jar包,实现代码如下,在put前先要将hashcode的值改掉,不然会额外触发一次dns请求,结果就不准确:


一款检测Shiro反序列化的Burp插件

完成去jar包的过程后,接下来就要对流经的流量进行检测,当然不能对每个流经burp的请求包去跑一边key,那样开销太大,shiro组件有一个特征,就是你主动发一个请求,cookie带上rememberMe=123,它返回的响应包会有Set-Cookie:rememberMe=deleteMe,可以借此判断该页面是否使用了shiro组件,实现代码如下:


一款检测Shiro反序列化的Burp插件


之后如果判断出当前页面使用了shiro,就将所有的key跑一遍,然后利用dnslog平台的记录判断是否存在反序列化漏洞,利用uuid和key的一一对应关系,来判断是哪个key,如果判断出了key,就返回并在界面上显示,代码如下:


一款检测Shiro反序列化的Burp插件


一款检测Shiro反序列化的Burp插件


这里其实可以使用burp自带的collaborator来实现,但我在写的时候,调试时由于一直接收不到记录,就放弃了...最终选择用dnslog平台来实现,并且还用不了外部类httpclient,于是用java的原生类实现了获取dnslog域名和记录的方法,代码如下


一款检测Shiro反序列化的Burp插件


一款检测Shiro反序列化的Burp插件


0x03 使用


打开burp的extender模块,点add


一款检测Shiro反序列化的Burp插件


选择java,并选择对应目录下的jar包,点next即可安装成功


一款检测Shiro反序列化的Burp插件


注意使用时要保证被动扫描的开关打开


一款检测Shiro反序列化的Burp插件


所有流经burp的流量都会被动检测,存在漏洞的会输出,效果如下:


一款检测Shiro反序列化的Burp插件


项目放到github上了,觉得好用的师傅可以点个star

https://github.com/amad3u4/ShiroScanner/

一款检测Shiro反序列化的Burp插件

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: