0Pricing
Cyber Security Academy · Pelajaran

Pemrograman Berorientasi Pengembalian (ROP)

Rangkai gadget ROP untuk melewati NX/DEP dan membuat eksploitasi tanpa shellcode.

Pemrograman Berorientasi Pengembalian (ROP) adalah pelajaran Cyber Security Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 Cyber Security Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cyber Security Academy mencakup 4 pelajaran total.

Alasan ROP Ada

Dengan NX/DEP, kode shell yang disisipkan tidak dapat dieksekusi. Pemrograman Berorientasi Pengembalian (ROP) mengatasinya dengan merangkai rangkaian kecil kode yang sudah ada (komponen) yang diakhiri instruksi ret. Tidak ada kode baru yang disisipkan — hanya tumpukan dan kode yang sudah ada yang digunakan.

Apa Itu Komponen ROP

Komponen ROP adalah rangkaian instruksi pendek yang diakhiri dengan ret, yang ditemukan dalam biner atau pustaka yang dimuat. Contohnya: pop rdi; ret, pop rsi; ret, mov eax, 0; ret. Komponen-komponen ini merupakan penyusun rantai ROP.

Menemukan Komponen ROP

Alat untuk menemukan komponen ROP dalam biner:

# ROPgadget:
ROPgadget --binary ./vuln --rop
# ropper:
ropper -f ./vuln --search "pop rdi"
# pwntools:
from pwn import *
elf = ELF("./vuln")
rop = ROP(elf)
rop.find_gadget(["pop rdi", "ret"])

Membangun Rantai ROP

Rantai ROP adalah urutan alamat pengembalian pada tumpukan. Saat alamat pengembalian yang ditimpa tercapai, eksekusi melompat ke komponen 1 (yang melakukan sesuatu yang berguna, lalu kembali), yang mengambil alamat berikutnya dan melompat ke komponen 2, dan seterusnya.

Penimpaan ret2plt dan GOT

ret2plt memanggil fungsi melalui PLT (Tabel Pengaitan Prosedur) — berguna untuk memanggil puts() guna membocorkan alamat libc, lalu menggunakan alamat tersebut untuk memanggil system(). Struktur PLT/GOT dapat diprediksi bahkan dengan ASLR pada biner main (tanpa PIE).

Mengatasi ASLR dengan ROP

ROP dapat membocorkan alamat fungsi libc dari GOT menggunakan komponen yang memanggil puts(GOT_entry). Alamat yang bocor mengungkap basis libc. Hitung offset system(): system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].

SROP: Pemrograman Berorientasi Sigreturn

SROP menggunakan panggilan sistem sigreturn untuk memuat bingkai konteks sinyal palsu, sehingga semua register ditetapkan ke nilai yang dikendalikan penyerang dalam satu komponen. Berguna ketika hanya sedikit komponen yang tersedia.

Varian JOP dan COP

Di luar ROP:

  • JOP (Pemrograman Berorientasi Lompatan) — merangkai komponen yang diakhiri dengan jmp, bukan ret
  • COP (Pemrograman Berorientasi Panggilan) — merangkai komponen yang diakhiri dengan call

Pertahanan seperti CFI (Integritas Alur Kontrol) bertujuan mencegah semuanya.

Integritas Alur Kontrol (CFI)

CFI memastikan bahwa cabang tidak langsung (panggilan dan pengembalian) hanya melompat ke target yang valid. CFI memutus ROP dengan memvalidasi target pengembalian terhadap tumpukan bayangan atau daftar izin. Intel CET (Teknologi Penegakan Alur Kontrol) menerapkan CFI pada tingkat perangkat keras.

Contoh ROP Praktis

ret2libc 64-bit melalui ROP:

# pwntools ROP chain example:
from pwn import *
p = process("./vuln")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
elf = ELF("./vuln")
rop = ROP(elf)
# Leak puts GOT to get libc base
rop.puts(elf.got["puts"])
rop.main()

Ringkasan Mitigasi

Perlindungan terhadap ROP:

  • CFI — memvalidasi target cabang
  • Tumpukan bayangan (CET) — salinan alamat pengembalian yang dilindungi perangkat keras
  • RELRO (penuh) — menjadikan GOT hanya dapat dibaca dan mencegah penimpaan
  • PIE — mengacak basis biner sehingga diperlukan kebocoran untuk menemukan komponen

Pemeriksaan Singkat: ROP

Apa yang dimaksud dengan komponen ROP?

Rangkuman Pelajaran

ROP melewati NX/DEP dengan merangkai rangkaian kode yang sudah ada (komponen yang diakhiri dengan ret) — tidak diperlukan penyisipan kode shell. Alat untuk menemukan komponen: ROPgadget, ropper. ret2plt membocorkan alamat libc untuk mengatasi ASLR. Pertahanan: CFI, tumpukan bayangan (Intel CET), PIE, dan RELRO penuh. ROP merupakan dasar eksploitasi biner modern.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemrograman Berorientasi Pengembalian (ROP)” gratis?

Ya — teks lengkap “Pemrograman Berorientasi Pengembalian (ROP)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cyber Security Academy, upgrade ke CoddyKit PRO. Kursus Cyber Security Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pemrograman Berorientasi Pengembalian (ROP)”?

Rangkai gadget ROP untuk melewati NX/DEP dan membuat eksploitasi tanpa shellcode. Kamu berlatih Cyber Security 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 Cyber Security Academy?

Tidak diperlukan pengalaman sebelumnya. Cyber Security 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 2 dari 4.

Berapa lama pelajaran “Pemrograman Berorientasi Pengembalian (ROP)” 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 Cyber Security Academy ini?

Ya. Setiap pelajaran Cyber Security 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. Luapan Buffer Tumpukan
  2. Pemrograman Berorientasi Pengembalian (ROP)
  3. Kerentanan String Format
  4. Eksploitasi Heap: Use-After-Free dan Penyemprotan Heap
← Kembali ke Cyber Security Academy