哥斯拉Godzilla使用中基于PHP的加密流量分析

转载于:https://blog.csdn.net/zlloveyouforever/article/details/129189396
哥斯拉Godzilla简介

据说是护网期间,各大厂商的waf不断在静态查杀、流量通信等方面对webshell进行拦截,众红队急需一款优秀的权限管理工具 , 虽说冰蝎3.0也不错 , 但是还是多多少少有一点bug的。于是@BeichenDream决定公开他所开发的一款shell权限管理工具,名为"哥斯拉"Godzilla。

相较于其他同类型工具的特点

  • 哥斯拉全部类型的shell均过市面所有静态查杀
  • 哥斯拉流量加密过市面全部流量waf
  • 哥斯拉的自带的插件是冰蝎、蚁剑不能比拟的

下载

http 复制代码
github地址:https://github.com/BeichenDream/Godzilla/releases
     
     
     

实验过程

首先使用哥斯拉生成一个马

内容如下简单粗暴

设置好代理尝试添加连接

点击测试连接后会发起三个POST请求

第一个请求没有携带cookie,但是设置了session,在之后的数据包中都会携带该session

第一个请求中需要关注的key值如下:

将其利用解密脚本进行解密

解密原理:从pass=编码数据中提取数据,依次URL解码和base64解码,再与shell密钥(如上生成马时key的md5值前16位字符为3c6e0b8a9c15224a)按位异或即可得到原始请求数据。

见上,哥斯拉第一次连接shell时,将这些函数定义发送给服务器并存储在session中,后续的shell操作只需要发送函数名称以及对应的函数参数即可。包含run,bypass_open_basedir,formatParameter,evalFunc等二十多个功能函数,具备代码执行、文件操作、数据库操作等诸多功能。

如上是第二个请求,将其进行解密:

plaintext 复制代码
     
     
     
      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           methodName\x02\x04\x00\x00\x00test  //请求内容
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           Ok   //返回内容
          
          
          
         
         
         

     

     
     
     

第2个POST请求实际上是向服务器提交了原始数据为methodName=test的加密数据,如果服务器返回值(解密后)为ok,则说明shell测试连接成功。

如上是第三个请求,和第二个请求略微不同。将其进行解密:

plaintext 复制代码
     
     
     
      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           methodName\x02\x07\x00\x00\x00g_close
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           ok
          
          
          
         
         
         

     

     
     
     

第三个请求和第二个请求类似,是测试连接时弹出success点击确认才会发起的请求.


进入连接

进入连接时会发起三个POST请求,前两个类似与上述前两个请求

如上是进入连接时发起的第三个请求.将其进行解密:

http 复制代码
     
     
     
      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           methodName\x02\r\x00\x00\x00getBasicsInfo
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           OsInfo : Windows NT LAPTOP-V7JUK7HN 10.0 uild 19044 (Windows 10) AMD64\nCurrentUser : \xe5\xa5\xa5\xe7\x89\x9\xe6\x9\xc\xe7\x9a\x84\xe5\x0\x8f\xe6\x80\xaa\xe5\x85\xd\nREMOTE_ADDR : 127
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           .0.0.1\nREMOTE_PORT : 13365\nHTTP_X_FORWARDED_FOR : \nHTTP_CLIENT_IP : \nSERVER_ADDR : 127.0.0.1\nSERVER_NAME : 127.0.0.1\nSERVER_PORT : 80\ndisale_functions : \nOpen_asedir : \ntimezo
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           ne : Asia/Shanghai\nencode : \nextension_dir : D:\\phpstudy\\phpstudy_pro\\Extensions\\php\\php7.3.4nts\\ext\nsystempdir : C:\\WINDOWS/\ninclude_path : .;C:\\php\\pear\nDOCUMENT_ROOT :
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
            D:/phpstudy/phpstudy_pro/WWW\nPHP_SAPI : cgi-fcgi\nPHP_VERSION : 7.3.4\nPHP_INT_SIZE : 8\nProcessArch : x64\nPHP_OS : WINNT\ncanCallGzipDecode : 1\ncanCallGzipEncode : 1\nsession_name
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
            : PHPSESSID\nsession_save_path : D:\\phpstudy\\phpstudy_pro\\Extensions\\tmp\\tmp\nsession_save_handler : files\nsession_serialize_handler : php\nuser_ini_filename : .user.ini\nmemory
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           _limit : 256M\nupload_max_filesize : 100M\npost_max_size : 100M\nmax_execution_time : 0\nmax_input_time : 60\ndefault_socket_timeout : 60\nmygid : 0\nmypid : 19680\nSERVER_SOFTWAREypid
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
            : Apache/2.4.39 (Win64) OpenSSL/1.1.1 mod_fcgid/2.3.9a mod_log_rotate/1.02\nloaded_extensions : Core,cmath,calendar,ctype,date,filter,hash,iconv,json,SPL,pcre,readline,Reflection,sess
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           ion,standard,mysqlnd,tokenizer,zip,zli,lixml,dom,PDO,openssl,SimpleXML,xml,wddx,xmlreader,xmlwriter,cgi-fcgi,curl,fileinfo,gd,mstring,mysqli,Phar,pdo_mysql,pdo_sqlite\nshort_open_tag :
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
            true\nasp_tags : false\nsafe_mode : false\nCurrentDir : D:/phpstudy/phpstudy_pro/WWW/p/vul/unsafeupload/uploads\nFileRoot : C:/;D:/;F:/;\n
          
          
          
         
         
         

     

     
     
     

即请求报文为获取服务器基础信息的命令getBasicsInfo,返回包中是服务器的基础信息.


命令执行

如下在终端输入命令whoami

发起了单个请求如下:

将其解密:

稍微改进一下脚本:

plaintext 复制代码
     
     
     
      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           cmdLineUcmd /c "cd /d "D:/phpstudy/phpstudy_pro/WWW/p/vul/unsafeupload/uploads/"&whoami"2>&1methodName
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           execCommand
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           laptop-v7juk7hn\\\x0\xc2\xcc\xd8\xc2\xfc\x5\xc4\xd0\xa1\x9\xd6\xca\xde\r\n
          
          
          
         
         
         

     

     
     
     

即在该路径下执行命令whoami。Cmdline创建一个命令行解析器,值是路径和具体命令,methodName参数的值为execCommand,即执行命令。返回内容即执行命令的回显,如上是存在webshell的服务器当前用户名laptop-v7juk7hn。


点击刷新

进行解密:

http 复制代码
     
     
     
      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           methodNamegetFiledirName8D:/phpstudy/phpstudy_pro/WWW/p/vul/unsafeupload/uploads/
          
          
          
         
         
         

      
* 
         
         
         
          
          
          
         
         
         

         
         
         

          
          
          
           
           ok\nD:/phpstudy/phpstudy_pro/WWW/p/vul/unsafeupload/uploads//\nshell.php\t1\t2022-11-07 21:37:56\t30\tRW\n
          
          
          
         
         
         

     

     
     
     

methodName是参数,getFiledirName是一个方法,获取指定路径下的所有文件名,返回内容即ok,后接该路径下存在的文件以及当前时间。


上传文件

如下上传一个fscan工具:

发起单个请求如下:

由于数据过于庞大,所以请求数据没有进行解密。猜测key的内容就是这个工具的加密数据,返回包解密即为ok.

总结

哥斯拉的大部分操作都是单请求命令,例如文件管理中的文件浏览功能,命令执行功能,刷新功能等等。部分命令是多请求命令,例如通过插件实现的功能大部分都是多请求命令。


哥斯拉的流量特征
  • Cookie (强特征)

在请求包的Cookie中有一个非常致命的特征,最后的分号。标准的HTTP请求中最后一个Cookie的值是不应该出现;的,这个可以作为现阶段的一个辅助识别特征。

  • 响应体特征 (强特征)

从代码可以看到会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。

  • 连接特征(强特征)

请求1:发送一段固定代码(payload),返回内容为空;

请求2:发送一段固定代码(test),返回内容为固定字符串,如下

http 复制代码
72a9c691ccdaab98fL1tMGI4YTljO/79NDQm7r9PZzBiOA==b4c4e1f6ddd2a488
     
     
     

解密后即为ok。如果连接失败返回内容为空,且不发起请求3;

请求3:发送一段固定代码(getBacisInfo),返回内容为固定字符串;

补充:使用哥斯拉时点击测试连接会立即发起请求1和2,如果弹出success并点击确认会立即发起请求3,同理,测试结果失败则不会发起请求3并且请求2的返回内容为空。直接添加连接而不测试连接则不会发起任何请求,当进入连接或其他操作时会优先发起请求1和请求2,连接失败会提示初始化失败,不会发起请求3且请求2的返回内容为空。

  • 请求中Accept和响应中Cache-Control字段(弱特征)

所有请求中Accept:

http 复制代码
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
     
     
     

所有响应中Cache-Control:

http 复制代码
no-store, no-cache, must-revalidate
     
     
     

以上两个字段都可以修改,所以作为弱特征参考。

相关推荐
u0103055271 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055272 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝3 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055274 天前
Java图像处理实战指南
人工智能·1024程序员节
u0103055274 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055276 天前
Java实用类应用精讲
人工智能·1024程序员节
u0103055277 天前
Java I/O核心操作实战
人工智能·1024程序员节
u0103055278 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节
u0103055278 天前
Java模块化编程实战指南
人工智能·笔记·1024程序员节
u0103055279 天前
使用BufferedReader读取控制台输入
人工智能·1024程序员节