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

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)
ขอบคุณที่สละเวลาอ่านบทความนี้