一款检测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请求,结果就不准确:

图片[1]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

图片[2]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

图片[3]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科图片[4]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

图片[5]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

图片[6]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

0x03 使用

打开burp的extender模块,点add

图片[7]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

图片[8]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

图片[9]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

图片[10]-一款检测Shiro反序列化的Burp插件 – 作者:栗悟饭与龟波气功-安全小百科

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

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

参考链接

https://github.com/p1g3/Fastjson-Scanner

https://www.anquanke.com/post/id/201762

来源:freebuf.com 2020-07-29 13:00:24 by: 栗悟饭与龟波气功

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论