Memori dan Stack
Cara kerja overflow
Memori dan Stack adalah pelajaran Ethical Hacking Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ethical Hacking Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ethical Hacking Academy mencakup 4 pelajaran total.
Tata Letak Memori Proses
Saat sebuah program berjalan, sistem operasi memberinya tata letak memori dengan wilayah yang berbeda: teks (kode), data/BSS (global), heap (alokasi dinamis), dan stack.
Luapan buffer paling sering menyalahgunakan stack, sehingga memahaminya sangat penting.
Apa Itu Stack?
Stack adalah wilayah memori yang digunakan untuk pemanggilan fungsi. Stack menyimpan variabel lokal, argumen fungsi, dan alamat pengembalian.
Di x86, stack berkembang ke bawah: mendorong data memindahkan penunjuk stack menuju alamat yang lebih rendah. Arah ini penting ketika terjadi luapan.
Kerangka Stack
Setiap pemanggilan fungsi membuat sebuah kerangka stack. Kerangka biasanya berisi variabel lokal, penunjuk basis tersimpan (EBP), dan alamat pengembalian (EIP tersimpan).
Alamat pengembalian memberi tahu CPU tempat melanjutkan eksekusi setelah fungsi selesai. Mengendalikannya merupakan inti eksploitasi luapan stack.
Register Utama
Pada x86 32-bit, register pentingnya adalah:
- ESP: penunjuk stack, bagian teratas stack.
- EBP: penunjuk basis, jangkar untuk kerangka saat ini.
- EIP: penunjuk instruksi, alamat instruksi berikutnya.
Jika Anda mengendalikan EIP, Anda mengendalikan alur eksekusi.
Apa Itu Buffer?
Buffer adalah blok memori berukuran tetap, seperti array karakter lokal. Program mengharapkan data dapat dimuat di dalamnya.
Jika program menyalin data lebih banyak daripada kapasitas buffer tanpa memeriksa panjangnya, kelebihan data akan meluap ke memori di sebelahnya.
char buffer[64];
strcpy(buffer, user_input); // no bounds checkLuapan Buffer
Luapan buffer terjadi ketika input melebihi ukuran buffer dan menimpa data di sebelahnya pada stack.
Karena EBP tersimpan dan alamat pengembalian berada tepat setelah buffer lokal, input yang cukup besar dapat menimpa alamat pengembalian dan membajak alur eksekusi.
Fungsi Berbahaya
Luapan biasanya berasal dari fungsi C yang tidak aman dan tidak memeriksa panjang:
strcpy,strcat,sprintf,gets.
Alternatif yang lebih aman seperti strncpy atau snprintf menerima batas ukuran, tetapi kode lama masih dipenuhi fungsi yang berbahaya.
gets(buffer); // never use: no length limit at allManfaat Menimpa EIP
Saat fungsi yang rentan mengembalikan kendali, CPU mengambil alamat pengembalian (yang kini dikendalikan penyerang) ke dalam EIP, lalu melompat ke alamat tersebut.
Jika Anda mengarahkan EIP ke kode mesin yang Anda sisipkan sendiri (kode shell), CPU akan mengeksekusinya dengan hak akses program.
Pengalamatan Little-Endian
x86 menggunakan little-endian: nilai multibita disimpan mulai dari bita paling tidak signifikan. Untuk menimpa alamat pengembalian dengan 0x080414C3, Anda menulis bita dalam urutan terbalik.
Kesalahan dalam menentukan endianness merupakan kesalahan umum pemula yang membuat eksploit gagal tanpa pesan.
address 0x080414C3 -> bytes \xc3\x14\x04\x08Perlindungan Modern
Sistem modern menambahkan pertahanan yang mempersulit eksploitasi:
- DEP/NX: menandai stack sebagai tidak dapat dieksekusi.
- ASLR: mengacak alamat memori.
- Stack canary: mendeteksi penimpaan sebelum proses pengembalian.
Kursus ini berfokus pada kasus klasik (perlindungan dinonaktifkan) untuk mengajarkan dasar-dasarnya.
Mengapa Ini Masih Penting
Meskipun pertahanan modern membuat luapan stack klasik lebih sulit dieksploitasi, dasar-dasarnya tetap penting. Sistem tertanam, IoT, dan perangkat lunak lama sering kali sama sekali tidak memiliki perlindungan ini.
Menguasai kasus dasar juga merupakan prasyarat untuk teknik lanjutan seperti ROP yang melewati mitigasi modern.
Pemeriksaan Singkat
Ingat kembali nilai yang pada akhirnya ingin dikendalikan penyerang.
Rangkuman
Sekarang Anda memahami dasar-dasarnya:
- Stack menyimpan variabel lokal, EBP tersimpan, dan alamat pengembalian, serta tumbuh ke arah bawah.
- ESP, EBP, EIP adalah register utama x86; mengendalikan EIP berarti mengendalikan eksekusi.
- Fungsi yang tidak aman seperti
strcpydangetsmenyebabkan luapan. - x86 menggunakan little-endian; pertahanan modernnya adalah DEP, ASLR, dan canary.
Berikutnya Anda akan melakukan fuzz pada program untuk menemukan offset keruntuhan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memori dan Stack” gratis?
Ya — teks lengkap “Memori dan Stack” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ethical Hacking Academy, upgrade ke CoddyKit PRO. Kursus Ethical Hacking Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Memori dan Stack”?
Cara kerja overflow Kamu berlatih Ethical Hacking Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Ethical Hacking Academy?
Tidak diperlukan pengalaman sebelumnya. Ethical Hacking Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Memori dan Stack” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Ethical Hacking Academy ini?
Ya. Setiap pelajaran Ethical Hacking Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.