My Journey to Become a Bug Hunters | Bug Bounty IDN Bootcamp

Wahyu Priambodo
11 min readMay 6, 2024

--

Bismillahirrahmanirrahim. So guys, this is my first blog in medium (in Bahasa of course). I hope you guys enjoy read my first blog :)

Disclaimer dulu ya, bahwa di sini saya gak ada maksud untuk sombong atau gimana-gimana, ini pure dari saya ingin share pengalaman menjadi seorang bug hunter, meskipun masih beginner sih 😗 (anak kemarin sore).

I. Networking Fundamental

GIF from giphy.com

Waktu saya masih duduk di bangku SMK, saya sebetulnya baru banget mengenal lebih dekat dengan dunia komputasi. Dari mulai komputasi sederhana, mesin virtual (VirtualBox), bahkan sampai cloud computing. Karena saya mengambil jurusan Sistem Informatika, Jaringan, dan Aplikasi (SIJA), tentunya saya dari awal sudah belajar terkait jaringan komputer (networking). Dari mulai krimping kabel LAN (straight dan cross cable), teknik subnetting (memecah suatu network menjadi sub jaringan yang lebih kecil), switching (penyambungan), dan juga routing (perutean). Untuk praktik switching dan routing sendiri tentunya menggunakan software yang semua anak TKJ sudah pada tau, yaitu Cisco Packet Tracer.

7 OSI Layer

Akan tetapi, sebelum masuk ke materi-materi itu semua, tentunya sebagai seorang anak jaringan perlu khatam atau memahami yang namanya 7 OSI Layer dan TCP/IP yang merupakan hal sangat penting yang perlu dipelajari sebelum mempelajari jaringan komputer lebih lanjut. Hal tersebut bertujuan untuk memberikan gambaran terkait bagaimana komputer saling berkomunikasi satu sama lainnya.

Sedikit penjelasan terkait 7 OSI layer yang saya sudah saya pelajari sebelumnya:

  • Layer ke-1 (Physical Layer): Layer yang bertugas untuk mengirimkan paket data dari satu komputer ke komputer lain. Contohnya yaitu tipe transmisi yang dipakai kabel LAN 100BASE-TX, kabel console RS.232, dan kabel fiber optic (wired) atau gelombang radio / udara. Bentuk transmisinya itu pasti bit stream karena komputer hanya tau 1 dan 0.
  • Layer ke-2 (Data Link Layer): Layer yang bersinggungan dengan bagaimana paket data itu diteruskan ke perangkat lain dan mendeteksi adanya error di lapisan ke-1 dengan memanfaatkan MAC address. Kalo kalian yang gatau MAC Address, jadi MAC Address itu IP Address tapi bersifat permanen dan melekat di suatu perangkat sebagai identitasnya dia. Contohnya yaitu Point-to-Point Protocol (PPP) dan Serial Line Internet Protocol (SLIP) untuk mengirimkan IP melalui koneksi serial, High-Level Data Link Control (HDLC), Frame Relay, dan masih banyak lagi. Selain itu, ada juga 802.1Q yang mungkin sebagian orang tau bahwa sering digunakan untuk keperluan inter-VLAN routing, di mana meskipun dua komputer berbeda VLAN tetap bisa terhubung.
  • Layer ke-3 (Network Layer): Layer yang bertugas untuk menentukan rute atau jalur mana paket data akan dikirim ke si penerima. Contohnnya yaitu Internet Protocol (IP) dan beberapa routing protocol, seperti RIPv1, RIPv2, OSPF, IGRP, dan BGP. FYI: IP versi 4 konon katanya sudah habis, karena memang maksimumnya itu hanya 32 bit, sedangkan sekarang ada versi 6 yang sampai 128 bit.
  • Layer ke-4 (Transport Layer): Contohnya yaitu Transmission Control Protocol (TCP) yang bertanggung jawab pada keberhasilan pengiriman data. Di layer ini juga penentuan berhasil atau tidaknya suatu data (bit) dikirim. Selain TCP, ada juga User Datagram Protocol (UDP) yang lebih cepat dari TCP, namun kelemahannya yaitu tidak menjamin data bisa sampai ke tujuan 100% (bisa hilang di tengah jalan).
  • Layer ke-5 (Session Layer): Layer yang berfungsi untuk memulai (establishing), mempertahankan (maintaining), dan mengakhiri (terminating) sesi komunikasi antar-komputer. Contohnya yaitu NetBIOS, Network File System (NFS), dan Structure Query Language (SQL).
  • Layer ke-6 (Presentation Layer): Layer yang bertugas untuk mengatur format data agar dapat diinterpretasikan oleh aplikasi di layer ke-7. Contohnya format ASCII (text) dan MPEG (audio/video).
  • Layer ke-7 (Application Layer): Contohnya adalah HTTP, FTP, DHCP, Gopher, dll. Layer ke-7 ini bertanggung jawab untuk menyediakan layanan pada berbagai aplikasi yang ditransmisikan melalui jaringan komputer.

Dari 7 OSI Layer yang telah dipelajari tersebut, kemudian dipelajari cara melakukan krimping kabel LAN, yang mana itu merupakan bagian dari Layer 1 (Physical Layer). Eits… media transmisi itu bukan cuman kabel LAN (wired) ygy, melainkan ada juga nirkabel (wireless) yang melalui media udara atau gelombang radio (penjelasan ada di layer 1). Oleh karena itu, transmisi via nirkabel cenderung tidak stabil, karena ada banyak redamannya (obstacle) ketimbang kabel LAN. Tapi jangan salah, kabel pun juga bisa rusak karena tidak terurus atau digigit tikus 🤣.

Selain itu, setiap media transmisi juga ada range atau jangkauannya, biasa dikenal dengan istilah PAN, LAN, MAN, dan WAN kalau konteksnya wired, kalau konteksnya wireless, tambahin W (wireless) di depannya, jadi WPAN, WLAN, WMAN, dan WWAN. Maka dari itu, berterima kasihlah kepada internet provider kita karena dengan adanya jasa mereka, saat ini kita bisa berinternetan 😆. Kadang lemot gapapa namanya juga ISP Indonesia 🤫, kalau mau cepet langganan yang agak mahalan aja ygy. Nah, kalo gw bilang “lemot” berarti ada something yang juga menjadi pembatas. Ternyata, setiap media transmisi itu ada maksimum jangkauan dan kecepatan transmisi paket datanya. Misalnya, kita beli paket internet sebulan itu kecepatannya cuma 1MB. Berarti mau dibeli perangkat secanggih apa pun untuk nge-boost kecepatan jaringan kita ya gak bakalan bisa, karena emang patokannya udah segitu (dikenal dengan istilah bandwidth).

Kalau kita dalamin lagi materi networking emang sepertinya gak ada habisnya, tetapi kalau mau jadi anak jaringan sejati, konsep-konsep dasar begitu bagi saya gak terlalu rumit. Mungkin rumitnya itu di bagian Subnetting dan Variable Length Subnet Mask (VLSM), karena ada perhitungannya 😅.

Jadi, OSI layer itu berfungsi sebagai standar dalam mengatur komunikasi di dalam jaringan komputer dan setiap layernya memiliki tugas dan fungsionalitasnya masing-masing. Setiap layer tersebut juga saling berkaitan satu sama lainnya, bayangin aja kalo misal kabel LAN putus, berarti sambungan kita ke internet juga bakal terputus karena kita gak mendapatkan IP dari router, baik secara dinamis atau statis.

Dosen saya pernah berkata:

Anak jaringan kalau belum paham/mengerti OSI Layer dan TCP/IP, jangan pernah ngaku-ngaku jadi anak jaringan.

Edisi ngonfig cisco switch waktu PKL 😋

Cerita pengalaman singkat waktu PKL di kelas 13 / di semester 7 & 8 (FYI: SIJA itu jurusannya 4 tahun). Kebetulan saya magang diperusahaan yang bergerak di bidang Enterprise Network and Server. Di sana, saya diberikan keleluasaan untuk menimba ilmu sebanyak-banyaknya. Job desk saya pada waktu itu adalah sebagai IT support aja sih sebetulnya, di mana saya pernah mengerjakan beberapa hal yang juga berkaitan dengan jaringan, seperti:

  • Konfigurasi IP PBX beserta IP Phone dari vendor Sangoma untuk keperluan Voice over IP (VoIP).
  • Konfigurasi real device Cisco Switch (keren cuy 😋).
  • Sumbang tenaga untuk migrasi server di salah satu instansi pemerintahan (agak melelahkan karena sehabis pulang PKL langsung diajak begadang malam-malam 🥲).

II. Web Development (Back-end Dev 😎)

Jujur, selama masa SMK, saya sama sekali tidak melakukan develop aplikasi web. Kebanyakan itu terkait GUI (Desktop) App dan Mobile App. Nah, untuk memenuhi rasa penasaran saya terkait web programming, saya mengikuti sertifikasi gratis yang ada di website “https://freecodecamp.org”. Sertifikasi yang saya ikuti itu bernama Responsive Web Design.

https://www.freecodecamp.org/certification/wahyukiddies/responsive-web-design

Entah mengapa, ketika saya mengikuti sertifikasi tersebut cukup membosankan karena tidak ada hal menarik yang bisa membuat saya untuk berpikir lebih kritis atau “think logically”. Tetapi, at least saya jadi tau basic dari Web Design, di mana saya belajar dasar HTML, CSS dan JavaScript.

Nah, setelah masuk perkuliahan, tepatnya di semester 3 lalu, saya mendapatkan tugas besar yang sangat melelahkan (kondisinya belum ada basic sama sekali terkait web development). Yup, di mana saya harus membuat sebuah produk IoT dengan disambungkan dengan aplikasi web yang harus didevelop sendiri. Memang meskipun dikerjakan secara berkelompok, tetapi saya kebagian di bagian backend karena lebih tertarik di logic dan database ketimbang interface (UI/UX). Waktu itu, saya membuat aplikasi web berbasis Python dengan menggunakan framework sederhana, yaitu Flask. Sebelum saya menggunakan Flask, saya menggunakan Native PHP, di mana itu sangat merepotkan karena banyak hal yang harus dilakukan secara manual. Oleh karena itu, di tengah jalan saya memutuskan untuk menggantinya dengan Flask.

Kenapa gak pake Laravel / CI aja mas? Waktu itu, dosen matkul Pemrograman Berorientasi Objek (PBO) saya menyarankan untuk menggunakan Flask saja, karena matkul dia pakai bahasa Python 🗿. Yasudah, daripada saya pusing mempelajari banyak bahasa pemrograman sekaligus, lebih baik saya menggunakan Flask 😅.

Dari proyek tersebut, saya mengeksplorasi hal-hal baru, seperti:

  • MVC Architecture (from scratch): Saya menggunakan arsitektur tersebut karena dirasa cukup mudah dan familiar untuk dikembangkan ketimbang REST-API. Hal itu dikarenakan bagian Front-end belum ada pengalaman menggunakan library seperti ReactJS atau parsing data dari JSON ke HTML. Dan saya pikir karena ini proyek yang waktunya singkat dan sadar bahwa saya masih pemula, menggunakan arsitektur MCV saja sudah cukup.
  • Database Connection: Dari mulai merancang Entity Relational Database (ERD) sampai ke penggunaan ORM untuk memudahkan penulisan query database menggunakan Python. Saya menggunakan ORM cukup populer di Flask yaitu Flask-SQLAlchemy.
  • Seeder: Penggunaan seeder berfungsi untuk membuat objek ke database, di mana saya tidak perlu repot-repot lagi memikirkan data dummy ke database untuk keperluan testing.
  • IoT Communication: Komunikasi dari web app ke device IoT dan sebaliknya dengan menggunakan protokol Message Queuing Telemetry Transport (MQTT). Dengan protokol tersebut, JavaScript dan Python bisa melakukan subscribe (menerima data) atau publish (mengirimkan data) dari/ke NodeMCU. Sebetulnya, ada protokol lain bernama Web Socket, namun karena penggunaannya lebih ke arah antar-aplikasi web, seperti realtime chat, dll. Jadi, saya pikir MQTT adalah opsi yang terbaik saat itu.
  • Security: Beberapa implementasi pengamanan aplikasi yang saya lakukan itu antara lain: enkripsi password user dengan argon2”, sanitasi berbagai input dari user, baik di form mau pun di query parameter untuk mencegah terjadinya serangan Injection Attack dan Brute Force. Selain itu, ada juga CSRF token di form user untuk mencegah request dari user yang tidak sah. Alhamdulillahnya, di Flask sudah terdapat library-library yang mendukung untuk melakukan pengamanan website. Sebetulnya saya masih curiga sepertinya ada celah Server Side Template Injection (SSTI) di kodenya, tapi karena waktu gak cukup apa mau dikata 🙃.

Dari situ, saya menyadari struggle dan waktu development yang tidak main-main saat bekerja di bagian backend. Belum lagi masalah team work yang terkadang miscomm bisa menyebabkan ketidaksinkronan dengan bagian lain, terutama bagian Front-end.

Berikut adalah link repo GitHub proyek “SmarTendance” untuk memudahkan rekap absensi mahasiswa dan dosen dengan menggunakan NodeMCU dan modul RC522 (RFID).

https://github.com/wahyukiddies/SmarTendance

III. Cyber Security untuk Bug Hunting

Photo by Azamat E on Unsplash

Awal mula saya tertarik di dunia siber itu ketika masih semester 2, di mana terdapat Kelompok Studi Mahasiswa (KSM) bernama Computer Student Club (CSC). Di KSM-CSC sendiri menyediakan 3 kelas / divisi yang dapat diikuti, di antaranya: Cyber Security, Software Development, dan Explore (IoT). Setelah saya daftar dan diterima sebagai member Cyber Security, saya mendapatkan insight dan ilmu baru terkait “hacking”. Dan selama saya mengikuti kelas tersebut, ternyata fokus pembelajarannya itu lebih mengarah ke web application pentesting. Karena saya pikir back-end development juga membutuhkan security, why not kalau saya juga menekuni bidang penetration testing (red team) ini.

Beberapa hal penting yang saya dapatkan dari kelas tersebut:

  • Think as attacker, Act as defender
  • Fundamental Networking, Logic and Programming, serta pengenalan Cyber Security, seperti “CIA Triad”, “Cyber Security Teams” (Red-Purple-Blue), dan macam-macam sertifikasi yang dapat diikuti (CEH, OSCP, dll).
  • Setup lab untuk hacking (VM) menggunakan Kali Linux dan VulnLab. Target lainnya yaitu “testphp.vulnweb.com”.
  • Phase 1 — Recon: Mendapatkan informasi penting atau sensitif terkait target. Teknik yang digunakan yaitu Google dan GitHub dorking. Contohnya seperti menemukan file “phpinfo.php”, “database.sql”, atau sensitive data lainnya.
  • Phase 2 — Scanning: Mendapatkan informasi lebih detail mengenai target, seperti “os dicovery”, “port enumeration”, dan “service version”. Menggunakan open source hacking tools, seperti: subfinder (enumerasi subdomain yang ada di situs tertentu), dirsearch (menemukan direktori / file tersembunyi), dan SecurityTails (berbasis web).
  • Phase 3 — Exploitation: Melakukan eksploitasi atau peretasan terhadap target. Beberapa celah yang dipraktikkan yaitu, seperti XSS, SQL Injection (secara manual dan otomatis menggunakan “sqlmap”), IDOR, dan RCE.
  • Phase 4 — Reporting: Belajar cara menuliskan write up atau vulnerability report terkait celah yang berhasil dieksploitasi.

Sebagai member yang baik, tentunya saya memiliki keinginan untuk berprestasi dan alhamdulillahnya itu terwujud dengan memenangkan lomba Kompetisi Mahasiswa Informatika Politeknik Nasional (KMIPN 5) di Politeknik Negeri Elektronik Surabaya (PENS) cabang lomba Cyber Security (CTF). Di lomba tersebut ada 2 jenis CTF yang dilombakan, yaitu pastinya “Jeopardy-style” dan “Attack-Defense style”. Menurut saya, tingkat jeopardy tidak begitu sulit bagi pemula, jadi saya pikir sangat bagus untuk melatih analisis celah atau bug yang ada di suatu aplikasi. Saya sendiri lebih berfokus pada kategori Web Exploitation dan OSINT. Pusing ges kalo kripto atau pwn (a.k.a binary exploitation) 😅.

Sertifikat Juara 2 Lomba CTF KMIPN 5 di PENS

Selain itu, hasil dari skill Cyber Security yang terus saya asah akhirnya melahirkan PoC “Reflected XSS” pertama yang saya temukan di salah satu instansi pemerintahan Indonesia. Sebetulnya saya ingin membagian write up nya tapi ditakutkan dari instansi terkait tidak mengizinkan jadi saya pikir tidak perlu dishare. Tapi pada intinya, saya menemukan bug itu pertama-tama memanfaatkan google dorking sebagai berikut.

site:*.go.id inurl:?keyword=

Ketemulah saya pada web pemerintah di bawah ini, dan ketika saya coba memasukan payload XSS (attribute context) sederhana, ternyata ke-trigger. Ini payload yang saya inject waktu itu.

" onclick="alert(window['document']['cookie']);"

Senengnya minta ampun mas 😂. Di situ saya langsung bikin laporan (Web Vulnerability Report) dan kirim reportnya ke email CSIRT instansi terkait.

My First POC (Reflected XSS)

Sebetulnya ada banyak lagi sih, tapi 1 aja udah cukup biar gak dikira pamer dan kepanjangan juga 😂. Btw, itu gak ada bounty ya ges, cuman saya report aja (biasalah instansi kita 😅). Tapi yang pasti gak melulu XSS ya ges, saya pernah nemuin celah SSRF dan HTML Injection di instansi pemerintahan juga.

IV. Kesimpulan dan Penutup

Dari yang sudah saya jelaskan sebelumnya, dapat ditarik kesimpulan bahwa jaringan komputer sangat memegang peranan penting, karena tanpa adanya dia mungkin kita gak bisa masih susah untuk saling berkomunikasi 😚. Pada intinya, jaringan komputer menurut saya adalah komunikasi antar-komputer melalui protokol TCP/IP melalui media transmisi tertentu dan berdasarkan jarak tertentu di dalam jaringan, sehingga orang lain yang dalam 1 segmen jaringan dengan kita bisa saling berkomunikasi satu sama lain.

Programming (dalam hal ini fokusnya di web development) adalah suatu aktivitas yang dilakukan guna menyelesaikan sebuah permasalahan sesuai dengan ketentuan yang berlaku, seperti logika dan alur pemrograman. Hasil akhirnya, seorang developer atau programmer bisa menghasilkan suatu sistem atau aplikasi yang bermanfaat dan bisa dipakai oleh orang lain.

Cyber security merupakan ilmu yang mempelajari tentang tindakan pencegahan terhadap adanya serangan-serangan, penyusup, dan bentuk cyber crime lainnya, yang dapat terjadi pada suatu sistem atau aplikasi. Segala bentuk ancaman siber dapat masuk dari segala lini, utamanya jaringan komputer. Karena jika kita sudah terkoneksi dengan internet, mau tidak mau kita harus menerima segala risiko ancaman siber yang bisa terjadi kapan saja ( take it or leave it ? ). Maka dari itulah, muncul Blue team (defensive), seperti Computer Security Incident Response Team (CSIRT) yang bertugas untuk mengamankan dan mencegah serangan-serangan yang terjadi supaya tidak makin menyebar ke sistem lain. Jadi, selalu tanamkan prinsip bahwa:

No system is safe.

Harapan saya bisa keterima di bootcamp bug bounty by IDN supaya saya bisa mendapatkan materi-materi baru yang belum pernah saya pelajari sebelumnya atau minimal bisa mendapatkan insight baru dari kakak-kakak mentor. Dan insya allah, ke depannya saya bisa mengamalkan ilmu yang sudah didapatkan ke orang-orang yang sekiranya membutuhkan 😌. Selain itu, apalagi kalau bukan karena uang 🤑, usaha keras harus dibayar dengan hasil yang memuaskan ya kan ges?. Bismillah, target di tahun ini (2024) bisa dapet bounty minimal ≥ $100 (ratusan dollah 😋). Aaamiiin.

V. Referensi

Saya menggunakan google dork untuk mencari referensi dengan tema sejenis yaitu:

site:medium.com inurl:"Bug Bounty IDN Bootcamp"

Alhasil, saya bisa membaca artikel teman-teman yang juga ikut berpartisipasi dalam event bug bounty hunters ini. Gapapa kan? Orang legal juga kok 😁.

Hasil Google Dork Untuk Pencarian Referensi Bug Bounty

Berikut saya lampirkan link media sosial saya pribadi, barangkali ada temen-temen yang berminat untuk saling kenal:

--

--

Wahyu Priambodo
Wahyu Priambodo

Written by Wahyu Priambodo

Nothing special at my body, but you can see it in my heart :)

No responses yet