流量加密怎么办?主流webshell管理工具流量解密分析( 二 )

结合asp脚本,分析的出asp请求和响应使用xor加密可以解析;
响应格式与php相同,status与msg均为base64编码,解开即可得到明文 。

流量加密怎么办?主流webshell管理工具流量解密分析

文章插图
 
2.3 CSharp
通过阅读源码可知,aspx使用的AES/CBC/PKCS5Padding,iv为key 。
public static byte[] EncryptForCSharp(byte[] bs, String key) throws Exception {byte[] raw = key.getBytes("utf-8");IvParameterSpec iv = new IvParameterSpec(raw);SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(1, skeySpec, iv);byte[] encrypted = cipher.doFinal(bs);return encrypted;}由于aspx的payload为dll文件,请求解密后为pe文件格式,可将文件转存后用ida进行分析 。
响应解密出来同样是一个json:
流量加密怎么办?主流webshell管理工具流量解密分析

文章插图
 
对应信息也需要base64解码为明文 。
2.4 JAVA
冰蝎对jsp,jspx系列的处理是一致的 。阅读源码可知,使用的是AES/ECB/PKCS5Padding.
public static byte[] DecryptForJava(byte[] bs, String key) throws Exception {byte[] raw = key.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(2, skeySpec);byte[] decrypted = cipher.doFinal(bs);return decrypted;}由于传输的文件为java的class文件,请求解密后为class文件格式,可将文件转存后用idea进行分析 。
响应解密出来同样是json,对应信息也需要base64节码为明文 。
流量加密怎么办?主流webshell管理工具流量解密分析

文章插图
 
三、哥斯拉
相比于冰蝎,哥斯拉可选的加密方式就有很多种了,每一种都对应着一个server脚本 。
流量加密怎么办?主流webshell管理工具流量解密分析

文章插图
 
且除了xor的加密方式,响应都会经过findstr函数,首尾各去掉的16位
流量加密怎么办?主流webshell管理工具流量解密分析

文章插图
 

流量加密怎么办?主流webshell管理工具流量解密分析

文章插图
 
3.1 phpXor
3.1.1 PhpEvalXor
分析代码及流量,请求为明文可执行代码+加密数据,响应为去掉首尾后,先解base64然后解xor 。
【流量加密怎么办?主流webshell管理工具流量解密分析】关键代码如下:
public byte[] decode(byte[] data) {if (data != null && data.length > 0) {try {return this.D(this.findStr(data));} catch (Exception var3) {Log.error(var3);return null;}} else {return data;}}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;}3.1.2 PhpXor
分析代码及流量,请求位xor+base64,响应为去掉首尾后,xor+base64
关键代码如下:
public byte[] encode(byte[] data) {try {return this.E(data);} catch (Exception var3) {Log.error(var3);return null;}}public byte[] decode(byte[] data) {if (data != null && data.length > 0) {try {return this.D(this.findStr(data));} catch (Exception var3) {Log.error(var3);return null;}} else {return data;}}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;} 
3.1.3 PhpXorRaw
分析代码及流量,请求为xor,响应为xor
关键代码如下:
public byte[] encode(byte[] data) {try {return this.E(data);} catch (Exception var3) {Log.error(var3);return null;}}public byte[] decode(byte[] data) {if (data != null && data.length > 0) {try {return this.D(data);} catch (Exception var3) {Log.error(var3);return null;}} else {return data;}}public byte[] E(byte[] cs) {int len = cs.length;for(int i = 0; i < len; ++i) {cs[i] ^= this.key[i + 1 & 15];}return cs;}public byte[] D(byte[] cs) {int len = cs.length;for(int i = 0; i < len; ++i) {cs[i] ^= this.key[i + 1 & 15];}return cs;} 
3.2 JavaAes
3.2.1 JavaAesBase64
请求响应均为为aes+base64,key就是参数key,模式为ECB
关键代码如下:
this.encodeCipher = Cipher.getInstance("AES");this.decodeCipher = Cipher.getInstance("AES");this.encodeCipher.init(1, new SecretKeySpec(this.key.getBytes(), "AES"));this.decodeCipher.init(2, new SecretKeySpec(this.key.getBytes(), "AES"));public byte[] encode(byte[] data) {try {return (this.pass + "=" + URLEncoder.encode(functions.base64EncodeToString(this.encodeCipher.doFinal(data)))).getBytes();} catch (Exception var3) {Log.error(var3);return null;}}public byte[] decode(byte[] data) {try {data = https://www.isolves.com/it/wl/js/2022-07-20/functions.base64Decode(this.findStr(data));return this.decodeCipher.doFinal(data);} catch (Exception var3) {Log.error(var3);return null;}}


推荐阅读