长亭百川云 - 文章详情

冰蝎改造之不改动客户端=>内存马

零队

103

2024-07-13

前言

做了login me again之后,觉得很有趣,复现完之后开始想着怎么玩点骚的,在我们日常使用中,与其要做一个reGeorge(reGeorge mac内网不解析dns太坑了),实际上大马可能才是正在的需求,而开源工具中还是冰蝎大家最爱用,虽然现在被各种流量检测,但是各家都有自己的免杀手段,所以这里就简单的教大家如何把东西注入shiro+spring环境中(这个环境比较有代表性

原始的马

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*" %>

代码美化之后不难发现,里面使用了Tomact中的PageContext,位于javax.servlet.jsp.PageContext,但是在Springboot中实现的是只有tomcat核心,也就是阉割版本的tomacat,恰好这个是没有的,因此这么获取成了关键

PS: 关于没有PageContext的解决方案,之前已经有了一篇文章https://mp.weixin.qq.com/s/n1wrjep4FVtBkOxLouAYfQ ,最大的问题是要修改客户端,对我们这样的菜鸡来说很难,而且还让自己的工具包变臃肿,本次不再改变客户端的情况,完成内存马的注入

改造开始

下面基于读者已经理解了,如何写入reGeorge内存马为基础,如有疑问,请去查看 https://mp.weixin.qq.com/s/whOYVsI-AkvUJTeeDWL5dA 以及login me again wp

  • 首先先了解冰蝎的执行思路
  1. 密钥交换pass,pass存储在session中

  2. AES解码后将传入的数据进行解码,解码后还原要加载的字节码,实例化后,调用equals函数,传入pageContext,通过pageContext带出回显

    String result = buildJson(entity, true);
    
  • 于是乎我们对PageContxt的要求也就出来了
  1. classname : javax.servlet.jsp.PageContext

  2. 实现 setResponse() getResponse() getSession() setRequest() getResponse()

  3. 这里的response就需要调用当前环境中的response,所以就拿最简单的ServeletRequest,好消息是getSession这个函数也是自带的,就很舒服,只需要cast一下即可。

最后的PageContext

public class PageContext  {

我们可以尝试注入一下,这里我起了一个简单的shiro+springboot的环境

image-20200723214821668

Ps:从github上直接找的环境,可能因为原生不带有commom-collection的包,所以无法打成功

image-20200723215145822

  • 这时候我们在VM中查看一下

    image-20200723215635157

发现我们成功注入了一个class,然后我天真的以为只需要像reGeorge一样,把代码复制进去即可

所以有了初始版本的Filter内存冰蝎

踩坑继续

package reGeorg;

报错汇总如下:

1. 无法new一个新的PageContext2. 无法调用class U中的方法

这时候回忆一下我们的流程:

1. 注入PageContext并实例化2. 注入冰蝎并实例化

但是我们要思考new是一个怎么样的过程

1.首先去JVM 的方法区中区寻找类的class对象,如果能找到,则按照定义生成对象,找不到则转2

解决方案

  1. 自定义的类加载器:

    因为我们不能实例化自己的类加载器,所以我们就使用反射的方法,调用ClassLoard,不过这里也有一个坑点,就是抽象类,是不可以作为invoke()的第一个参数,所以要使用一个他的继承类作为替代品

2.PageContext: 由于我们只有一个实例化的class,我的方案就是服用他,将他作为一个属性,注入到冰蝎马的实例过程中,即设置一个含参的构造方法

public MemBehinder2(PageContext pageContext){
  • 最后实现成果

image-20200723222617152

  • 出现密钥交互

image-20200723222916478

  • 连接成果

image-20200723223133705

总结

  1. 冰蝎出现密钥交互,并不代表成功了,原因在于密钥交互的回显用的并不是PageContext,不能作为我们注入成功的依据

  2. 学会研究报错,报错会告诉我们哪里出了问题

  3. FB师傅tql

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备2024055124号-2