16

之前有大佬写了个fastjson的的检测插件,照着那个写了个shiro的检测插件。

 4 years ago
source link: https://www.freebuf.com/sectool/244886.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

0x01 序言

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

0x02 历程

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

r6fUf2.jpg!mobile

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

vMVNfuM.jpg!mobile

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

ey6Zvqf.jpg!mobilev67jUbu.jpg!mobile

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

MJRRzeb.jpg!mobile

qaqAvuv.jpg!mobile

0x03 使用

打开burp的extender模块,点add

Rj6vEz7.jpg!mobile

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

RzeQVr3.jpg!mobile

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

EZNfMjN.jpg!mobile

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

RbaE7b.jpg!mobile

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

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

参考链接

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK