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 E4Menemukan 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-endianMemverifikasi 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 + shellcodeMenyatukan 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.