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:

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-2010 Yohanes Nugroho