哥斯拉是一款webshell权限管理工具,由java语言开发。它的特点有:全部类型的shell能绕过市面大部分的静态查杀、流量加密能绕过过市面绝大部分的流量Waf、Godzilla自带的插件是冰蝎、蚁剑不能比拟的。
它能实现的功能除了传统的命令执行、文件管理、数据库管理之外,根据shell类型的不同还包括了:MSF联动、绕过OpenBasedir、ZIP压缩、ZIP解压、代码执行、绕过DisableFunctions、Mimikatz、读取服务器FileZilla Navicat Sqlyog Winscp XMangager的配置信息以及密码、虚拟终端可以用netcat连接、Windows权限提升(2012-2019烂土豆)、读取服务器谷歌、IE、火狐浏览器保存的账号密码、Windows权限提升烂土豆的C#版本甜土豆、支持哥斯拉、 冰蝎、菜刀、ReGeorg的内存shell,并且支持卸载、屏幕截图、Servlet管理 、Servlet卸载、内存加载Jar、将Jar加载到SystemClassLoader。
01.加密流量提取思路
特征识别
互联网通讯协议众多,不同的应用通常会采用不同的协议,而各种协议都有其特殊的指纹,这些指纹可能是特定的端口、特定的字符串或者特定的比特序列。基于特征的识别技术,正是通过识别数据报文中的指纹信息来确定业务所承载的应用以及该应用是否存在异常。
如通过特征指纹识别常见的的黑客工具,如菜刀、蚁剑、冰蝎、Godzilla等webshell工具的通讯;Regeorg、Tunna、Frp、EarthWorm等网络穿透工具的通讯;CobaltStrike、MSF等渗透工具的通讯。
在加密流量检测上可以通过对加密握手过程中产生的JA3指纹,SNI信息,证书颁发者等信息,做特征匹配,精准识别到APT组织中使用的特种木马或基于框架生成的商业木马,发现内网失陷资产。
隐蔽信道
隐蔽信道可以分为使用未知协议与利用已知协议两种。
使用未知协议的隐蔽信道检测通过对网络层、应用层协议的匹配分析,对常见端口下的数据传输进行协议位特征的匹配,选择多种特征位进行数据匹配,当所有匹配特征都无法匹配该端口下的通讯数据,则认为通讯不是该端口该运行的协议,即为网络隐蔽信道通信。
对于利用已知协议正常业务字段的进行隐蔽通信部分,可以首先按照协议对流量进行分类解析,然后针对与每种协议进行字段划分,特征提取,统计建模,比如DNS隧道,APT组织经常使用DNS隧道来对木马进行指令下发数据传输等控制,僵尸网络使用DGA上线等。
02.哥斯拉软件安装及使用
安装
项目地址:
https://github.com/BeichenDream/Godzilla/releases下载.jar 文件运行java-jar godzilla.jar
靶场攻击
php搭建的网站和jsp搭建网站:
apache 服务器一般使用PHP搭建。tomcat 服务器一般使用jsp搭建。
木马是要在服务器上自动执行,执行脚本,所以木马格式要与服务器的语言保持一致。比如php的网站,要用php的木马。
访问网站index.php,可以看出是php网站,生成php的马.
使用upload的靶场
使用哥斯拉生成一个木马
修改木马后缀
改为.png,上传,同时用burp拦截,改包,改成.php再发送
检查一下,确实已经上传
哥斯拉连接
目标地址:
http://ip:8080/upload/test.php
连接成功
03.反编译获得源码
JD-GUI反编译下载工具
https://jd-gui.apponic.com/mac/
双击打开软件,将需要反编译的jar包拖到软件界面中
选中全部文件,点击File-Save All Sources保存反编译完的源码,选择保存路径
04.整体分析流程概述
哥斯拉全套的攻击流程
1、在客户端生成shell,生成shell的时候可以设置参数,包括:密码、密钥、有效载荷、加密器
2、生成shell.php(文件名可自定义,根据选择的有效载荷不同,可以有jsp、php、aspx等文件格式),该shell.php需要上传到攻击的目标主机上。
3、哥斯拉客户端进行连接
4、连接成功后,进入shell便可以进行操作。
数据包分析
1、在哥斯拉客户端进行连接的时候,会有一步测试连接的过程。一共产生三个数据包:
2、进入shell也会产生和测试连接时相同的数据包。
主要都是第一个数据包是发送payload.php的内容,后面的数据包是传入函数名和参数。以methodName=xxxx的形式。
(命令执行会是cmdline=xxx&methodName=xxx)
加密过程
客户端发送的request:
1、先对原始数据进行base64的编码
2、然后和密钥key按位异或
(这个密钥key是取shellsetting时自定义设置的那个密钥的md5值前16位。)
3、将得到的数据再base64一次,再url编码一次。
4、最后将得到的数据与密码进行拼接。
5、相对应的加密函数
服务器端的respond:
解密过程
1、先调用findStr函数删除服务器响应数据左右附加的混淆字符串(生成shell时设置的参数,自定义添加的冗余数据)
2、将得到的数据进行url解码然后base64解码3、最后再和shell连接密钥md5值的前16位按位异或,将结果最终base64解码即完成响应数据的解密。4、相对应的解密函数
解密代码
自己简单的写了一个,可以实现功能,但比较粗糙
04.哥斯拉加密分析
加密shell设置
1、密码:Post请求中的参数名称(默认密码为pass)
2、密钥:用于对请求数据进行加密,不过加密过程中并非直接使用密钥明文,而是计算密钥的md5值,然后取其前16位用于加密过程3、有效载荷4、加密器5、扰乱数据:用于自定义HTTP请求头,以及在最终的请求数据前后额外再追加一些扰乱数据,进一步降低流量的特征。
哥斯拉shell种类
整个shell的基本执行流程是:服务器接收到哥斯拉发送的第一个请求后,由于此时尚未建立session,所以将POST请求数据解密后(得到的内容为shell操作中所需要用到的相关php函数定义代码)存入session中,后续哥斯拉只会提交相关操作对应的函数名称(如获取目录中的文件列表对应的函数为getFile)和相关参数,这样哥斯拉的相关操作就不需要发送大量的请求数据。
它将密码和密钥进行拼接,然后进行md5的计算。一共32位。服务器端返回数据的时候,会将这个数据的前16位和后16位中间拼接上base64等加密过的返回数据。
05.抓包分析-查看“测试连接”操作所发送的数据包
设置代理,用burpsuite拦截,查看产生了什么数据包
代理端口设置为8888
测试链接后,产生三个数据包
第1个请求会发送大量数据,该请求不含有任何Cookie信息,服务器响应报文不含任何数据,但是会设置PHPSESSID,后续请求都会自动带上该Cookie。
第2、3个请求完全一致,并且数据量很少,会带上PHPSESSID
第一个数据包分析
点击测试按钮,会进行操作,根据这一点去查看源代码。
根据ui的布局,找到测试按钮相关UI,再去追溯到功能代码部分
函数initShellOpertion()
找到函数initShellOpertion()的位置,是ShellEntity中的
跳到import中,查找Shellentity
去ShellEntity.java找到函数initShellOpertion()
tip:函数的执行过程,以注释的方式在代码后面标明
查看cryptionModel 初始化的函数init
最终POST请求数据=左边追加数据+编码后的原始数据+右边追加数据
其中encode函数 加密的过程
数据的加密过程是:先对原始数据进行base64的编码,然后和密钥key按位异或,这个密钥key是取shellsetting时自定义设置的那个密钥的md5值前16位。将得到的数据再base64一次,再url编码一次,最后将得到的数据与密码进行拼接。
综上可知,哥斯拉发送的第一个POST请求中,请求数据的加密过程为:将原始数据进行base64编码,然后与shell密钥(生成shell时设置的那个,初始为key)md5值的前16位按位异或,得到编码数据,最终还需要对数据编码进行URL编码,拼接上shell密码(生成shell时设置的那个,作为POST请求参数的那个,初始为pass)。作为POST报文请求体,POST到服务器。
解密过程与加密过程正好相反:从pass=编码数据中提取编码数据,依次经过URL解码然后base64解码,再与shell密钥md5值的前16位按位异或,最后base64解码即可得到原始请求数据。
第二个数据包分析(2和3数据包是一样的)
第二个数据包的产生在this.payloadModel.test()
将evalFunc的内容单独提出来
解密函数D
删除混淆字符函数findStr(左右追加的部分,这个例子里没有追加)
06.解密部分
涉及到的函数
(可以运行的解密代码,在概述里附上了)
第一个数据包请求
内容是payload.php
第二、三个数据包请求
2、3数据包请求一样
07.抓包分析-进入shell的数据包
进入shell后,会产生三个数据包
第一个数据包
解码后发现,数据包内容是payload.php 的内容,也就是payload功能函数。之所以在第一个数据包将payload.php内容传入,目的是后续的shell操作请求功能的时候,只需要发送函数名称以及对应的函数参数即可。不需要再请求一大长串数据包。
第二个数据包
解码后发现,数据包内容是methodName=test,他产生于this.payloadModel.test()的eval函数中
第三个数据包
解码后发现,数据包内容是
methodName=getBasicsInfo
和第二个数据包分析思路一致,这里的getBasicsInfo也是payload.php中的函数。它的作用是,显示攻击目标的基础信息。包括php信息、用户、编码等一系列信息。
服务器端返回结果解密:
去掉前16位和后16位的冗余数据,将中间的base64部分解密(不需要再进行一步url解码了),可以得到详细的信息
08.抓包分析-其他操作数据包
执行命令
进入shell之后执行命令 ls
抓包:(产生一个数据包)
解码(有一些request的数据包base64有一些小错误,输出结果只需要再把个别部分base64解码一下就可以了。)
request解码内容为:cmdLine=ls&methodName=execCommand
服务器响应结果为ls执行后显示的内容
09.规则提取思路
1、默认的密码为pass,密钥为key,可以将默认的密码作为规则进行筛选。2、payload.php文件内容如下所示,其中定义了shell所有功能所需的一系列函数,哥斯拉第一次连接shell时,将这些函数定义发送给服务器并存储在session中,后续的shell操作只需要发送函数名称以及对应的函数参数即可。
数据包请求会有该流量特征:pass=methodName=‘函数名’
3、默认密钥key带来的第一个请求包,包含特征AQQWDQ==
4、多个php session
10.必要的安全防护设备
1、网络出口位置部署六方云防火墙,并及时更新特征库;
2、部署六方云神探产品,及时发现未知威胁
参考文章:
https://www.colasoft.com.cn/news/20220523.php
https://www.freebuf.com/sectool/285693.html