
KKSI adalah ajang kompetesi CTF Indonesia yang bertujuan untuk menjalin Komunikasi sosial antara TNI, khususnya TNI AD dengan Masyarakat umum di era digital. Karena saya sekarang lagi tidak ada Indonesia untuk studi master S2, jadi ga bisa ikut perlombaannya yang menurut saya sayang sekali. Tapi untung ada temen yang coba bagi beberapa soal reverse engineering dan PWN untuk saya coba.
Oleh karena itu saya coba pingin bikin write up untuk dua kategori ini agar semua teman-teman yang belom berhasil mengerjakan soalnya bisa dapat pencerahan. Tapi dimulai dari yang mudah dulu yah !
Ayo! kita bahas soal PWN 1 yang dikasih binari pwn_perjuangan
Pertama-tama, kita masukan file binari nya ke GDB dan coba cek mekanisme keamanan apa yang ada di dalamnya.
Hmmm! kalau diliat dari hasilnya program nya cukup aman karena ada beberapa keamanan yang dipakai seperti
- NX (non-executable) berarti kita ga bisa melakukan eksekusi kode di dalam stack dengan shellcode
- PIE (Position Independent Executable) berarti alamat memori di dalam program selalu acak jadi makin sulit untuk membuat shellcode juga.
biar lebih ngerti dengan mekanisme kodenya coba dimasukin ke ghidra yang merupakan alat decompiler jadi kita bisa analisa source codenya.
setelah di analisa sama ghidra coba kita liat isi dari fungsi yang ada didalam program. Saat dicari ga ada fungsi main yang bisa dipakai untuk titik mulai analisa. Jadi gimana selanjutnya ?
tips nya jadi gini, kan kita pingin cari di bagian kode mana sih yang punya fungsi menarik yang memberikan petunjuk buat dapatin flagnya nih. Kalau kita analisa dari program setiap kali kita kontak dia selalu keluarin string "Give me the number" kan ?
pasti buat ngeluarin string nya kan pake fungsi "prinft" oleh karena itu kita coba "cross reference" function printf biar tahu ini function di panggil di function mana lagi sih.
caranya cross reference di ghidra gmana ?
klik kana function abis itu pilih "show reference to"
nah kita dapat nih fungsi yang punya petunjuk tentang flag nya (coba baca2 dulu function decompilenya)
oke coba kita telaah source code nya
jadi mekanisme programnya kan minta kita nebak nomor kan ? dan ternyata nomor yang kita harus tebak di buat dari nomor random
dan input kita dibandingkan dengan hasil penghitungan randomnya. Bisa dilihat kalau input kita itu dimasukin ke function atoi() yang berati input kita akan diubah ke tipe integer.
int atoi(const char *str); https://en.wikibooks.org/wiki/C_Programming/stdlib.h/atoi
dan input dibandingkan (ivar1 + ivar2) - ivar3 yang 3 variable ini dibuat dari random.
disaat ini saya bingung gimana caranya kita nebak angka acak, oke coba kita teliti bagian randomnya lagi
function srand() itu diisi parameter 1, function ini dipakai untuk "seeding" agar bisa melakukan inisialisai pseurandom angka acak tapi karena cuma diisi satu angka acak nya akan sama terus. Kelemahan ini adalah Random Number Vulnerability disebabkan karena angka tidak diacak dengan benar kita dapat menebaknya.
link: http://www.tech-faq.com/random-number-vulnerability.html
oke saya coba bikin program yang mirip dengan source code binary yang dikasih kita dapat hasilnya 969527492
saya coba jalankan di mesin yang lain dan ternyata hasilnya sama, coba kita masukin nomonya di binarynya
oke mantab! dapat sekian write up dari saya :D
Comments
Post a Comment