凯发k8国际

    新闻动态

    News information

    攻击工具分析丨哥斯拉v4.0流量解密及特征流量提取

    <<返回

    2023年05月25日 15:00

    哥斯拉是一款webshell权限管理工具,由java语言开发。

    功能特点:全部类型的shell能绕过市面大部分的静态查杀、流量加密能绕过过市面绝大部分的流量Waf、Godzilla自带的插件是冰蝎、蚁剑不能比拟的。它能实现的功能除了传统的命令执行、文件管理、数据库管理之外,根据shell类型的不同还包括了:MSF联动、绕过OpenBasedir、ZIP压缩和压、代码执行、绕过 DisableFunctions、Mimikatz、读取服务器配置信息以及密码、虚拟终可以用netcat连接 、Windows权限提升(2012-2019烂土豆)、读取服务器谷歌、IE、火狐浏览器保存的账号码、Windows权限提升烂土豆的C#本 甜土豆、支持哥斯拉、冰蝎、菜刀ReGeorg的内存shell并且支持卸载、屏幕截图、Servlet管载、内存加载、Jar加载到 SystemClassLoader。
    4.0相对以前的版本,增加了C#, PHP, ASP类型的eval payload,加密流程也进行了升级,给予了更多的加密器,界面也更简洁好看,功能全面好用。


    01.
    哥斯拉软件的安装及使用


    1、安装

    项目地址:

    http://github.com/BeichenDream/Godzilla/releases

    下载.jar 文件。

    运行java -jar godzilla.jar


    2、靶场攻击

    php搭建的网站和jsp搭建网站:
    apache 服务器一般使用PHP搭建。tomcat 服务器一般使用jsp搭建。

    木马是要在服务器上自动执行,执行脚本,所以木马格式要与服务器的语言保持一致。比如php的网站,要用php的木马。

    访问网站index.php,可以看出是php网站,生成php的马


    使用upload的靶场

    1.jpg


    使用哥斯拉生成一个木马

    后续的实验,都会以该木马为例子。

    分析PHP_EVAL_XOR_BASE64的加密方式。


    2.png


    3.png


    将哥斯拉生成的木马上传到靶场

    挑一个靶场环境,比如第一个。burp拦截,改包,改成.php再发送。

    将生成的木马shell.php 成功上传到目标主机。


    3、哥斯拉连接

    目标地址:http://ip:8080/upload/shell.php


    02.

    反编译取得软件源码


    1、JD-GUI 反编译下载工具


    4.jpg


    双击打开软件,将需要反编译的jar包拖到软件界面中

    选中全部文件,点击File-Save All Sources保存反编译完的源码,选择保存路径


    5.png


    2、哥斯拉加密分析

    全套的攻击流程

    (1)在客户端生成shell,生成shell的时候可以设置参数
    包括:密码、密钥、有效载荷、加密器
    ① 密码:Post请求中的参数名称(本次实验的密码为passwd),以及用于和密钥一起进行加密运算。


    6.png


    ② 密钥:用于对请求数据进行加密,不过加密过程中并非直接使用密钥明文,而是计算密钥的md5值,然后取其前16位用于加密过程(本次实验的密钥为keymd,md5值为:083c7c062cb29c75499967759dcd2423)
    ③ 有效载荷:分为ASP、java、php、c#四种类型的payload
    ④ 加密器:分为base64和raw、evalbase64三大类。
    ⑤ 扰乱数据:用于自定义HTTP请求头,以及在最终的请求数据前后额外再追加一些扰乱数据,进一步降低流量的特征。


    7.png


    (2)生成shell.php(文件名可自定义,根据选择的有效载荷不同,可以有jsp、php、aspx等文件格式),该shell.php需要上传到攻击的目标主机上。
    ① 这个文件,会出现在数据包的POST请求中。
    ② 该文件会将密码、密钥的md5值前16位明文写入。
    ③ 该文件的实现功能还有:将密码和密钥进行拼接,然后进行md5的计算。一共32位。服务器端返回数据的时候,会进行拼接。即服务器端返回数据 = md5前16位+加密数据+md5后16位。(加密数据可以顺利获得对服务器端的解密算法进行解密)

    (3)哥斯拉客户端进行连接
    ① URL是目标主机上的shell.php
    ② 请求配置的参数,可以添加冗余数据,该冗余数据会在数据的正式内容的前后添加进去。

    (4)连接成功后,进入shell便可以进行操作。


    生成的shell

    以PHP_EVAL_XOR_BASE64的加密方式为例。生成的木马shell.php内容为


    8.jpg


    2、抓包分析-查看“测试连接”操作会产生的数据包

    设置代理,用burpsuite拦截,查看产生的数据包


    9.png

    会产生三个数据包,并会设置PHPSESSID


    10.png


    从数据包中可以发现。request中发送的数据包,是passwd=xxxx 的形式。根据生成木马shell.php中的内容可知。web服务器对“passwd“取值后,然后顺利获得eval()函数执行“passwd”里面的内容。即实际操作内容是passwd后面一大串加密过的字符。


    对第一个数据包进行分析追溯

    连接时,功能代码部分在core/shell/ShellEntity.java 找到initShellOpertion()函数


    11.png


    该方法第一时间初始化一个Http对象赋值给ShellEntity对象的http成员变量(每个ShellEntity对象都有自己的http成员变量, 用于各ShellEntity的Http请求), 然后初始化payloadModel和cryptionModel对象。


    运行的时候,会调用init方法进行初始化,以及调用了test函数,对状态进行了判断。所以进一步分析这两个函数。


    因为代码是反编译过来的,所以不能直接用ctrl定位到方法的定义,需要手动去找。


    init方法

    路径shells/cryptions/phpXor/PhpEvalXor.java


    12.1.png


    12.png

    13.jpg

    14.jpg


    对2、3数据包进行追溯(2、3数据包内容一样)

    test方法:test()函数 是一个布尔型的。测试成功后,会返回true。

    if函数顺利运行,连接成功。


    15.jpg

    16.jpg


    将服务器的返回结果格式修改后,与ok对⽐,判断为ok则连接成功。


    17.jpg


    说明在evalFunc函数执行过程中,已经得到了明文的服务器返回数据,因此服务器返回报文的解密过程肯定是在evalFunc函数中。


    18.jpg


    3、对sendHttpResponse相关的数据包请求方法进行分析

    代码路径:util/http/Http.java


    19.jpg


    该段代码调用了getCryptionModule()对请求数据进行了加密,后面对数据部分进行了剥离,删除了加在真实数据左右两边的冗杂数据(shell设定时添加的多余数据)


    03.

    加密函数分析


    20.jpg

    21.jpg


    evalContent的内容是:


    22.jpg


    其中evalContent的内容格式是:


    23.jpg


    24.jpg

    25.jpg


    数据包:


    26.jpg


    最终解密流程:


    27.jpg


    参考文章:

    http://xz.aliyun.com/t/10556