ctfs
  • ๐Ÿ‘‹Hello!
  • ๐ŸดPractice
    • ๐ŸŒCryptohack
      • Introduction
      • General
        • Encoding
        • XOR
        • Mathematics
        • Data Formats
      • Symmetric Ciphers
        • How AES Works
        • Symmetric Starter
        • Block Ciphers 1
        • Stream Ciphers
      • Mathematics
        • Modular Math
        • Lattices
      • RSA
        • Starter
        • Primes Part 1
        • Public Exponent
    • ๐ŸŒPortSwigger
      • Path Traversal
      • File Upload
      • SSRF Attacks
    • ๐ŸŒTryHackMe
      • Basic Skills
      • Linux
      • Penetration Testing
      • Networking
      • OSINT
  • ๐ŸšฉCompetitions
    • 2025
      • ๐Ÿ‡ฎ๐Ÿ‡ฉGKSK#9 Osintathon
        • Mudik Lebaran (100 pts)
        • Foto Patung (100 pts)
        • Kolektor Komik (100 pts)
        • Tolong Aku (100 pts)
        • Kencan Pertama (100 pts)
        • Nama Si Pelaku (100 pts)
        • Cekidot (100 pts)
        • Ledakan! (100 pts)
        • ๐ŸŽน๐ŸŽถ (100 pts)
        • Batu Besar (100 pts)
        • Komentar (100 pts)
        • Ini dimana? (100 pts)
        • Koordinat Foto Misterius (100 pts)
        • Bianglalaaa (100 pts)
        • Aku Hacker (100 pts)
        • Anjazzz (100 pts)
        • Dikirim Kakakku (129 pts)
        • Ingfo Loker (154 pts)
        • MISSING 00 (100 pts)
        • MISSING 01 (154 pts)
        • Siapa Aku? (154 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉIFEST 13
        • Ququerer (250 pts)
        • Silent Trace (370 pts)
        • Nugas (Solved After Event)
        • Free Flag (280 pts)
        • Brute (Solved After Event)
        • Web V1 (Solved After Event)
        • Bypass (Solved After Event)
        • Orbiter (Solved After Event)
      • ๐ŸŒOSINT Combine (Wildlife)
        • Getting Started (100 pts)
        • Proper Poppy (100 pts)
        • Legendary Beasts (200 pts)
        • Shadow Fleet (200 pts)
        • Proper Poppy II (200 pts)
        • Not So Smug Smuggler (200 pts)
        • Icy (200 pts)
        • Forest Pals (200 pts)
        • Safari Time II (200 pts)
        • Sneaky! (200 pts)
        • Hello Friend (300 pts)
        • Busy As A (300 pts)
        • Get Rotated! (300 pts)
        • High Seas (300 pts)
        • Nocturnal (300 pts)
        • Safari Time (400 pts)
        • Peak Weather (400 pts)
        • Singsong (400 pts)
        • Falling Fell (500 pts)
        • Kitty Cats (500 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉRECURSION
        • let him cook
        • Basic Math
        • Favourite Number
        • Zarrar Cipher (100 pts)
        • paBlue Team (100 pts)
        • [๐Ÿฉธ] I wish I was there on December 21, 2024 (100 pts)
        • Small House (200 pts)
        • [๐Ÿฉธ] Mission Difference (456 pts)
    • 2024
      • ๐ŸŒSanta Claus CTF
        • Complete Picture
        • Day 1 - Big Bang
        • Day 2 - The Summer Job
        • Day 3 - The Visitors
        • Day 4 - Happy Birthday
        • Day 5 - Say My Name
        • Day 6 - Say "Cheese"
        • Day 7 - Revealing Pixels
        • Day 8 - Connecting The Dots
        • Day 9 - 404 Not Found
        • Day 10 - Breaking News
        • Day 11 - Ayrton Santa
        • Day 12 - Lost and Found
        • Day 13 - Planespotting
        • Day 14 - Santa Surveillance
        • Day 15 - Shaken, Not Stirred
        • Day 16 - Status Update
        • Day 17 - Waste ...of Time
        • Day 18 - Lost in Translation
        • Day 19 - Santa's Clones
        • Day 20 - Losing Tracks
        • Day 21 - Sing my Song
        • Day 22 - Eagle Eye
        • Day 23 - Distances Matters
        • Day 24 - Mastermind
      • ๐ŸŒCyber Jawara International
        • Stone Game (100 pts)
        • prepare the tools (176 pts)
        • Persona (484 pts)
      • ๐ŸŒOSMOSIS Precon CTF
        • 1 The art of espionage
        • # 2 The Hack
        • # 3 The rabbit hole
        • # 4 The Association
        • # 6 Where is number 5
        • # 5 Who is it
        • Too many Layers
        • The prize
      • ๐Ÿ‡ฎ๐Ÿ‡ฉIntechfest
        • Sanity Check (100 pts)
        • Alin (113 pts)
        • GerakSendiri (106 pts)
        • Details (100 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉCOMPFEST 16
        • Let's Help John! (100 pts)
        • money gone, wallet also gone (100 pts)
        • headโ€™s up! (493 pts)
        • CaRd (304 pts)
        • Sanity Check (100 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉGemastik
        • Baby AES (451 pts)
        • Baby Structured (100 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉTechnofair 11
        • Kenangan
        • Xorban
        • Marsha
        • Siap Tempur!!
        • eftipi
        • kurang berarti
        • DUMPling
        • Malicious
      • ๐ŸŒDIVER OSINT
        • chiban
      • ๐Ÿ‡ฎ๐Ÿ‡ฉGKSK#8 Osintathon
        • Sport Location
        • Meklaren lu warna apa boss ?
        • Postcode
        • Rumah Minang
        • Latihan
        • Anak Misterius
        • Travelling Anywhere
        • The Thief
        • Danger Watch
        • Misteri Ruang Angkasa
        • Fun Walk
        • I am Late
        • My Oshi
        • Wellcome to my Youtube Channel
        • Pesan Tersembunyi Wingdings
        • Salah Fokus
        • Apa itu GKSK?
        • Foto Bersejarah
        • Picture
        • Nostalgia Child
        • oldschool
        • Summer Olympic
      • ๐Ÿ‡ฎ๐Ÿ‡ฉTechcomfest
        • pemanasan
        • crackable
        • Kuli-ah forensik
    • 2023
      • ๐Ÿ‡ฎ๐Ÿ‡ฉCyber Jawara
        • daruma
      • ๐Ÿ‡ฎ๐Ÿ‡ฉNCW
        • Simple (220 pts)
        • wangsaf (320 pts)
        • Sillyville Saga (220 pts)
        • Freminhelp (Solved after event)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉHology 6
      • ๐Ÿ‡ฎ๐Ÿ‡ฉSlashRoot 7
        • Summary (441 pts)
        • eeee (480 pts)
        • Zebra Cross (409 pts)
        • Waka Waka eh eh (185 pts)
        • ANABUL (250 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉCOMPFEST 15
        • not simply corrupted (316 pts)
        • Artificial secret (356 pts)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉGemastik
        • easy AES
        • k-1
        • Gen Z
      • ๐Ÿ‡ฎ๐Ÿ‡ฉTechnoFair 10
        • RSA Bwang
        • Marsah
        • rapsodi
        • Pengen Merch JKT ๐Ÿ˜ข
        • space mono
        • file pemberian fans
        • bantu aku mencari sebuah rahasia
    • 2022
      • ๐Ÿ‡ฎ๐Ÿ‡ฉNCW
        • sabeb64 (331 pts)
        • cakemath (451 pts)
        • Downloader (244 pts)
        • 199 passcode (Solved after event)
      • ๐Ÿ‡ฎ๐Ÿ‡ฉTEDCTF
      • ๐Ÿ‡ฎ๐Ÿ‡ฉGemastik
      • ๐Ÿ‡ฎ๐Ÿ‡ฉOSCCTF
      • ๐Ÿ‡ฎ๐Ÿ‡ฉARA
  • ๐ŸชฆOld Hello
Powered by GitBook
On this page
  1. Competitions
  2. 2023
  3. Gemastik

k-1

Deskripsi

Shamir said we need k shares to recover the secret.

Author: prajnapras19

nc ctf-gemastik.ub.ac.id 10000

Seperti biasa, kita diberikan sebuah service dan source code dari service tersebut.

chall.py

import random
import os

bits = 1024
k = random.randint(20, 35)
password = random.getrandbits(bits) % 1000000

def get_shares():
    coeffs = [password] + [random.getrandbits(bits) for _ in range(k - 1)]
    x_list = set()
    while len(x_list) < k - 1:
        x_list.add(random.getrandbits(bits))
    
    shares = []
    for x in x_list:
        y = sum(map(lambda i : coeffs[i] * pow(x, i), range(len(coeffs))))
        shares.append((x, y))
    
    print(f'{k = }')
    for share in shares:
        print(share)

def get_flag():
    res = int(input('password: '))
    if password == res:
        os.system('cat flag.txt')
        print()

try:
    get_shares()
    get_flag()        
except:
    print('something error happened.')

Jika dijalankan, hasil output-nya kira-kira seperti berikut. Kita diberikan nilai k (jumlah share yang dibutuhkan untuk me-recover secret) serta pasanganโ€ (x,y) dari share untuk secret yang hanya diberikan sebanyak k-1. Btw pada soal ini, secret yang ingin dicari adalah password.

Pertama-tama, yang saya lakukan adalah membaca berbagai write-up terkait Shamir Secret Sharing Scheme, karena kelihatannya itu adalah materi dari soal ini. Namun karena mulai merasa kesulitan (skill issue :v), saya mulai memikirkan apakah penyelesaian soal ini dilakukan secara non konvensional. Terlebih, saya merasa ada yang aneh dengan soal ini. Biasanya (di ctf lain), nilai x pada shareโ€ yang diberikan angkanya kecil (1, 2, 3, ...). Tapi di soal ini baik nilai x maupun koefisien polinomial-nya sangat sangat besar.

Fokus saya tertuju pada bagian kode berikut.

bits = 1024
k = random.randint(20, 35)
password = random.getrandbits(bits) % 1000000

def get_shares():
    coeffs = [password] + [random.getrandbits(bits) for _ in range(k - 1)]

Jumlah digit koefisien pertama (password) saja tidak sampai 7, tapi koefisien lainnya punya nilai sebesar 1024-bit. Ini berarti ada ketimpangan yang sangat jauh. Apabila kita pikirkan cara kerja polinomial...

misal ada polinomial yang derajatnya 5

y = ax^5 + bx^4 + cx^3 + dx^2 + ex + f

kalau disederhanakan, dan x bukan salah satu faktor dari f, maka:

y = x(ax^4 + bx^3 + cx^2 + dx + e) + f

dengan begini, maka y mod x = f

Kalau saja nilai dari password lebih besar dibanding nilaiโ€ x yang masuk, hal ini (menggunakan modulo) tidak akan bekerja begitu saja, karena kali ini bisa jadi nilai x tersebut merupakan salah satu faktor dari password.

Pada kasus soal ini, nilai f di atas (nilai koefisien paling pertama/konstanta pada polinomial), adalah nilai password. Oleh karena itu, untuk mendapatkan password, kita ambil saja salah satu share (nilai x dan y), lalu lakukan y mod x. Password pun bisa kita submit ke server, dan flag didapatkan.

Referensi https://en.wikipedia.org/wiki/Shamir%27s_secret_sharing https://medium.com/mii-cybersec/pengenalan-shamir-secret-sharing-dan-implementasi-2a52bdbbe81d

Flag: gemastik{40a94a3351d72f7e4a79afdc646746b907c18c0c652bb7869d01454afe6784af}

Previouseasy AESNextGen Z

Last updated 12 months ago

๐Ÿšฉ
๐Ÿ‡ฎ๐Ÿ‡ฉ