Null Ahmedabad เมษายน 2023 CTF เขียนขึ้น

May 01 2023
ชุมชนที่รู้จักกันในชื่อ Null Ahmedabad ก่อตั้งขึ้นโดยกลุ่มบุคคลสี่คน ในวันที่ 18 กุมภาพันธ์ 2018 พวกเขาได้จัดการประชุมครั้งแรกขึ้น ซึ่งเกิดขึ้นได้ด้วยความช่วยเหลือของมหาวิทยาลัย Ganpat

ชุมชนที่รู้จักกันในชื่อ Null Ahmedabad ก่อตั้งขึ้นโดยกลุ่มบุคคลสี่คน ในวันที่ 18 กุมภาพันธ์ 2018 พวกเขาจัดการประชุมครั้งแรก ซึ่งเกิดขึ้นได้ด้วยความช่วยเหลือของมหาวิทยาลัยกันปัต กิจกรรมหลักของพวกเขาคือการรวบรวมรายเดือนที่ผู้เข้าร่วมประชุมกันเพื่อมีส่วนร่วมในการอภิปรายเกี่ยวกับความปลอดภัยและ CTFs (ความท้าทายที่ต้องทำจริง) เมื่อเวลาผ่านไป Null Ahmedabad ยังคงขยายการเข้าถึงโดยเสนอรูปแบบการประชุมและเวิร์กช็อปเพิ่มเติม สำหรับทุกคนที่สนใจเรื่องความปลอดภัยของข้อมูล ไม่ว่าจะเป็นนักเรียน นักศึกษา ผู้ที่ชื่นชอบ หรือมืออาชีพ Null Ahmedabad เป็นชุมชนในอุดมคติที่จะเชื่อมต่อกับแฮ็กเกอร์และมืออาชีพในพื้นที่ Ahmedabad

ในเดือนเมษายน ปี 2023 Null Ahmedabad ได้จัดการแข่งขัน CTF ซึ่งฉันสามารถคว้าอันดับสามมาได้ จากความสำเร็จนี้ ฉันจึงตัดสินใจเขียนบทความ

หากต้องการสำรวจชุมชนว่างให้คลิก:https://null.community/chapters/17-ahmedabad

ภาพถ่ายโดย Alex Chumak บน Unsplash

1. การเข้าถึงถูกปฏิเสธ?

พรอมต์ Challenge พูดว่า:

Null Ahmedabad เปิดตัวร้านขายเสื้อผ้าออนไลน์เป็นครั้งแรก! อย่างไรก็ตาม เราเกรงว่าอาจมีช่องโหว่ในโค้ดของเรา ในฐานะสมาชิกชุมชนความปลอดภัยแบบเปิด คุณจะได้รับมอบหมายให้ค้นหาและส่งช่องโหว่ (แฟล็ก) ที่คุณอาจพบ

ร้านของเราอยู่ที่:http://nullahm.kuldeep.io:5000/

มีความสุขในการช้อปปิ้ง! :)

ฉันเริ่มสำรวจเว็บไซต์ มันมีคุณสมบัติเข้าสู่ระบบและลงทะเบียน

ฉันลงทะเบียนบัญชีของฉันและเข้าสู่ระบบ ฉันเริ่มขุดโค้ด JavaScript และพบจุดสิ้นสุดของ Graphql

หากคุณคุ้นเคยกับ Graphql คุณอาจรู้ว่ามันสนับสนุนการสอบถามเชิงลึกซึ่งโดยปกติแล้วจะถูกห้ามด้วยเหตุผลด้านความปลอดภัย

ดังนั้นฉันจึงลองยิงคำถามเชิงวิปัสสนาและมันก็ได้ผล

ฉันตรวจสอบผลลัพธ์และพบฟิลด์ชื่อ `allUsers`

ฉันพยายามเข้าถึงโหนด `allUsers` และตอนนี้ฉันสามารถเข้าถึงข้อมูลของผู้ใช้ทั้งหมดได้แล้ว

และฉันก็พบธง

2. สตริงที่แนบมา

พรอมต์ท้าทายพูดว่า:

ฉันแน่ใจว่าฉันไม่ได้ทิ้งความลับใดๆ ไว้ในไบนารี่นี้ แต่ผู้จัดการของฉันยังคงสงสัยในตัวฉัน คุณช่วยตรวจสอบไบนารีและพิสูจน์ว่าเขาผิดได้ไหม

มีไบนารีปฏิบัติการให้ดาวน์โหลด

ฉันดาวน์โหลดไบนารีและสถิติข้อมูลเมตาของมันคือ:

ELF ปฏิบัติการพาย LSB 64 บิต, x86–64, เวอร์ชัน 1 (SYSV), ลิงก์แบบไดนามิก, ตัวแปล /lib64/ld-linux-x86–64.so.2, BuildID[sha1]=9b34236e59bfcdbdb606def64c05cdfdbce9753b สำหรับ GNU/Linux 4.4 0 ไม่ถอด

ดูเหมือนความท้าทายในโรงเรียนเก่า ฉันรู้ว่ารูปแบบแฟล็กคือ "nullahm" ดังนั้นฉันจึงลองใช้สตริงกับไบนารี

สตริง -n 7 -tx chal | grep nullahm

พบความลับในไบนารี

3. ความไม่ปลอดภัยในอดีต

Challenge Prompt พูดว่า:

ถอดรหัสสิ่งนี้และรับค่าสถานะ: ubsshot{d4f_700_345f}

ดูเหมือนแฟล็ก แต่เข้ารหัสตามที่พรอมต์บอก ถ้าฉันเปรียบเทียบการตั้งค่าสถานะที่เข้ารหัสกับรูปแบบการตั้งค่าสถานะ เช่น "nullahm" ดูเหมือนว่าจะเป็น Vigenère Cipher

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)

      
                

ขอบคุณที่สละเวลาอ่านบทความนี้