<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    強網擬態線上mobile的兩道wp

    VSole2021-12-22 16:08:56

    找到關鍵代碼在mainactivity中。

    輸入處理:

    byte[] v7_1 = a.c(v1_1[v6]);.... while(v9 < v7_1.length) {                v10 = v10 << 1 | (v7_1[v9] & 0x80) >>> v2;                v7_1[v9] = ((byte)(v7_1[v9] & 0x7F));                ++v9;            }
    

    關鍵比較:

    String v9_1 = a.a(v10, v7_1);           if(v9_1 != null && (v9_1.equals(a.a(a.b[v6], v7_1)))) {               if(!v9_1.equals(a.c[v6])) {               }               else {                   ++v6;                   continue;               }           }
    

    需要a類中的字符串數組C要等同于a方法對v7_1處理的結果。

    查看A類a方法,可以看到是根據a.b[v6]進行hash加密,任選了一個進行爆破,爆不出來。仔細翻了翻了,前面的welcomeactivity類更改了a密鑰byte數組和b數組。

    for(v0 = 0; true; ++v0) {            int[] v1 = a.b;            if(v0 >= v1.length) {                break;            }             v1[v0] ^= 0xAB;        }....while(v4 < a.a.length) {            try {                v0_1 = MessageDigest.getInstance("MD5");            }            catch(NoSuchAlgorithmException v1_1) {                v1_1.printStackTrace();            }             v0_1.update(a.a[v4]);            a.a[v4] = v0_1.digest();            ++v4;        }
    

    對密鑰進行MD5。

    當b數組的值<8時,不使用密鑰,hash加密的方式不同,b數組>=8時,相同的hash加密HmacSha512,不同密鑰。

    這樣就直接開始爆破,8組數據,范圍為4個0-0x7f字節。直接抄程序反編譯代碼去爆破。

    HmacSha512: 將密鑰和密文對應就行

    import java.nio.charset.StandardCharsets;import java.math.BigInteger;import java.security.GeneralSecurityException;import java.security.InvalidKeyException;import java.security.Key;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec; public class demo {    public static final String v0 = "HmacSha512";    public static void main(String[] args) {        MessageDigest v0_1 = null;        StringBuilder v1_2;        byte[] miwen = new byte[4];        String v6_1 = "%02x";        try {            for (int i=0x0; i<=0x7e; i++) {                miwen[0] = (byte)i;                for (int j = 0x0; j <= 0x7e; j++) {                    miwen[1] = (byte)j;                    for (int k = 0x0; k <= 0x7e; k++) {                        miwen[2] = (byte)k;                        for (int l = 0x0; l <= 0x7e; l++) {                            miwen[3] = (byte)l;                            try {                                v0_1 = MessageDigest.getInstance("MD5");                            }                            catch(NoSuchAlgorithmException v1_1) {                                v1_1.printStackTrace();                            }                            byte[] tmp = "ALFjcgztxnUaC89v".getBytes();                            v0_1.update(tmp);                            byte[] miwen2 = v0_1.digest();                            SecretKeySpec v1 = new SecretKeySpec(miwen2, v0);                            Mac v3 = Mac.getInstance(v0);                            v3.init(((Key)v1));                            v3.update(miwen);                            String v2_2;                            String s = "78b0be39e63b6837";                            for(v2_2 = new BigInteger(1, v3.doFinal()).toString(16); v2_2.length() < 0x20; v2_2 = "0" + v2_2) {                            }                            if (v2_2.substring(0,16).equals(s)) {                                System.out.printf("%x ", i);                                System.out.printf("%x ", j);                                System.out.printf("%x ", k);                                System.out.printf("%x ", l);                                System.out.printf("%n");                                return;                            }                        }                    }                }            }        }        catch(InvalidKeyException | NoSuchAlgorithmException v2) {            return;        }    }}
    

    無密鑰hash: 將hash方法和密文對應

    import java.nio.charset.StandardCharsets;import java.math.BigInteger;import java.security.GeneralSecurityException;import java.security.InvalidKeyException;import java.security.Key;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec; public class demo5 {    public static final String v0 = "HmacSha512";    public static void main(String[] args) {        MessageDigest v1_11;        byte[] miwen2;        byte[] miwen = new byte[4];        String v6_1 = "%02x";        StringBuilder v1_2;        for (int i=0x0; i<=0x7e; i++) {            miwen[0] = (byte)i;            for (int j = 0x0; j <= 0x7e; j++) {                miwen[1] = (byte)j;                for (int k = 0x0; k <= 0x7e; k++) {                    miwen[2] = (byte)k;                    for (int l = 0x0; l <= 0x7e; l++) {                        miwen[3] = (byte)l;                        String s = "f2dda5fc021fe2bf";                        try {                            v1_11 = MessageDigest.getInstance("SHA-384"                            );                            v1_11.update(miwen);                            miwen2 = v1_11.digest();                            v1_2 = new StringBuilder();                            for(int v4 = 0; v4 < miwen2.length; ++v4) {                                v1_2.append(String.format(v6_1, Byte.valueOf(miwen2[v4])));                            }                            String tmp = v1_2.toString().substring(0,16);                            if (tmp.equals(s)){                                System.out.printf("%x ", i);                                System.out.printf("%x ", j);                                System.out.printf("%x ", k);                                System.out.printf("%x ", l);                                System.out.printf("%n");                                return;                            }                         }                        catch(NoSuchAlgorithmException v0_2) {                            v0_2.printStackTrace();                        }                    }                }            }        }    }}
    

    這里我沒有再去考慮大于7F的輸入,我直接分析flag的輸出:

    if((v10 >>> 3 & 1) == 0) {    v6_1[v10 & 7] = new String(v8_1);}else {    for(v9 = 0; v9 < v8_1.length / v5; ++v9) {        byte v11 = v8_1[v9];        v8_1[v9] = v8_1[v8_1.length - 1 - v9];        v8_1[v8_1.length - 1 - v9] = v11;    }     v6_1[v10 & 7] = new String(v8_1); // 輸出順序和加密方式有關}
    

    這里可以看到,如果使用了HmacSha512,需要反序。

    最后爆破了半天得到flag。

    FLAG{H@5H_15_7H3_8@PP1N355_C11P}
    

    Studydesk

    輸入處理:

    byte[] v0 = a.a;.....if(v6 < v5) {                    v9 = in.indexOf(v0[v6]);                    if(v9 == -1) {                        v0 = ((byte[])v7);                    }                    else {                        v4.append(Integer.toBinaryString((v9 & 0x3F) + v2).substring(1));                        ++v6;                        continue;                    }                }
    

    輸入為32字節,然后依次查詢a類的a數組再輸入中的位置,將位置+32后轉化為2進制去掉首位保存字符串。

    保存的范圍就是00000 - 11111,一共是16個。

    查看a類的a數組,可以編寫腳本處理發現只有32種。要求的是每個數都再輸入中能找到,不能重復。

    之后就是2進制連起來,依次取8位,轉化為byte數組。

    密文的生成直接抄反編譯代碼,然后調試可以發現,是圓周率。長度是360位。

    校驗:

    while(true) {               if(v3_3 < v2_2.length()) {                   v4_1 = v3_3 + 2;                   if((((byte)(Integer.parseInt(v2_2.substring(v3_3, v4_1), 10) & 0xFF))) != v0[v3_3 / 2]) {                       v0_1 = 0;                   }                   else {                       v3_3 = v4_1;                       continue;                   }               }               else {                   break;               }                goto label_120;           }
    

    要求的是依次取圓周率字符串2位,視為10進制數和5位2進制數生成的byte數組一一比較,一共180次。

    這里不妨算一下,a數組的長度為288位,轉化出來的2進制長度為288 5 == 1440,密文長度是180 8 == 1440,剛好對應。

    c = [0x73, 0x6F, 43, 0x72, 0x74, 45, 0x30, 36, 84, 98, 89, 36, 38, 66, 38, 43, 84, 0x79, 50, 101, 101, 43, 100, 87, 69, 0x6F, 51, 66, 89, 49, 69, 51, 101, 51, 53, 0x74, 45, 98, 98, 0x72, 50, 36, 98, 50, 85, 85, 85, 107, 66, 36, 53, 51, 0x6F, 0x72, 89, 89, 66, 50, 33, 66, 0x5F, 66, 101, 0x79, 0x5F, 0x40, 33, 66, 50, 0x40, 85, 85, 45, 43, 36, 50, 0x74, 0x30, 85, 0x73, 0x5F, 0x40, 49, 0x72, 50, 101, 101, 51, 51, 43, 53, 51, 53, 51, 85, 50, 0x40, 0x79, 53, 36, 0x40, 69, 89, 98, 45, 0x6F, 101, 36, 97, 66, 100, 0x30, 0x73, 97, 0x30, 36, 0x6F, 101, 50, 0x5F, 49, 0x30, 0x40, 89, 0x74, 85, 0x30, 85, 0x73, 89, 43, 89, 97, 0x30, 89, 0x72, 97, 100, 38, 50, 0x74, 51, 98, 0x75, 0x5F, 50, 0x74, 0x73, 0x6F, 84, 98, 89, 69, 0x6F, 100, 0x30, 0x6F, 98, 89, 0x72, 0x40, 50, 36, 66, 89, 101, 0x72, 51, 84, 51, 50, 36, 38, 0x40, 0x30, 53, 51, 0x30, 49, 97, 0x74, 89, 101, 85, 97, 66, 84, 97, 45, 43, 100, 89, 45, 0x30, 0x73, 0x30, 0x40, 97, 100, 98, 51, 100, 0x6F, 0x73, 50, 53, 101, 66, 101, 0x6F, 0x75, 50, 45, 0x5F, 51, 82, 50, 89, 87, 101, 50, 89, 0x30, 89, 101, 43, 89, 36, 38, 61, 101, 0x40, 84, 89, 0x5F, 66, 0x74, 49, 0x40, 87, 97, 43, 0x5F, 0x73, 43, 0x30, 89, 45, 84, 89, 33, 89, 107, 53, 85, 0x30, 98, 98, 0x5F, 50, 107, 66, 101, 0x6F, 51, 97, 33, 66, 97, 0x75, 51, 0x74, 51, 97, 0x40, 89, 107, 98, 51, 69, 0x40, 73, 0x5F, 0x30, 85, 0x74, 0x30, 97]b = []for i in range(0x20):    b.append("{0:b}".format(i).zfill(5))a = [31,41,59,26,53,58,97,93,23,84,62,64,33,83,27,95,2,88,41,97,16,93,99,37,51,5,82,9,74,94,45,92,30,78,16,40,62,86,20,89,98,62,80,34,82,53,42,11,70,67,98,21,48, 8,65,13,28,23, 6,64,70,93,84,46, 9,55, 5,82,23,17,25,35,94, 8,12,84,81,11,74,50,28,41, 2,70,19,38,52,11, 5,55,96,44,62,29,48,95,49,30,38,19,64,42,88,10,97,56,65,93,34,46,12,84,75,64,82,33,78,67,83,16,52,71,20,19, 9,14,56,48,56,69,23,46, 3,48,61, 4,54,32,66,48,21,33,93,60,72,60,24,91,41,27,37,24,58,70, 6,60,63,15,58,81,74,88,15,20,92, 9,62,82,92,54, 9,17,15,36,43,67,89,25,90,36]d = ""for i in a:    d += "{0:b}".format(i).zfill(8)e = [0] * 32k = 0i = 0while i < 8 * 180:    for j in range(len(b)):        if d[i:i + 5] == b[j]:            e[j] = c[k]            k += 1    i += 5       for i in e:    print(chr(i), end="")
    

    加上flag{}就ok。

    附件中的HAHAHAHA我重新打包過。

    string
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    如果你不是 Java8 的釘子戶,你應該早就發現了:String 類的源碼已經由 char[] 優化為了 byte[] 來存儲字符串內容,為什么要這樣做呢? 開門見山地說,從 char[] 到 byte[],最主要的目的是為了節省字符串占用的內存 。內存占用減少帶來的另外一個好處,就是 GC 次數也會減少。
    Adobe已經發布了一個名為Stringlifier的開源工具,該工具允許用戶識別任何純文本中隨機生成的字符串,該工具可用于清理日志。Stringlifier工具是用Python編寫的,它使用機器學習來識別插入普通文本中的隨機字符序列。開源工具可用于出于多種目的分析日志,例如研究意外暴露的憑證。Stringlifier能夠在源代碼或配置文件中查找API密鑰,哈希,隨機生成的字符串,包括密碼,日志。Adobe在Github上發布的描述中寫道。
    介紹Runtime 是一系列采用 C++ 語言編寫的功能方法,它實現了大量 JavaScript 運行期間需要的 native 功能。本文分析 Runtime_StringToArray 方法的源碼和重要數據結構,講解 Runtime_StringToArray 方法的觸發條件。
    介紹Runtime 是一系列采用 C++ 語言編寫的功能方法,它實現了大量 JavaScript 運行期間需要的 native 功能。
    通過common-collection相關gadget,想辦法調用org.mozilla.classfile.DefiningClassLoader這個類去加載字節碼。然后通過T3協議的反序列化漏洞發送給待攻擊weblogic服務器。
    舉個例子:但是對于64位的來說 ROPgadget預設的長度是不夠的。所以,我們可以使用ROPgadget --binary ./b --depth 100來加深他的搜索深度。2利用_libc_csu_init制造ROP常規方法我們前面說的利用ROPgadget來尋找,大多都是找到直接設置某個寄存器的rop,當然也可以使用--ropchain這個參數。
    一般情況下類與類之間是相互獨立的,內部類的意思就是打破這種獨立思想,讓一個類成為另一個類的內部信息,和成員變量、成員方法同等級別。「內部類的好處:」把一個類寫在外面和寫在里面最終達到的結果都一樣,那我們為什么還要使用內部類,豈不是多此一舉嗎?
    當被問及網絡間諜是否成功時,愛德華·斯金格表示,他非常有信心地確信,除了國防學院本身,沒有任何其他危害行為。斯金格接受采訪時透露,本次攻擊看起來不像是一次暴力攻擊,但有代價。國防學院立即意識到它可能已成為敵對國家在灰色地帶式網絡攻擊中的目標的可能性。官方迅速采取了行動,對更廣泛的國防部IT網絡沒有影響。
    java安全-02RMI
    2022-03-25 15:35:13
    基礎知識動態代理反射攻擊方式注冊端攻擊服務端java -cp .\ysoserial-master-8eb5
    MISC中常用python腳本
    2021-09-20 20:26:46
    MISC中常用python腳本總結
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类