Apa sih CTF itu ?
CTF (Capture the flag) atau lebih tepatnya lagi: Security CTF adalah kompetisi dalam bidang security di mana para peserta diminta mencari flag (berupa string tertentu) yang disembunyikan atau dilindungi dengan cara tertentu. Tujuan dari Pussansiad menyelenggarakan kompetisi ini adalah untuk memberikan wadah bagi generasi muda, untuk menguji kemampuan dalam bidang keamanan siber.
Beberapa soal dan skenario yang biasanya diadakan diantaranya: Open-Source Intelligence (OSINT), Digital Forensic, Cryptography, Reverse engineering & Binary exploitation, Web Vulnerability, attack and defense, dll.
Untuk kali ini saya ingin menuliskan step by step ataupun writeup bagaimana cara menyelesaikan soal-soal yang diberikan. Dari sekian banyak soal tersebut hanya ada beberapa soal yang bisa saya kerjakan, selainya mbuh mumet wong nembe pernah melu kompetisi kaya kie.
Berikut adalah WriteUp tentang soal kategori Forensic dari KKST 2020 :
Pada soal tersebut sudah jelas bahwa kita disuruh untuk mengidentifikasi sebuah log untuk mencari sebuah flag. Hal pertama yang dilakukan adalah membuka VM namun ternyata kita hanya memperoleh user “guest” sedangkan untuk membaca semua isi log dari VM tersebut minimal memperoleh sebuah akses root. Untuk mebypass hal tersebut kita bisa gunakan function “dmesg“.
Utilitas baris perintah dmesg digunakan untuk mencetak dan mengontrol kernel buffer ring di Linux dan sistem operasi Unix-like lainnya. Perintah ini berguna untuk memeriksa pesan-pesan terkait boot kernel dan men-debug masalah-masalah yang terkait dengan perangkat keras.
sudo dmesg -H
!/bin/sh
Secara default, semua pengguna dapat menjalankan perintah dmesg. Namun, pada beberapa sistem, akses ke dmesg mungkin dibatasi untuk user non-root.
Setelah itu saya mencoba mencari sebuah string dengan menganalis file /var/log/auth.log dengan command
grep ssh2 /var/log/auth.log
Disitu saya tertarik pada sebuah string setiap user yang jika diurutkan dari atas hingga bawah akan menjadi sebuah kalimat seperti flag.
Binggo ! dan flag nya adalah : KKST2020{L00K_H3rS_Ch3ck}
Pada soal kedua ini hampir mirip seperti soal pertama tadi, kita bisa mencari sebuah log ip:port untuk melakukan back connect tersebut jelas saya langsung tertuju pada log apache yang berkaitan dengan web vulnerability. setelah beberapa saat melakukan analis, didapatlah sebuah command berikut :
grep '/bin/sh' /var/log/apache2/access.log
Maka akan terlihat sebuah ip dan port yang digunakan untuk melakukan back connect tersebut.
Flag :KKST2020{157.1.12.12:1399}
Sedikit pengetahuan tentang perintah “grep” ini. Perintah grep yang merupakan singkatan dari “global regular expression print”. grep sendiri adalah perintah yang digunakan untuk mencari string text menggunakan terminal.
Pada soal yang ketiga ini sudah cukup jelas bahwa kita diharuskan mencari sebuah file yang “kiranya” dirubah oleh siattacker. karena soal tersebut masih membahas mengenai web, saya langsung tertuju pada folder /var/www/html dengan menuliskan command :
grep -RPn "(passthru|shell_exec|system) *(" /var/www/html
didapat sebuah file LogoSahamTani.jpg. saya membuka file tersebut dan benar saja ada sebuah code <?php echo(system([1337]); ?>. namun ini bukan sebuah flag. saya mencoba memahami kembali kalimat soal tersebut, setelah beberapa saat saya mencoba command sebagai berikut :
find $1 -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head
Ditampilkan urutan file yang terakhir kali dirubah adalah file koneksi.php
Flag adalah : KKST2020{koneksi.php}
Sedikit tambahan untuk soal kategori Misc, karena Virtual Machine tersebut sebelumnya terkunci dengan password sebagai soal berikut :
Pada soal tersebut kita diberikan sebuah hash MD5 namun ada 2 huruf yang hilang 6879d9f430?554b113292dfc94d7335?. dengan diberikan hint hash SHA1 password MD5 tersebut kita bisa lakukan recovery password
from hashlib import sha1
result = "ca64b496863971ad2a94ce3d492dc7d0d604d7c7"
for i in range(255):
for j in range(255):
pwd = (“6879d9f430″+chr(i)+”554b113292dfc94d7335″+chr(j)).encode()
hasil = sha1(pwd).hexdigest()
if result == hasil:
print(pwd.decode())
Makan ditemukan sebuah password yang asli dan sekaligus menjadi sebuah flag yaitu : KKST2020{6879d9f4300554b113292dfc94d7335a}
Mungkin cukup sampai disini writeup saya yang tidak jelas ini, sekian semoga bermanfaat.
Spesial Thanks to Fariq (Techpoci) & Ali Akbar
waktu lomba itu dikasih berapa soal pak?