0Pricing
Ethical Hacking Academy · Pelajaran

Mengendalikan EIP

Menimpa alamat kembalian

Mengendalikan EIP adalah pelajaran Ethical Hacking Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Tujuan

Anda sudah memiliki offset, sehingga dapat menempatkan empat bita apa pun ke dalam EIP. Sekarang pertanyaannya: alamat apa yang harus Anda masukkan?

Anda ingin EIP menunjuk ke kode shell. Namun, Anda tidak dapat langsung menetapkan alamat stack; Anda memerlukan lompatan yang andal.

Mengapa Tidak Menetapkan Alamat Stack Secara Langsung?

Alamat stack tempat kode shell Anda berada dapat berubah di antara eksekusi dan sistem. Bahkan perubahan kecil pada lingkungan dapat memindahkannya.

Sebagai gantinya, gunakan instruksi stabil yang sudah ada di memori untuk mengalihkan eksekusi ke lokasi yang sedang ditunjuk ESP.

Trik JMP ESP

Jika ESP menunjuk ke kode shell saat keruntuhan terjadi, Anda dapat mengatur EIP ke alamat instruksi JMP ESP. Saat EIP memuat alamat tersebut, CPU mengeksekusi jmp esp dan melompat ke kode shell Anda.

Pengalihan tidak langsung ini membuat eksploit andal, terlepas dari alamat stack yang sebenarnya.

jmp esp   ; opcode FF E4

Menemukan JMP ESP

Cari modul yang dimuat (sebaiknya modul tanpa ASLR) untuk menemukan bita opcode FF E4. Alamat dasar modul tetap konstan, sehingga gadget ini dapat diandalkan.

Alat seperti mona.py dapat menemukan instruksi yang sesuai secara otomatis.

!mona jmp -r esp -cpb "\x00"

Menghindari Karakter Terlarang

Beberapa nilai bita merusak input sebelum mencapai buffer secara utuh. Contoh klasiknya adalah bita null 0x00, yang mengakhiri string C. Contoh lainnya adalah 0x0a (baris baru) dan 0x0d (carriage return).

Alamat JMP ESP tidak boleh mengandung karakter terlarang mana pun.

Mengidentifikasi Karakter Terlarang

Untuk menemukan bita yang bermasalah, kirim semua nilai bita 0x00-0xff di dalam buffer, lalu periksa memori pada debugger. Bita yang berubah atau hilang adalah karakter terlarang.

Anda akan mengecualikan bita tersebut dari alamat pengembalian maupun kode shell.

!mona bytearray -cpb "\x00"

Menyusun Penimpaan EIP

Sekarang susun input: padding hingga offset, lalu alamat JMP ESP dalam urutan little-endian.

Jika JMP ESP berada di 0x625011AF, bita yang ditulis dibalik urutannya.

buf = "A"*offset + "\xaf\x11\x50\x62"  # 0x625011AF, little-endian

Memverifikasi Lompatan

Pasang breakpoint pada alamat JMP ESP di debugger, lalu jalankan eksploit. Saat EIP mencapainya dan melangkah ke lokasi ESP, Anda telah memastikan pengalihan yang andal.

Pada titik ini EIP menunjuk ke lokasi kode shell Anda nantinya.

Menyediakan Ruang untuk Kode Shell

Setelah alamat pengembalian, buffer yang tersisa (yang ditunjuk ESP) menampung kode shell Anda. Jika ruangnya sempit, Anda mungkin perlu melakukan lompatan singkat atau memindahkan posisinya.

NOP sled (rangkaian bita no-op 0x90) sebelum kode shell memberikan toleransi sehingga lompatan dapat mendarat di mana saja dalam sled.

buf = "A"*offset + ret + "\x90"*16 + shellcode

Menyatukan Semuanya

Struktur eksploit lengkapnya kini jelas:

  • Padding hingga offset.
  • Alamat JMP ESP (tanpa karakter terlarang, dalam urutan little-endian).
  • NOP sled.
  • Kode shell.

Anda tinggal selangkah lagi untuk mendapatkan shell.

Alternatif untuk JMP ESP

JMP ESP adalah pengalihan klasik, tetapi bukan satu-satunya. Jika register lain menunjuk ke buffer Anda, Anda dapat menggunakan jmp eax, call esp, atau gadget push esp; ret.

Prinsipnya sama: temukan instruksi stabil yang mengalihkan kendali ke lokasi kode shell Anda.

Pemeriksaan Singkat

Ingat kembali alasan JMP ESP lebih dipilih daripada alamat stack yang ditetapkan secara langsung.

Rangkuman

Sekarang Anda mengendalikan alur eksekusi:

  • Timpa EIP dengan alamat gadget JMP ESP, bukan alamat stack yang mudah berubah.
  • Temukan gadget dalam modul non-ASLR dan hindari karakter terlarang seperti 0x00.
  • Tulis alamat dalam format little-endian dan tambahkan NOP sled sebelum kode shell.

Berikutnya Anda akan membuat kode shell dan membuka shell.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengendalikan EIP” gratis?

Ya — teks lengkap “Mengendalikan EIP” 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 “Mengendalikan EIP”?

Menimpa alamat kembalian 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 3 dari 4.

Berapa lama pelajaran “Mengendalikan EIP” 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.

Semua pelajaran dalam kursus ini

  1. Memori dan Stack
  2. Fuzzing untuk Menemukan Crash
  3. Mengendalikan EIP
  4. Shellcode dan Eksploitasi
← Kembali ke Ethical Hacking Academy