Programming untuk CTF
Sebagian soal CTF bisa diselesaikan tanpa programming sama sekali, sebagian lagi butuh keahlian minimal membaca program, dan sisanya hanya bisa diselesaikan dengan programming. Topik pemrograman ini sangat luas, dan tidak mungkin dibahas sangat dalam, jadi hanya topik yang berhubungan dengan CTF saja yang saya bahas.
Dalam dunia pentesting yang real: tanpa programming kita hanya bisa memakai tool buatan orang lain, tidak bisa memodifikasi atau membuat tool baru. Minimal kemampuan membaca kode dan mencari kesalahan program diperlukan, kalau tidak, maka hanya bisa jadi pentester yang mengetes software default saja.
Lihat juga bagian reverse engineering untuk melihat tool yang dibutuhkan untuk membongkar masing-masing bahasa/teknologi.
Saya memiliki blog khusus yang membahas programming di http://cintaprogramming.com
Keahlian Umum
Cobalah agar Anda bisa menjalankan "hello world" di berbagai bahasa. Jadi minimal Anda perlu bisa menginstall compiler/interpreter bahasa tersebut dan mengetahui langkah untuk menjalankan program dalam bahasa tersebut. Akan lebih baik lagi jika Anda juga mensetup database server sendiri, karena biasanya ini merupakan requirement untuk menjalankan program tertentu.
Jika ada program yang menarik ditulis dalam bahasa itu, cobalah menginstall/menjalankan itu. Contoh: cobalah menginstall Wordpress (PHP), redmine (Python), dll. Jika sebuah bahasa punya framework yang populer, coba juga menginstall dan menjalankan program dalam framework itu (misalnya Ruby On Rails untuk Ruby, Yii/CI untuk PHP).
Banyak soal Web (terutama PHP) bisa diselesaikan jika Anda bisa menjalankan skrip tersebut di web server sendiri.
Bahasa Dinamis
Untuk bahasa dinamis seperti Python, Ruby, JavaScript biasa ada soal "jailbreak", membebaskan diri dari suatu sandbox untuk membaca variabel atau mengeksekusi method yang diproteksi.
C
Untuk bisa menyelesaikan hal-hal yang low level (reversing, exploit) maka keahlian C dibutuhkan. Pelajarilah dari hal dasar sampai ke hal yang rumit (pointer, function pointer, memory management, linked list).
Tulisan lama yang pernah saya buat ini semoga bisa membuka mata Anda tentang seberapa dalam Anda perlu mengenal C untuk melakukan eksploitasi:
http://tinyhack.com/2014/07/07/exploiting-the-futex-bug-and-uncovering-towelroot/
PHP
Jika Anda melakukan pentesting web, maka PHP wajib diketahui. Soal PHP ini juga salah satu soal yang paling sering muncul dalam CTF.
Beberapa point PHP yang penting diketahui adalah:
- Tentang tipe juggling dan type comparison di PHP
- Tentang data filter
- Tentang
include
(ini kadang perlu digabung dengan filter) - Tentang serialization
Python
Python merupakan bahasa scripting yang sangat populer dan mudah digunakan. Sudah ada banyak library yang memudahkan kita menyelesaikan berbagai persoalan.
JavaScript
Selain digunakan di sisi client, sekarang ini JavaScript juga sudah banyak digunakan di sisi server (NodeJS). Beberapa soal CTF juga menggunakan JavaScript, baik di client maupun server.
Java
Pengetahuan Java berguna untuk pentesting Android app. Soal Android juga cukup sering muncul di berbagai CTF.
Bahasa Lain
Beberapa bahasa lain kadang muncul di CTF, misalnya C# dan Go juga bisa muncul.
Soal programming competition (PPC)
Beberapa CTF akhir-akhir ini memberikan soal yang kategorinya mendekati soal programming competition, bedanya: kode kita tidak harus cepat, tidak harus dalam bahasa tertentu, dan biasanya boleh memakai library apa saja.
Contoh Soal
Catwestern
Emulasi instruksi X86
https://github.com/rentjongteam/write-ups-2015/tree/master/def-con-quals-2015/catwestern
Mathwiz
Evaluasi ekspresi
https://github.com/rentjongteam/write-ups-2015/tree/master/def-con-quals-2015/mathwiz
Experiment
Evaluasi ekspresi plus butuh bantuan resource eksternal
http://blog.rentjong.net/2015/03/bctf-2015-experiment.html
Haymarket
Soal COBOL
http://blog.rentjong.net/2015/03/boston-key-party-2015-haymarket.html
Wellington
Soal Prolog
http://blog.rentjong.net/2015/03/boston-key-party-2015-wellington.html
IDSecconf 2014 medium exploit
Python Sandbox
http://blog.rentjong.net/2014/11/idsecconf-offline-2014-medium-exploit.html
HITBKul 2014: Challenge 3
Programming untuk bruteforce
http://blog.rentjong.net/2014/10/hitbkul-2014-challenge-3.html
Objection
JavaScript jailbreak
http://blog.rentjong.net/2014/10/hacklu-ctf-2014-objection.html
JS Jail
Javascript jailbreak lain
http://blog.rentjong.net/2014/06/ctf-secuinside-misc200-js-jail.html
Altered Code
Soal yang aneh mengenai tab vs spasi
http://blog.rentjong.net/2014/07/pwnium-ctf2014-for150-altered-code.html
ROT
Soal yang perlu diselesaikan dengan programming, spesifiknya lagi: graphic programming.
http://blog.rentjong.net/2014/07/pwnium-ctf-2014-prog300-rot.html
Web200 (Secuinside 2014)
Soal web, tapi akhirnya perlu diselesaikan dengan implementasi ulang CRC32
http://blog.rentjong.net/2014/06/ctf-quals-secuinside-2014-web200.html
Gas station
Memakai K-means clustering
http://blog.rentjong.net/2014/05/asis-quals-2014-write-up-gas-stations.html
Dragon CTF 2014 Teaser (WEB400)
Soal web, tapi butuh pengetahuan mendalam tentang PHP dan juga enkripsi
http://blog.rentjong.net/2014/04/confidence-dragon-sector-ctf-teaser.html
Copyright © 2009-2018 Yohanes Nugroho