नल अहमदाबाद अप्रैल 2023 CTF राइट-अप

May 01 2023
नल अहमदाबाद के रूप में जाना जाने वाला समुदाय चार व्यक्तियों के एक समूह द्वारा स्थापित किया गया था। 18 फरवरी, 2018 को, उन्होंने अपनी उद्घाटन बैठक आयोजित की, जो गणपत विश्वविद्यालय की सहायता से संभव हुई।

नल अहमदाबाद के रूप में जाना जाने वाला समुदाय चार व्यक्तियों के एक समूह द्वारा स्थापित किया गया था। 18 फरवरी, 2018 को, उन्होंने अपनी उद्घाटन बैठक आयोजित की, जो गणपत विश्वविद्यालय की सहायता से संभव हुई। उनकी प्राथमिक घटना एक मासिक सभा है जहां प्रतिभागी सुरक्षा और सीटीएफ (हैंड्स-ऑन चैलेंज) के बारे में चर्चा में शामिल होने के लिए बुलाते हैं। जैसे-जैसे समय बीतता है, नल अहमदाबाद अतिरिक्त बैठक प्रारूपों और कार्यशालाओं की पेशकश करके अपनी पहुंच का विस्तार करना जारी रखता है। सूचना सुरक्षा में रुचि रखने वाले किसी भी व्यक्ति के लिए, चाहे वह एक छात्र, उत्साही या पेशेवर हो, नल अहमदाबाद अहमदाबाद क्षेत्र में साथी हैकर्स और पेशेवरों से जुड़ने के लिए एक आदर्श समुदाय है।

2023 के अप्रैल में, नल अहमदाबाद ने एक CTF प्रतियोगिता का आयोजन किया, जिसमें मैं तीसरा स्थान हासिल करने में सफल रहा। इस उपलब्धि के परिणामस्वरूप, मैंने एक लेख लिखने का निर्णय लिया।

अशक्त समुदाय का पता लगाने के लिए क्लिक करें:https://null.community/chapters/17-ahmedabad

अनस्प्लैश पर एलेक्स चुमाक द्वारा फोटो

1. प्रवेश निषेध?

चुनौती संकेत कहता है:

नल अहमदाबाद पहली बार अपना ऑनलाइन कपड़ों का स्टोर शुरू कर रहा है! हालांकि, हमें डर है कि हमारे कोड में कुछ कमजोरियां हो सकती हैं। एक खुले सुरक्षा समुदाय के सदस्य के रूप में, आपको किसी भी भेद्यता (झंडे) को खोजने और जमा करने का काम सौंपा जाता है, जिसका आप सामना कर सकते हैं।

हमारा स्टोर यहां है:http://nullahm.kuldeep.io:5000/

खरीदारी के लिए शुभकामनाएं! :)

मैंने वेबसाइट एक्सप्लोर करना शुरू किया; इसमें एक लॉगिन और रजिस्टर सुविधा है।

मैंने अपना खाता पंजीकृत किया और लॉग इन किया। मैंने जावास्क्रिप्ट कोड में खोदना शुरू किया और एक ग्राफक्ल एंडपॉइंट पाया।

यदि आप ग्राफ़कल से परिचित हैं, तो आप शायद जानते हैं कि यह आत्मनिरीक्षण प्रश्नों का समर्थन करता है, जो आमतौर पर सुरक्षा कारणों से वर्जित होते हैं।

इसलिए मैंने आत्मनिरीक्षण क्वेरी को फायर करने की कोशिश की, और यह काम कर गया।

मैंने परिणाम का निरीक्षण किया और `allUsers` नामक एक फ़ील्ड पाया।

मैंने 'allUsers' नोड तक पहुँचने का प्रयास किया, और अब मैं सभी उपयोगकर्ताओं के डेटा तक पहुँचने में सक्षम हूँ।

और मुझे झंडा मिला।

2. स्ट्रिंग्स संलग्न

चुनौती संकेत कहता है:

मुझे यकीन है कि मैंने इस बाइनरी में कोई रहस्य नहीं छोड़ा है लेकिन मेरे मैनेजर अभी भी मुझ पर शक कर रहे हैं। क्या आप कृपया बाइनरी की जांच कर सकते हैं और उसे गलत साबित कर सकते हैं?

इसमें डाउनलोड करने के लिए निष्पादन योग्य बाइनरी है।

मैंने बाइनरी डाउनलोड की, और इसके मेटाडेटा आँकड़े हैं:

ELF 64-बिट LSB पाई निष्पादन योग्य, x86–64, संस्करण 1 (SYSV), गतिशील रूप से जुड़ा हुआ, इंटरप्रेटर /lib64/ld-linux-x86–64.so.2, BuildID[sha1]=9b34236e59bfcdbdb606def64c05cdfdbce9753b, GNU/Linux 4.4 के लिए। 0, छीन नहीं

यह एक पुराने स्कूल की चुनौती जैसा दिखता है; मुझे पता है कि ध्वज प्रारूप "नुल्लाहम" है। तो मैंने बाइनरी के खिलाफ तारों का उपयोग करने की कोशिश की।

स्ट्रिंग्स -एन 7-टीएक्स चल | ग्रेप नुल्लाहम

बाइनरी में रहस्य मिला।

3. ऐतिहासिक रूप से असुरक्षित

चुनौती शीघ्र कहते हैं:

इसे डिकोड करें और ध्वज प्राप्त करें: ubsshot{d4f_700_345f}

यह एक झंडे की तरह दिखता है लेकिन संकेत के अनुसार इसे एन्क्रिप्ट किया गया है। अगर मैं एन्क्रिप्टेड फ्लैग की तुलना फ्लैग फॉर्मेट यानी "नुल्लाहम" से करता हूं तो ऐसा लगता है कि यह विगेनेयर सिफर है।

Vigenère Cipher ज्ञात सादे पाठ हमले के प्रति संवेदनशील है। मेरे पास ज्ञात सादा पाठ का एक हिस्सा है यानी ubsshot = nullahm।

इसलिए मैंने चाबी निकालने के लिए एक छोटी सी स्क्रिप्ट लिखी:

def solve_historically_insecure(ciphertext, plaintext):

    ciphertext = ciphertext.upper()
    plaintext = plaintext.upper()
    key = ""
    for i in range(len(plaintext)):
        key += chr(((ord(ciphertext[i]) - ord(plaintext[i])) % 26) + ord('A'))
    return key
ciphertext = "ubsshot"
plaintext = "nullahm"
key = solve_historically_insecure(ciphertext, plaintext)
print("Key : ",key)

अब मैं सिफर टेक्स्ट के खिलाफ कुंजी का उपयोग कर सकता हूं,

def vigenere_decode(ciphertext, key):
    plaintext = ''
    key_len = len(key)
    for i in range(len(ciphertext)):
        shift = ord(key[i % key_len]) - 65
        if ciphertext[i].isupper():
            plaintext += chr((ord(ciphertext[i]) - shift - 65) % 26 + 65)
        elif ciphertext[i].islower():
            plaintext += chr((ord(ciphertext[i]) - shift - 97) % 26 + 97)
        else:
            plaintext += ciphertext[i]
    return plaintext

ciphertext = "ubsshot{d4f_700_345f}"
key = solve_historically_insecure(ciphertext, plaintext)
plaintext = vigenere_decode(ciphertext, key)
print("Plain Text : ",plaintext)

      
                

इस लेख को पढ़ने के लिए समय निकालने के लिए धन्यवाद।