Cyber Security Academy · Pelajaran

Pengaturcaraan Berorientasikan Pemulangan (ROP)

Rantaikan gadget ROP untuk memintas NX/DEP dan bina eksploit tanpa shellcode.

Pelajaran 2 daripada 413 langkah

Pengaturcaraan Berorientasikan Pemulangan (ROP) ialah pelajaran Cyber Security Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Cyber Security Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Cyber Security Academy merangkumi sejumlah 4 pelajaran.

Sebab ROP Wujud

Dengan NX/DEP, kod shell yang disuntik tidak boleh dilaksanakan. Pengaturcaraan Berorientasikan Pulangan (ROP) mengatasinya dengan merantaikan urutan kod kecil sedia ada (gajet) yang berakhir dengan arahan ret. Tiada kod baharu disuntik — hanya tindanan dan kod sedia ada digunakan.

Apakah Gajet ROP

Gajet ialah urutan arahan pendek yang berakhir dengan ret, yang ditemui dalam binari atau pustaka yang dimuatkan. Contoh: pop rdi; ret, pop rsi; ret, mov eax, 0; ret. Gajet ialah blok binaan rantaian ROP.

Mencari Gajet

Alat untuk mencari gajet ROP dalam binari:

# 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"])

Membina Rantaian ROP

Rantaian ROP ialah urutan alamat pulangan pada tindanan. Apabila alamat pulangan yang ditulis ganti dicapai, aliran melompat ke gajet 1 (yang melakukan sesuatu yang berguna, kemudian kembali), yang mengeluarkan alamat seterusnya dan melompat ke gajet 2, dan seterusnya.

ret2plt dan Penulisan Ganti GOT

ret2plt memanggil fungsi melalui PLT (Jadual Pautan Prosedur) — berguna untuk memanggil puts() bagi membocorkan alamat libc, kemudian menggunakan alamat tersebut untuk memanggil system(). Struktur PLT/GOT boleh diramalkan walaupun dengan ASLR untuk binari utama (tanpa PIE).

Menewaskan ASLR dengan ROP

ROP boleh membocorkan alamat fungsi libc daripada GOT menggunakan gajet yang memanggil puts(GOT_entry). Alamat yang dibocorkan mendedahkan asas libc. Kira ofset system(): system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].

SROP: Pengaturcaraan Berorientasikan Sigreturn

SROP menggunakan panggilan sistem sigreturn untuk memuatkan bingkai sigcontext palsu, lalu menetapkan semua daftar kepada nilai yang dikawal penyerang dalam satu gajet. Berguna apabila hanya sedikit gajet tersedia.

Varian JOP dan COP

Selain ROP:

  • JOP (Pengaturcaraan Berorientasikan Lompatan) — merantaikan gajet yang berakhir dengan jmp, bukannya ret
  • COP (Pengaturcaraan Berorientasikan Panggilan) — merantaikan gajet yang berakhir dengan call

Pertahanan seperti CFI (Integriti Aliran Kawalan) bertujuan menghalang kesemuanya.

Integriti Aliran Kawalan (CFI)

CFI memastikan cabang tidak langsung (panggilan, pulangan) hanya melompat ke sasaran yang sah. Ia mematahkan ROP dengan mengesahkan sasaran pulangan terhadap tindanan bayang atau senarai benarkan. Intel CET (Teknologi Penguatkuasaan Aliran Kawalan) melaksanakan CFI pada tahap perkakasan.

Contoh ROP Praktikal

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 — mengesahkan sasaran cabang
  • Tindanan bayang (CET) — salinan alamat pulangan yang dilindungi perkakasan
  • RELRO (penuh) — menjadikan GOT baca sahaja, menghalang penulisan ganti
  • PIE — mengacak alamat asas binari, memerlukan kebocoran untuk mencari gajet

Semakan Pantas: ROP

Apakah gajet ROP?

Ringkasan Pelajaran

ROP mengatasi NX/DEP dengan merantaikan urutan kod sedia ada (gajet yang berakhir dengan ret) — tiada suntikan kod shell diperlukan. Alat pencarian gajet: ROPgadget, ropper. ret2plt membocorkan alamat libc untuk menewaskan ASLR. Pertahanan: CFI, tindanan bayang (Intel CET), PIE, RELRO penuh. ROP ialah asas eksploitasi binari moden.

Percuma untuk bermula

Pelajari Cyber Security Academy dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
76
Pelajaran
303

Soalan Lazim

Adakah pelajaran “Pengaturcaraan Berorientasikan Pemulangan (ROP)” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Cyber Security Academy, termasuk “Pengaturcaraan Berorientasikan Pemulangan (ROP)”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Cyber Security Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengaturcaraan Berorientasikan Pemulangan (ROP)”?

Rantaikan gadget ROP untuk memintas NX/DEP dan bina eksploit tanpa shellcode. Anda berlatih Cyber Security Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Cyber Security Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Cyber Security Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pengaturcaraan Berorientasikan Pemulangan (ROP)” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Cyber Security Academy ini?

Ya. Setiap pelajaran Cyber Security Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Limpahan Penimbal Stack
  2. Pengaturcaraan Berorientasikan Pemulangan (ROP)
  3. Kerentanan Rentetan Format
  4. Eksploitasi Heap: Use-After-Free dan Heap Spraying
← Kembali ke Cyber Security Academy