^

开发shiro蜜罐遇到的一些问题

前情概要

我曾经写过一篇文章,https://rce.ink/index/view/366.go

大概意思就是php的网站模拟shiro工具探测的过程配合响应,实现可以根据指定key让工具实现逼真的测试效果,如图所示:

image.png

这样攻击者会觉得网站是shiro框架,并且被我爆破出了一个key。再配合修改phpsessionid为jsessionid,脚本伪静态修改后缀为jsp达到更好的效果。

我的博客是由webman开发,纯纯php框架。

后续开发

上次写到那里我就去做更有意思的项目了。直到最近我才开始对指定利用链检测、命令回显等功能进行完善。

我写了一堆php代码来配合攻击者使用工具进行利用链测试的场景,大概可以实现下面的效果:

image.png

攻击者发现可以使用这个cc链进行攻击的时候,肯定会进行命令执行。那么我也只需要写脚本来配合他的一些场景给响应的回显即可,在这里具体针对一下j1anfen师傅开发的shiro-attack工具。我们反编译工具中的AttackService.class,代码如下

image.png

通过设置序列化的恶意attackRememberMe到cookie,对用户输入命令进行base64编码放入请求头,取响应包body中的内容进行字符串$$$分割,然后取第二组数据,也就是响应结果,在进行base64解码拿到命令回显。

写一个配合实现的脚本,也就是获取到header c的时候,根据命令回显虚假的命令执行结果。但是执行命令的时候抛出下标越界的错误,也就是响应包不是类似$$$data$$$的字符串

image.png

工具可以设置代理,为了看具体请求是怎么样的,我挂了一个burpsuite代理,抓到请求包后发包,结果响应是正常的。

image.png

image.png

没办法 只能对jar包打断点,使用idea jvm remote debug 的方法,对工具反编译后,带参数运行

java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y-jar /Users/depy/desktop/1.jar

image.png

在  String responseText = this.bodyHttpRequest(header, "");  处打一个断点,这样我们能看到没挂代理的时候,请求类返回结果是什么。

然后发送命令执行的指令,在代理请求下正常

image.png

在关闭代理的情况下 数据变成的乱码 让我非常疑惑 使用自己写的工具、浏览器访问都正常 就工具不正常

image.png

一开始实在没想明白 一直觉得是工具有问题 但是转过头想那为啥其他有漏洞的网站可以测试呢?所以显然是自己的网站有问题 我不断观察响应包 发现一个header

image.png

捏吗 这不是gzip压缩的标头么 看了下数据貌似是被压缩了 这我才想到 我特么网站用的是nginx啊 

image.png

很好 果然是开了 把on改成off 标头就消失了 中间件此时不会对数据进行压缩

image.png

image.png

然后就可以正常执行命令了

image.png

这样我们可以愉快的构造一些虚假的命令执行结果继续浪费攻击者的时间 让他对着php一顿shiro反序列化了 似乎拿下了网站 似乎又没拿下

原因

1.burpsuite等支持自动对响应做gzip解压缩

2.工具使用的请求类URLConnection不支持自动做gzip解压或者版本太低?我使用自己java工具测试的时候是正常的,看了下我用的是httpurlconnection

image.png

image.png所以使用j1anfen师傅、summersec师傅的工具的时候 建议直接挂burpsuite代理 防止遇到gzip解压的问题让你觉得是命令执行没有回显 

后续

demo例子很简单,只是简单的根据工具给的参数,然后给出相应的headerset或者是回显即可。这样的问题就是如果有多种shiro探测工具,探测利用链和回显以及命令执行的方式是多种多样的,我的思路是提取工具序列化数据里的字节码,那么可以通过ASM去分析字节码,再通过一些逻辑与指令去做相应的操作。

不过回到一开始的想法,好用的测试工具只有那么几个,目的是为了消耗攻击者的时间,所以只需要把特征都保存下来设置一遍,基本也可以实现想要的结果。很简单的实验,师傅们轻喷呜呜。

image.png