Webshell流量分析之哥斯拉Godzilla&冰蝎Behinder

您所在的位置:网站首页 哥斯拉webshell请求包加密过程 Webshell流量分析之哥斯拉Godzilla&冰蝎Behinder

Webshell流量分析之哥斯拉Godzilla&冰蝎Behinder

2024-06-05 16:08| 来源: 网络整理| 查看: 265

目录哥斯拉PHP Shell初始的3次请求JSP Shell冰蝎PHP Shell请求和响应数据解密C/S的AES密钥

哥斯拉和冰蝎相较于菜刀蚁剑,它们的通信流量是加密的,有比较好的抗检测能力。

菜刀和蚁剑流量分析:Webshell流量分析之菜刀Chopper&蚁剑AntSword

哥斯拉

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

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

在使用哥斯拉之前需要准备 jdk1.8 的环境。

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

PHP Shell

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

加密器有 3 种:

image

PHP_EVAL_XOR_BASE64 生成的shell:

default_xor_base64 生成的php shell:

default_aes 生成的php shell:

请求和响应数据解密

这里将采用AES加密模式的shell上传到服务器,如图新增Shell,加密类型选择自定义:

image

连接成功:

image

冰蝎的初始通信过程会产生 2 个请求数据包:

image

大致的通信流程:

本地对Payload进行加密,然后通过POST请求发送给远程服务端

服务端收到Payload密文后,利用解密算法进行解密

服务端执行解密后的Payload,并获取执行结果

服务端对Payload执行结果进行加密,然后返回给本地客户端

客户端收到响应密文后,利用解密算法解密,得到响应内容明文

尝试对第 1 个请求报文进行默认的aes密钥解密:

推荐一个AES加解密工具网站:https://www.toolhelper.cn/SymmetricEncryption/AES

根据上面生默认生成的shell可知,AES加密采用的是ECB模式,密钥长度128bits。这里选择对应选项,使用默认密钥e45e329feb5d925b进行解密。

image

获得解密后的冰蝎请求中的PHP代码:

@error_reporting(0); function main($content) { $result = array(); $result["status"] = base64_encode("success"); $result["msg"] = base64_encode($content); @session_start(); //初始化session,避免connect之后直接background,后续getresult无法获取cookie echo encrypt(json_encode($result)); } function Encrypt($data) { $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的�?16位,默认连接密码rebeyond return base64_encode(openssl_encrypt($data, "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING)); } $content="N1BEeVp0Q0lXUlQ1aERsaFgxOEc2RlgyOEY1UE1XbWdVc3czQXZCcmYya2NzZXk5VVlqTTNTVzRXWWZkdXZjVjgxcmpjNXRLcWdNYldGbjdTbjhudEFwQktOQjdCWklZRnFTVEl6QTVHZGtDREdBZUx0d3prOWFiVGtzZ2ttMlNackIzdjY0bVpHc2kwV05hd2ZPU28wTlRnOVhyRmQydlM5bVM1WWs1QVpVNk4yREw5cDg2YzNoM2xnU2UxNjF6ZEFsamJGM0R6QjlEREFtWkMzZkNCMXIzWGVoc1licnE1dGwxNW83Rlo1RXJOZ0tjN2tIa0tzeFpzbHBvNWhMUGExd0drM1c5Y0VVVG1wYVBYV0l3VUZ6Q080YjBRcEVTbGVKQUN5MWZPcHBtOTJwRkdNWGpxWFNRMzZsUjJoQ2J5M0pKbVhFVEx5YmxHQnY4N2ZsTU44dVB6MDAwYktIaFRMUXhaS1JoM3FmT05GVXNyRHpUTm12R1FpTXVhNGpFNlB0RjZURlFzMFl4UnNoSGF2UDF1VW9qMmh0VlQxUE9ZdTFPRjZtZzhQR0EyUHFEcEYzbkZDcW1UaGpKdktYd3hQSXNFU2VkNVlaTGtteEpMeHlPWWNWV0RpeGp6Um9XU1Yya0tKbkt4clZqUWVaSm83M0lsMnhKOEdZUmtWbHVQZUVnU2hSeFk1c3ZNc2ZyZVhaZXBVclA4TnR0bjNyNW0xYURqb1FWQWpFdnBtaDIzMkFENnFHRHh5enJ0c25mQlpEMFdhZnlSQ3k4WlFqSW5JWVRaaWVUVHRhUXREY0k0cWdxN2VtYUszVFlNWFFMUW1VcDlWako3ZjVWdHlTU1VQdmFnQTF6N2VCOHpEMDIyN1EyQnJncDFQTzM4S1pDQnMzU0VRdzNKdzh4VW1xSk13cm1vR1pNbzhpT2k1cTEydzI0c2VnMW13czBmMmpJOVltVzlJTVJTY0dES3hnc3JUTG5qQ2NFck5SSTM3TmFEYlA5M2JzZGE2WUIwV0xMV0RMVlJ2U2k0Y1BiNUJT";$content=base64_decode($content); main($content);

代码中content这个变量名称和里面的内容为随机生成的,目的是为了绕过Content-Length。

然后再在对响应内容AES解密:

image

解密内容:

{"status":"c3VjY2Vzcw==","msg":"N1BEeVp0Q0lXUlQ1aERsaFgxOEc2RlgyOEY1UE1XbWdVc3czQXZCcmYya2NzZXk5VVlqTTNTVzRXWWZkdXZjVjgxcmpjNXRLcWdNYldGbjdTbjhudEFwQktOQjdCWklZRnFTVEl6QTVHZGtDREdBZUx0d3prOWFiVGtzZ2ttMlNackIzdjY0bVpHc2kwV05hd2ZPU28wTlRnOVhyRmQydlM5bVM1WWs1QVpVNk4yREw5cDg2YzNoM2xnU2UxNjF6ZEFsamJGM0R6QjlEREFtWkMzZkNCMXIzWGVoc1licnE1dGwxNW83Rlo1RXJOZ0tjN2tIa0tzeFpzbHBvNWhMUGExd0drM1c5Y0VVVG1wYVBYV0l3VUZ6Q080YjBRcEVTbGVKQUN5MWZPcHBtOTJwRkdNWGpxWFNRMzZsUjJoQ2J5M0pKbVhFVEx5YmxHQnY4N2ZsTU44dVB6MDAwYktIaFRMUXhaS1JoM3FmT05GVXNyRHpUTm12R1FpTXVhNGpFNlB0RjZURlFzMFl4UnNoSGF2UDF1VW9qMmh0VlQxUE9ZdTFPRjZtZzhQR0EyUHFEcEYzbkZDcW1UaGpKdktYd3hQSXNFU2VkNVlaTGtteEpMeHlPWWNWV0RpeGp6Um9XU1Yya0tKbkt4clZqUWVaSm83M0lsMnhKOEdZUmtWbHVQZUVnU2hSeFk1c3ZNc2ZyZVhaZXBVclA4TnR0bjNyNW0xYURqb1FWQWpFdnBtaDIzMkFENnFHRHh5enJ0c25mQlpEMFdhZnlSQ3k4WlFqSW5JWVRaaWVUVHRhUXREY0k0cWdxN2VtYUszVFlNWFFMUW1VcDlWako3ZjVWdHlTU1VQdmFnQTF6N2VCOHpEMDIyN1EyQnJncDFQTzM4S1pDQnMzU0VRdzNKdzh4VW1xSk13cm1vR1pNbzhpT2k1cTEydzI0c2VnMW13czBmMmpJOVltVzlJTVJTY0dES3hnc3JUTG5qQ2NFck5SSTM3TmFEYlA5M2JzZGE2WUIwV0xMV0RMVlJ2U2k0Y1BiNUJT"}

可以看到返回的格式为:

{"status":"success","msg":"...base64..."}

其中msg是一段Base64字符串,它就是请求报文中content经过Base64编码,然后再AES加密后生成的。其作用和请求中的content一样都是为了绕过Content-Length。

C/S的AES密钥

分析第一个请求和响应,发现并没传递AES密钥的部分,尽管这里使用默认的密钥,C/S如何共享密钥?

原因:

冰蝎的Webshell中这个AES密钥就是连接密码MD5值的前16位。

默认连接密码为rebeyond,它的MD5值的前16位就是前面多次提到的e45e329feb5d925b。所以当连接密码确定后,本地生成的服务端shell中就会自带AES密钥,并不需要客户端与服务端的请求和响应来获取。

对通信协议的分析就到这里,更加详细的内容参考官方给出的文档:https://mp.weixin.qq.com/s/EwY8if6ed_hZ3nQBiC3o7A

分析数据包的头部,冰蝎的数据包也会存在一些弱特征:

image

比如:

Accept 字段:

Accept: application/json, text/javascript, */*; q=0.01

Content-Type 字段:

Content-type: application/x-www-form-urlencoded

Connection 长连接:

Connection: Keep-Alive

冰蝎4.0 内置10种 User-Agent 请求头:

"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0", "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"

总结:

哥斯拉和冰蝎的流量特征分析,它们都会存在请求Header固定字段属于弱特征。除了这些,上传的Webshell文件也包含固定特征,检测流量中是否包含Webshell固定代码,判断是否为上传Webshell文件。

参考文章: http://danielw.top/index.php/daniel/251/ https://blog.csdn.net/miraclehw/article/details/129701611 https://cn-sec.com/archives/2655301.html https://www.cnblogs.com/mr-ryan/p/17807521.html https://www.cheetah-lab.com/?p=159

若有错误,欢迎指正!o( ̄▽ ̄)ブ



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3