Salam untuk semua habrachitateli. Tiga minggu telah berlalu sejak saya
mengusulkan kepada mereka yang ingin menyelesaikan CTF saya dan, saya pikir, sudah waktunya untuk mempublikasikan analisis tugas. Dari pengalaman saya sendiri, saya tahu bahwa memalukan berada dalam situasi di mana saya menghabiskan banyak waktu untuk suatu tugas, tetapi tidak menemukan solusi, jadi saya memposting analisis tugas. Solusi dibagi menjadi beberapa langkah dan disembunyikan di bawah spoiler sehingga setelah langkah apa pun Anda dapat mencoba menyelesaikan tugas sendiri, mengatasi momen yang sulit.
XT_CTF_01XT_TASK_101Langkah 1Buka arsip dan lihat nama folder yang panjang. Folder terakhir berisi file, tetapi tanpa kata sandi isinya tidak tersedia.
Kami menuliskan nama-nama folder:
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
2346ad27d7568ba9896f1b7da6b5991251debdf2
e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb
bef21e9bfcf9fab0a5aebd46a735efe5434da96b
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
Kami mengarahkan urutan ke Google dan dengan cepat menemukan bahwa ini adalah sha1 dari kata-kata:
password
hash
1000
letters
a
Menyatukan semuanya, kami menganggap bahwa kata sandi adalah hash dari 1000 huruf 'a'. Jika sha1 digunakan untuk kata-kata, maka kita akan coba di sini - 291e9a6c66994949b57ba5e650361e98fc36b1ba. Kami mengekstrak file, memastikan bahwa kata sandi itu benar.
Langkah 2Memeriksa file menunjukkan bahwa mereka semua disusun sesuai dengan prinsip umum kira-kira: nama format + angka xt, isi dari beberapa baris, di mana yang pertama adalah beberapa huruf dan yang kedua adalah urutan karakter heksadesimal. Agak tidak menarik untuk mempertimbangkan urutan heksadesimal, karena masing-masing berisi 79 karakter (kecuali untuk file xt121785230414240585522142219912, di mana ada 58 dari mereka) - ini jelas bukan hash dan bukan sesuatu yang dikodekan.
Karena itu sama di mana-mana, dan hanya ada kurang dalam satu file, dapat diasumsikan bahwa semua urutan hex harus digabungkan, dan bagian yang lebih kecil hanyalah bagian terakhir. Masih memahami urutannya. Dimungkinkan untuk bermain dengan nama-nama, tetapi tidak mendapatkan sesuatu yang menarik, tetapi jika Anda memperhatikan baris pertama file, Anda juga dapat menemukan pola dengan menggunakan tatapan.
Di sini, saya akan menunjukkan beberapa baris: he, li, n, o, ne, mg, si, ca, cu, zn, br, kr, ag ...
Ketika mereka sudah dekat, akan lebih mudah untuk mengenali penunjukan unsur-unsur kimia di dalamnya. Kami membuka tabel periodik dan mengumpulkan urutan heks menjadi satu file (total ada 53 file, ini adalah jumlah bagian terakhir dengan simbol i, yang sesuai dengan Yod, 53 elemen).
Hasilnya adalah file PNG dengan persegi panjang hijau.
Langkah 3Tidak mungkin metadata terkandung dalam file dalam bentuk yang jelas, karena kita melihat semua byte dalam representasi hex. Karena itu, kami akan bekerja dengan gambar itu sendiri. Anda mungkin memperhatikan (bukan dengan mata, tentu saja, tetapi dengan alat) bahwa lebih dari satu warna sebenarnya digunakan. Kami akan menggunakan isi dan melihat panduan untuk langkah selanjutnya.

Langkah 4Kami hash sha1 semua nama file dan mengaturnya sesuai urutan dari langkah sebelumnya.
696e7400b8a8c7da1c52e63550ddfdf8ae03be73
206d6100f4eb7c768890e8502db2bdeb81718301
696e2800f1c5c0df7676667ffca16856e808f9dd
297b69008e0d05b67df33c751da3c6f17a3fdb9d
6e742000bf96cea16e609731aa7397ac2b9f7b15
613d3400d2fedbf43ad7c43d678382d2ef83dde8
36303900b909f396c69c6d47ccb623cc83d5e2ea
313132007f6fdde9d3abad5545f44b2d2661b0be
3b696e0002582f22cab7aeaf730680b87780279a
74206200267e505a621cf264e303d3df63222fa7
3d343600ac031f166103b5319a273a867d5247ae
36393700d9e521b0e0d488b47fde51e5f5f9650d
37323b00bdf3caa241b2936f0355ad89e420389c
696e7400a1f9f8e62cd64c8e25d852e433bda80c
20633d009932d3b69b7a74296c7b75894bcddbc1
373639000ca31548a80fe28adf263bbe89f03069
33393400f56920f247d4d66798bb2c54e3db668c
373b6900222283ee79a5e7e3e79d55d4b159ffb1
6e742000fac60ac1f78aa90201e98b30a9c4adbc
643d3700b55bc0dda8bd748983716018b29fbd6f
38323300176db95a8aa4aaf1770346c353fd4753
32313400644e234a3899bd84e9f7d61a12bfecab
3b696e00654b4b7d8fb3b022777c6346342eba91
742065009720d2693f833788e69a6641e8de22f6
3d363800b1e40956ec8ca6a64013c8a651eff0f7
3435340008b5419f5139553c85b605009e3fb343
38393b004e5d66b6980c7cf14dc9bf0acf09e444
696e7400e648ffad4cde46b4d845f1ffad075da5
20663d00b9bdab8cb8721581f5aa8a2c2522d9de
3334330054fb4abaf144e818ec1199b7b4ffec47
34353900378490c3ba53a356327af1bbb2d2c8b0
313b69008803024e711baf3695402d3a13e0c905
6e7420006434f491ab51a923995a3daf56a65f5e
673d3800c5198ae1565cc5744d23ac492f6d2506
3231380000217a2c380bf9c9a6e122b1c01e90ea
373339003ef4f423f0d9c54ea5d8fbe4d8bf518c
3b70720073caad02c9cba60debf81f72c0ac23ad
696e7400d9ddb857a7608947aae60ed6d054c039
6628220061a3a81dcc20ce43903a18cea28b77db
2573250065285f647ed3e22a9233974ac24509a1
73257300678138427cc07ee072c987583db2fc5e
25732500d183d5303ed6bda0606eb5e4ccc1e7c8
73257300c5e9d7bfdb76b5fee122fe57bc8aa81a
25735c003675c4f732d95ae6a0d9bcc6769f94ca
6e222c0088503423d1f56148bbf2573a6e2e0518
26612c007c8d1d6b90d252fa7b2084bd8695a8f9
26622c00ec96a4edbdeb286484af38395a3fc928
26632c004a1db36cdef743283e6bc853b6995555
26642c00dd66db502138413e272deb2da78d4f57
26652c00bb1785b4e41444da4230b602f1860557
26662c00e739c24f55c0899b8eae2a948622c7d7
26672900f4b4843d0056571d293bec879cd1968f
3b7d20006750ebb44ffd784dc8afdd5b0f76816a
Jika Anda melakukan semuanya dengan pena, maka dengan cepat Anda akan melihat bahwa 4 byte selalu nol, dan di sebelah kiri ada beberapa karakter yang dicetak. Kami hanya meninggalkan mereka, mengumpulkan dalam satu baris.
Kami mendapatkan baris berikut:
int main(){int a=4609112;int b=4669772;int c=7693947;int d=7823214;int e=6845489;int f=3434591;int g=8218739;printf("%s%s%s%s%s%s%s\n",&a,&b,&c,&d,&e,&f,&g);}
Kami menjalankan kode ini dalam C , akibatnya kami mendapatkan bendera. Kami memverifikasi hash untuk memastikan sekali lagi - ya, ini adalah bendera yang diinginkan.
XT_TASK_102Langkah 1Buka arsip dan segera lihat nama file di hex. Konten file tidak tersedia karena kata sandi diperlukan. Mari kita mulai memutar nama.
Semua nama memiliki panjang yang sama, kecuali untuk file dengan ekstensi 64F00000 (lebih pendek). Secara umum, ekstensi itu aneh, tidak khas. Tetapi cukup mudah untuk memperhatikan bahwa semua file memiliki panjang ekstensi yang berbeda, dan dari 1 hingga 7. Nama dengan ekstensi terpanjang adalah yang terpendek. Adalah logis untuk mengasumsikan bahwa Anda perlu menggabungkan semua urutan hex sesuai dengan panjang ekstensi file.
Kami menyimpan urutan byte secara terpisah, memahami bahwa ini adalah arsip 7z, sejak dua byte pertama (0x37 0x7a - 7z).
Langkah 2Arsip kedua lagi dilindungi kata sandi, tetapi kali ini kami memiliki nama file pendek dan konten file kecil. Adalah baik bahwa penampil arsip memperlihatkan metadata file, yaitu checksum mereka.
Terlepas dari kenyataan bahwa crc di-googled agak buruk, Anda masih bisa memeriksa semua urutan dan menemukan bahwa atas permintaan crc 90c1667d, masih ada prototipe "empat". Atau hanya brute urutan tiga byte untuk file terpendek. Salah satu metode mengarah pada fakta bahwa isi file mudah diinstal - ini adalah angka bahasa Inggris "satu", "dua", "tiga", "empat", "lima" dan "enam". Kami tidak memiliki pilihan selain bergabung dengan nama file dalam urutan ini. Kami mendapatkan VVNFIENSQzMy. Kami memeriksa kata sandi untuk arsip pertama - cocok.
Langkah 3Pemecah pengamat, bahkan sebelum kata sandi, dapat melihat bahwa crc32 dari file arsip memiliki bentuk yang agak spesifik, yaitu 0xC0DExxxx. Tidak ada kecocokan seperti itu di CTFs.
File-file itu sendiri adalah gambar PNG dengan teks. Karena pada setiap langkah yang kami anggap crc32, perlu terus melakukan ini. Setelah memeriksa teks pertama dari gambar (misalnya, qnGyaQBc), menjadi jelas bahwa kita berada di jalur yang benar, karena crc32 adalah 0xc0de0831. Kami mempertimbangkan CRC dari semua yang tersisa dan mengumpulkan dalam satu tumpukan.
CRC dari gambar:
0xc0de094e
0xc0de054e
0xc0de0d7d
0xc0de0343
0xc0de0b52
0xc0de0734
0xc0de0154
CRC dari teks:
0xc0de0831
0xc0de0430
0xc0de0c35
0xc0de027b
0xc0de0a33
0xc0de0654
0xc0de0058
Kami membuang bagian umum, kami melihat bahwa dari nilai byte pertama dari dua berjalan dari 0x00 ke 0x0d. Sepertinya ini nomor seri. Kami mengumpulkan, kami menerima bendera. Kami memeriksa sha1 dan juga memastikan bahwa semuanya sudah benar.
XT_QUEST_103daftar1Diberikan urutan angka. Kami hanya mengambil karakter dengan nomor yang ditunjukkan dari kartu, penomoran dari awal dan melewatkan jeda baris. Masuk akal untuk membuat skrip tindakan ini - itu akan dibutuhkan lebih dari sekali.
Jawab: awEs0me_sTart
daftar2Banyak angka. Nama file menunjukkan bahwa Anda perlu mengetahui jumlah digit 5. Kami menghitung jumlah tidak hanya balita, tetapi umumnya semua digit dari 0 hingga 7. Kami mendapatkan urutan: 135, 95, 61, 27, 58, 57, 57, 85, 190. Kami memakai kartu, kami mendapatkan jawabannya.
Jawab: b1g_sTEp
daftar3Kami melihat gambar dengan polinomial. Kami mengganti n dari nol hingga 9, karena kami menyarankan nama file, kami mendapatkan urutan yang, ketika ditumpangkan pada kartu, memberikan jawaban.
Jawab: coOl2math!
list4Nama file aneh dan konten aneh. Jika Anda menggunakan google fdhvdu, maka di antara hasil yang tidak relevan Anda dapat menemukan indikasi bahwa kata ini caesar yang disandikan oleh cipher Caesar adalah pergeseran 3 karakter secara alfabet. Setelah memecahkan kode isinya, kita melihat angka Romawi. Saya pikir jelas apa yang harus dilakukan dengan urutan angka.
Jawab: dOinG_w3ll
daftar5Isi tugas itu sendiri secara harfiah mengatakan apa yang perlu dilakukan. Hash file, kita mendapatkan 20 byte, yang dapat diartikan sebagai urutan angka untuk kartu.
Jawab: exceLlenT_impECc4ble
visual1Kami menempatkan teks tugas pada teks peta, terlebih lagi, kami "menempatkannya" secara harfiah.
Jawab: fa5t! Satu
visual2Ada 840 nol dan satu dalam teks masalah. Karena temanya visual, kami mencoba mendapatkan representasi visual. Jika teks dibagi menjadi 5 baris yang masing-masing terdiri dari 168 karakter, Anda dapat melihat urutan yang mengarah ke jawabannya.

Jawab:
go_fUrth6r visual3Nama file memberitahu kita secara langsung tentang domino. Kami mencoba menghubungkan buku-buku jari hex dan mendapatkan dua rantai. Satu berbentuk lingkaran dan tidak menarik, yang kedua dapat dianggap sebagai urutan angka untuk kartu. Hasilnya adalah jawaban atau jawaban dalam urutan terbalik.
Jawab: heRoic_effOr7s
visual4Kami diberi enam belas angka heksadesimal di mana jelas ada banyak unit bit. Kami menerjemahkan angka-angka dengan kalkulator dan sekali lagi secara harfiah "memaksakan". Nol bit menandai karakter yang diinginkan. Kami membaca simbol dari atas ke bawah, dari kiri ke kanan.
Jawab: ih8BiTs!
visual5Nama file lagi memberikan petunjuk. "B3s23" adalah penunjukan konfigurasi untuk kehidupan game. Kami mengambil beberapa simulator online, masukkan lokasi awal, tunggu lima langkah dan baca jumlah sel yang hidup di baris (apa yang perlu Anda lakukan hanya yang masih memberi tahu nama file).
Jawab: jUsT_9baik
prog1Dalam teks masalah, kita melihat sesuatu seperti mesin Turing dua dimensi, yang hanya perlu dilakukan.
Jawab: k1l0_Byte
prog2Tugas secara eksplisit menyediakan kode untuk brainfuck, tetapi jika Anda menjalankannya di emulator, program akan menampilkan pesan bahwa tugas tersebut bukan tentang brainfuck. Ya, Anda hanya perlu menghitung jumlah karakter di setiap baris dan menerapkannya ke peta.
Jawab: l1kEl1On!
prog3Brainfuck lagi, tapi kali ini kesimpulannya setuju dengan kita. Urutan kartu yang diinginkan terletak pada memori.
Jawab: moRe_1nfO2me
prog4Dan kemudian bercinta. Kami mulai dan program menampilkan pesan kepada kami bahwa tidak ada kata sandi. Tidak ada yang menarik dalam ingatan juga. Harus mengerti kodenya.
Kode terdiri dari tiga baris. Yang pertama menetapkan beberapa nilai, yang kedua juga, yang ketiga menampilkan status memori pada layar.
Kami menghapus baris kedua, menjalankan dan mendapatkan urutan untuk kartu.
Jawab: nO_baRr13rs
prog5Tugas terakhir. Brainfuck kode lagi. Kami melihat indikasi bahwa kami perlu menghitung beberapa fungsi dari beberapa baris peta dan kode. Kami menjalankan kode, yang meninggalkan petunjuk di memori bahwa fungsi yang diinginkan adalah decode base64. Kami memeriksa garis-garis peta untuk apa yang akan terjadi jika mereka diterjemahkan dari base64. Tiba-tiba, string KysrWz4rPis8PC1d diterjemahkan dalam +++ [> +> + << -]. Kami menjalankan kode dengan penambahan ini dan melihat instruksi untuk merangkul semua karakter di setiap baris peta. Hasilnya akan menjadi kata sandi terakhir.
Jawaban: ofF1ci4l! SuCceSs
Itu saja. Kepada semua orang yang berpartisipasi - terima kasih, jika Anda memiliki pertanyaan, tanyakan di komentar.