# **WriteUp CyberOpsClash (Quals)** ## **Team Homebrew:** Jason Rafif Pangestu Suryoatmojo (Shisones) Jidan Abdurahman Aufan (shinsha) Muhamad Nur Yasin Amadudin (mnyasin26) --- ## **Challenges Solved** * rev/static * misc/ergibi * forensic/trashbag * forensic/red * blockchain/its-show-time * crypto/rsa * crypto/mango * osint/pov * osint/ostr ### A. **Reverse Engineering** #### 1. **Static** Disini diberikan sebuah binary, analisis menggunakan gdb memberikan beberapa informasi penting ![image](https://hackmd.io/_uploads/BJj3xrCy1l.png) ![image](https://hackmd.io/_uploads/HkBTxBAyJg.png) Dia akan print sebuah prompt, kemudian meminta buffer yang akhirnya akan dicompare dengan suatu string, ada juga fungsi decode yang perlu variabel 'flag'. jika di-decompile, kurang lebih seperti ini: ![image](https://hackmd.io/_uploads/HyXAlHCyyl.png) Disini ada variabel external flag, yang bisa kita akses langsung dengan gdb ![image](https://hackmd.io/_uploads/rkx1WHCJJg.png) Apabila melihat isi memori dari variabel flag, kita akan mendapatkan byte berikut: ![image](https://hackmd.io/_uploads/HkvyWSRJyx.png) Karena byte dalam variabel flag akan di xor dengan 0x17(dari fungsi decode, kemudian baru di compare dengan user input, kita coba xor masing masing byte dari variabel flag sehingga mendapatkan flag asli ![image](https://hackmd.io/_uploads/Bka1-HCk1g.png) ![image](https://hackmd.io/_uploads/B1bebrAkyl.png) ### B. **Misc** #### 1. **Ergibi** Diberikan sebuah txt file dengan format seperti berikut ![image](https://hackmd.io/_uploads/B1roZB0JJg.png) Bisa dilihat bahwa kemungkinan, formatnya adalah (x,y, color). sehinggga kita harus membuat suatu file image dari data yang tersedia disini, bisa menggunakan python script dibawah: ![image](https://hackmd.io/_uploads/Hkg3-SA1Jl.png) Alurnya kurang lebih begini: - Parsing masing masing hex warna - catat masing-masing x dan y attribute dari masing masing line. - putpixel untuk semua value yang ada di list chall,txt - outputkan ke satu file hasil :![image](https://hackmd.io/_uploads/Sku2ZHAJke.png) ### C. **Digital Forensic** #### 1. **Trashbag** Terdapat folder yang isinya adalah subfolder-subfolder dengan nama acak. Di dalam subfolder tersebut terdapat sebuah file tanpa ekstensi dengan rata-rata file berukuran 0kB-1kB ![image](https://hackmd.io/_uploads/SyS6WS0yJg.png) Namun terdapat 3 buah subfolder dengan size yang berbeda dari ukuran rata-rata file lain. Setelah ditelusuri denga tampilan Hex, dapat dilihat pada file dengan nama “B3JmSUwPES” memiliki header file PNG ![image](https://hackmd.io/_uploads/rJcJGBRkJl.png) Lalu “O2lzPyiGZd” ![image](https://hackmd.io/_uploads/SJGlMHAJ1l.png) Dan “JLRCWmPe1E” terdapat IEND yang berfungsi sebagai Chunk IEND menandakan akhir dari aliran data gambar dalam file PNG ![image](https://hackmd.io/_uploads/rJ2lzS0J1l.png) ![image](https://hackmd.io/_uploads/Sy_bfSRykl.png) Hasil analisis tadi memberikan kesimpulan bahwa 3 buah file tersebut adalah satu kesatuan file PNG yang perlu digabung dengan urutan B3JmSUwPES sebagai bagian awal gambar, O2lzPyiGZd bagian tengah gambar, dan JLRCWmPe1E adalah bagian akhirnya. Berikut merupkan script untuk menggabungkan 3 file tadi ![image](https://hackmd.io/_uploads/HyRZfSRJJe.png) Setelah digabungkan, hasil akhirnya akan menjadi gambar seperti ini, dengan flag digunakan sebagai watermark pada gambar. ![image](https://hackmd.io/_uploads/rySMGSC11l.png) #### 2. **Red** Diberikan sebuah file pcap yang berisikan histori percobaan login ke web dengan domain [http://zero.webappsecurity.com/signin.html](http://zero.webappsecurity.com/signin.html) ![image](https://hackmd.io/_uploads/H1Emfr01Jx.png) Pada paket HTTP dengan metode POST, terdapat payload yang berisi parameter user\_login, user\_password, dan user\_token. Awalnya, tidak ada kejanggalan yang terlihat. Namun, setelah memperhatikan paket attempt login berikutnya, ditemukan adanya link Google Drive pada parameter user\_password. ![image](https://hackmd.io/_uploads/SJpQzrC11x.png) Saat ditelusuri link tersebut terdapat file hasil\_base64.zip ![image](https://hackmd.io/_uploads/Hk24GBAJJe.png) Ketika file ZIP ini dibuka, ternyata diproteksi oleh password. Mengingat masih banyak paket yang belum dianalisis, diasumsikan bahwa password tersebut mungkin terdapat di dalam file pcap. Menggunakan script ini untuk melakukan scraping terhadap user\_login, user\_password, token, serta cookie dari respon server. ![image](https://hackmd.io/_uploads/Skcrzr0JJx.png) ![image](https://hackmd.io/_uploads/SyZ8GSC1yl.png) Dengan hasil sebagai berikut ![image](https://hackmd.io/_uploads/B1iLMS0y1g.png "result-1") ![image](https://hackmd.io/_uploads/ByZvfBAJke.png) ![image](https://hackmd.io/_uploads/HJSPzr0Jyx.png) Dengan menggunakan keyword-keyword tersebut, ternyata tidak ada yang berhasil membuka file ZIP tersebut. Oleh karena itu, dilakukanlah brute force menggunakan password yang diketahui dari repository. [danielmiessler/SecLists: SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more. (github.com)](https://github.com/danielmiessler/SecLists/tree/master) ![image](https://hackmd.io/_uploads/r1-xmSA11x.png) Menggunakan script di bawah ini untuk mencoba well known password terhadap hasil\_base64.zip ![image](https://hackmd.io/_uploads/Sk5gXB0Jyl.png) ![image](https://hackmd.io/_uploads/rkefmBRyJx.png) Dan tidak disangka-sangka hasilnya adalah ![image](https://hackmd.io/_uploads/SJRfQH0kye.png) Passwordnya admin1234 🗿 Setelah mendapatkan hasil\_base64.txt, dicoba decode dari base64, ternyata isinya masih base64 🗿 ![image](https://hackmd.io/_uploads/HJNXmH0yyx.png) Ini tuh pake script ini: ![image](https://hackmd.io/_uploads/SyuXQSAJJx.png) dapat invalid input kan diakhir, berarti kayanya ada yang valid antara 21-50, yasudah di cat dari 51 ![image](https://hackmd.io/_uploads/HyaXmHCyye.png) ### D. **Web Exploitation** #### 1. **MotoGP24** ![image](https://hackmd.io/_uploads/SyDEQr0k1x.png) ![image](https://hackmd.io/_uploads/HJ3EmB01Jx.png) Diberikan dua server, di mana server pertama menjalankan program backend sederhana menggunakan bahasa Go, dan server kedua menjalankan aplikasi web sederhana menggunakan Python-Flask. Tantangan yang diberikan adalah melakukan penetrasi terhadap endpoint-endpoint yang disediakan oleh kedua server tersebut untuk mendapatkan flag. Pada server pertama, terdapat dua endpoint yang tersedia: /level1 dan /level2. ![image](https://hackmd.io/_uploads/B1y8mrCJ1g.png) Pada endpoint /level1, terdapat beberapa kondisi yang harus terpenuhi. Salah satunya adalah bahwa saat memanggil endpoint ini, harus ada parameter visit dengan nilai yang diawali dengan file:///tmp/. Untuk mendapatkan file flag.txt yang berada di direktori /app/flag.txt, dapat digunakan teknik Path Traversal dengan menyetel parameter visit menjadi file:///tmp/../app/flag.txt. Dengan demikian, URL yang dapat digunakan untuk melakukan penetrasi pada endpoint /level1 adalah [http://{host}/level1?visit=file:///tmp/../app/flag.txt](http://{host}/level1?visit=file:///tmp/../app/flag.txt) Karena source code yang diberikan hanya berisi dummy flag, host perlu diganti dengan 206.189.32.77:51337, sehingga URL lengkapnya menjadi [http://206.189.32.77:51337/level1?visit=file:///tmp/../app/flag.txt](http://206.189.32.77:51337/level1?visit=file:///tmp/../app/flag.txt) Sehingga didapatkanlah bagian pertama dari flag ![image](https://hackmd.io/_uploads/ryNDXS0yJe.png) Langkah selanjutnya adalah penetrasi endpoint /level2 dengan melihat pada source code untuk handling endpoint /level2 ![image](https://hackmd.io/_uploads/r1pvmS0y1l.png) Terdapat beberapa kondisi yang harus dipenuhi. Pertama, parameter visit tidak boleh mengandung .0 (sehingga tidak dapat mengakses alamat seperti 172.0.0.55). Parameter visit digunakan untuk mengakses server kedua yang menjalankan Python dan hanya dapat diakses secara lokal karena pada file docker-compose.yaml tidak terdapat port forwarding, sehingga hanya bisa diakses dari server pertama. Oleh karena itu, nilai visit dapat diisi dengan hostname dari container Python, mengingat kedua container server tersebut berada dalam satu jaringan. Selain itu, terdapat juga parameter key yang harus diisi dengan flag dari bagian pertama. ![image](https://hackmd.io/_uploads/r1M_mHCkJe.png) Maka dari itu visit diisikan sesuai nama servicenya yaitu [http://motogp24-python:1337/](http://motogp24-python:1337/replfi) Program Python memuat endpoint /replfi yang memiliki beberapa kondisi yang harus dipenuhi. Pertama, parameter name tidak boleh mengandung string flag. Selain itu, parameter name harus menyertakan variabel jomMakan dan takNak. ![image](https://hackmd.io/_uploads/Hy3dXB0J1g.png) Pada dasarnya, fungsi ini digunakan untuk mengambil isi dari konten file dengan nama file yang diisikan pada parameter name. Path utama untuk file yang dapat diakses adalah /tmp. ![image](https://hackmd.io/_uploads/S1Zt7HCJkx.png) Parameter jomMakan dan takNak digunakan untuk menentukan jumlah karakter dari konten yang dibaca. Konten tersebut kemudian akan dikodekan dalam format base64 dan dikembalikan sebagai respons. Jika diperhatikan, pada fungsi main() terdapat perintah printf("GETME"), yang menunjukkan bahwa kemungkinan besar flag terdapat pada file main.py. Sayangnya, file tersebut dihapus menggunakan os.remove(). Langkah selanjutnya adalah mencari cara untuk memulihkan kembali source code main.py yang sedang dijalankan atau mengambil log yang mencatat output stdout dari program main.py, karena flag dimasukkan dalam fungsi print(). Salah satu teknik yang dapat digunakan adalah dengan membedah direktori /proc untuk mencari informasi tentang proses yang sedang berjalan, dan mencoba menemukan data terkait program tersebut. ![image](https://hackmd.io/_uploads/HyuKmr0y1g.png) Maka dari itu url yang bisa dibuatkan adalah [http://206.189.32.77:51337/level2?key=META4SEC{f1rst\_fl4g\_0bt41n3d\_\&visit=http://motogp24-python:1337/replfi?name=../proc/1/fd/10%26jomMakan=0%26takNak=1000](http://206.189.32.77:51337/level2?key=META4SEC{f1rst_fl4g_0bt41n3d_&visit=http://motogp24-python:1337/replfi?name=../proc/1/fd/10%26jomMakan=0%26takNak=1000) Setelah dibuatkan dan dipanggil maka hasil responsenya adalah ![image](https://hackmd.io/_uploads/HkAF7HR1kx.png) Jika di decode dengan base64 maka akan menjadi ![image](https://hackmd.io/_uploads/SyB9mHAJJg.png) Namun hingga akhir challenge belum berhasil mendapatkan flag bagian kedua ### E. **Blockchain** #### 1. **its-show-time** Disclaimer: i was trying random bullshit go idfk understand blockchain, somehow got it, LLMs my beloved Mengikuti instruksi ![image](https://hackmd.io/_uploads/Bkj5QBRyyx.png) Kerjakan PoW ![image](https://hackmd.io/_uploads/HyJjmBRkJe.png) dapat uuid, rpc, private key, dan challenge contract address ![image](https://hackmd.io/_uploads/rkro7rAJJg.png) solve: - siapkan koneksi ![image](https://hackmd.io/_uploads/r13j7HAJkx.png) - ABI ![image](https://hackmd.io/_uploads/rJVh7SC1Je.png) ![image](https://hackmd.io/_uploads/Hkcn7HAkkl.png) - Buat instansi contract ![image](https://hackmd.io/_uploads/rJWyVS0kyg.png) - Ambil current secret dari Locker ![image](https://hackmd.io/_uploads/ryH1VSAkkg.png) - unlock secret berdasarkan Locker.sol ![image](https://hackmd.io/_uploads/BJcJNH0yyg.png) ![image](https://hackmd.io/_uploads/HkxxVS01yx.png) - Cek status ![image](https://hackmd.io/_uploads/HJBxEHA1kl.png) hasil ![image](https://hackmd.io/_uploads/r19gNHC1kg.png) lalu nc lagi dan ambil flag menggunakan uuid sebelumnya ![image](https://hackmd.io/_uploads/By7WNHCJJl.png) ### F. **Cryptography** #### 1. **rsa** Diberikan n \= 1615765684321463054078226051959887884233678317734892901740763321135213636796075462401950274602405095138589898087428337758445013281488966866073355710771864671726991918706558071231266976427184673800225254531695928541272546385146495736420261815693810544589811104967829354461491178200126099661909654163542661541699404839644035177445092988952614918424317082380174383819025585076206641993479326576180793544321194357018916215113009742654408597083724508169216182008449693917227497813165444372201517541788989925461711067825681947947471001390843774746442699739386923285801022685451221261010798837646928092277556198145662924691803032880040492762442561497760689933601781401617086600593482127465655390841361154025890679757514060456103104199255917164678161972735858939464790960448345988941481499050248673128656508055285037090026439683847266536283160142071643015434813473463469733112182328678706702116054036618277506997666534567846763938692335069955755244438415377933440029498378955355877502743215305768814857864433151287 e \= 3 c \= 202598944634381067521735864779142816821780137713668101523042893945006078985637259533723322452674207595933223048786324389387389557362118151376657617953904560359787506704381828245424142149593507462408031192148282211892527391965708618923648170371910051941 solve using RsaCtfTool( [https://github.com/RsaCtfTool/RsaCtfTool](https://github.com/RsaCtfTool/RsaCtfTool) ) python3 RsaCtfTool.py \-n 1615765684321463054078226051959887884233678317734892901740763321135213636796075462401950274602405095138589898087428337758445013281488966866073355710771864671726991918706558071231266976427184673800225254531695928541272546385146495736420261815693810544589811104967829354461491178200126099661909654163542661541699404839644035177445092988952614918424317082380174383819025585076206641993479326576180793544321194357018916215113009742654408597083724508169216182008449693917227497813165444372201517541788989925461711067825681947947471001390843774746442699739386923285801022685451221261010798837646928092277556198145662924691803032880040492762442561497760689933601781401617086600593482127465655390841361154025890679757514060456103104199255917164678161972735858939464790960448345988941481499050248673128656508055285037090026439683847266536283160142071643015434813473463469733112182328678706702116054036618277506997666534567846763938692335069955755244438415377933440029498378955355877502743215305768814857864433151287 \-e 3 \--decrypt 202598944634381067521735864779142816821780137713668101523042893945006078985637259533723322452674207595933223048786324389387389557362118151376657617953904560359787506704381828245424142149593507462408031192148282211892527391965708618923648170371910051941 ![image](https://hackmd.io/_uploads/r1gfNHRy1g.png) ![image](https://hackmd.io/_uploads/ry4MNB0kyl.png) Sepertinya di solve oleh smallq attack karena attack pertama yang digunakan, dan saya Ctrl+C awal sekali karena sebelumnya menunggu lama, tetap keluar hasil #### 2. **Mango** Multiple Prime RSA [https://crypto.stackexchange.com/questions/31109/rsa-encryption-and-decryption-with-multiple-prime-modulus-using-crt](https://crypto.stackexchange.com/questions/31109/rsa-encryption-and-decryption-with-multiple-prime-modulus-using-crt) implementation: [https://gist.github.com/jackz314/09cf253d3451f169c2dbb6bbfed73782](https://gist.github.com/jackz314/09cf253d3451f169c2dbb6bbfed73782) ubah saja n, e, dan primes nya sesuai soal yaitu \# Params e \= 65537 c \= 3113930472160035936177686007712795436347387894816426098004409117477540867609093448795455567089294860220841835583576165322227966779564613315848045810160426746621241111420960865169792949989480615986284965803139540172569610886501045761631128981774017910348767412726620901481657879124495054555291287872177869 n \= 7735208939848985079680614633581782274371148157293352904905313315409418467322726702848189532721490121708517697848255948254656192793679424796954743649810878292688507385952920229483776389922650388739975072587660866986603080986980359219525111589659191172937047869008331982383695605801970189336227832715706317 \# Primes factored from n primes \= \[2208664111, 2214452749, 2259012491, 2265830453, 2372942981, 2393757139, 2465499073, 2508863309, 2543358889, 2589229021, 2642723827, 2758626487, 2850808189, 2947867051, 2982067987, 3130932919, 3290718047, 3510442297, 3600488797, 3644712913, 3650456981, 3726115171, 3750978137, 3789130951, 3810149963, 3979951739, 4033877203, 4128271747, 4162800959, 4205130337, 4221911101, 4268160257\] dan modifikasi sedikit untuk print result nya dari ![image](https://hackmd.io/_uploads/BkxNNBAJ1l.png) menjadi ![image](https://hackmd.io/_uploads/SyEE4HRyke.png) Hasil: ![image](https://hackmd.io/_uploads/S1_N4B0ykl.png) ### G. **OSINT** #### 1. **POV** Diberikan sebuah photo: ![image](https://hackmd.io/_uploads/BkCENHAy1x.png) Reverse google search memberitahu bahwa ini adalah photo Tower Bridge, namun itu bukan flagnya. kunci di chall ini adalah pov, kita harus pinpoint lokasi foto ini diterima. clue disini yang pertama adalah jejaring di foto, kelihatannya dicapture dari air, melihat angle dari photo, bisa di pinpoint bahwa foto dicapture dari daerah sini: ![image](https://hackmd.io/_uploads/BkzrEBAyJe.png) Setelah meng-input semua lokasi di daerah situ, ditemukan bahwa jawabannya adalah HMS Belfast. Meta4Sec{HMS Belfast} 2. **OSTR** Diberikan sebuah caption: Hai guyss:) kali ini mimin akan bahas Cyber Security lagi nih hehehe, hari ini mimin akan share 5 tools untuk belajar jadi hacker pemula🙀🙀? eeittss jangan salah tanggap dulu seorang developer juga sedikit atau banyaknya harus paham juga lo soal dunia hacking agar ketika kita membuat sebuah program bisa sedikit meminimalisir celahnya, okay tanpa berlama-lama yuk simak diatas ini. \#cybersecurity \#bssn \#cybercrime \#jagaruangsiber Input ke Duckduckgo, dapat satu post dari cyberspecters ![image](https://hackmd.io/_uploads/rJKHVSA11l.png) Klik link dan lihat comment section ![image](https://hackmd.io/_uploads/rkCS4BRJ1g.png)