ROP atau kita biasa sebut return oriented programming adalah tingkatan tertinggi dan tersulit dari kategori pwning. Sampai saat ini saya maish belum menguasai dan mempraktikannya. Beberapa gadget masih terlihat asing bagi saya. tapi saya akan berusaha menulis perlahan lahan apa yang saya baru tau dan apabila salah mohon koreksinya ya :).
ROP atua return oriented programming adalah eksploitasi sebuah program dengan mengarahkan EIP atau intsruct pointer ke gadget gadget yang kita sambungkan agar memunculkan suatu fungsi yang kita inginkan. Umumnya tingkatan tertinggi dari eksploit adalah kita mampu memanggil shell dari program yang dieksploit. Gadget adalah kumpulan instruski assembly yang memiliki instruksi ret di akhir agar program kembali ke dalam stack untuk melanjutkan gadget lainnya hingga memanggil shell
Apa yang kita bisa lakukan dengan gadget?
Contoh beberapa penggunaan gadget
- Memasukkan sesuatu ke register
- pop eax, ret + 0xdeadbeef Gadget ini akan mengisi register eax dengan 0xdeadbeef
- Membaca dari memori
- mov ecx, [eax], ret gadget ini akan memasukkan nilai yang berada pada alamat eax ke register ecx
- Memasukkan ke memori (stack)
- mov [eax], ecx, ret
Gadget ini akan memasukkan nilai ecx ke alamat memori yang ditunjuk eax
- Aritmatika
add eax, 0x0b, ret
Ini akan menambahkan eax senilai 0x0b
xor eax, eax
mengosongkan nilai eax
- System call
int 0x80, ret
call gs:[0x10], ret
GADGET YANG HARUS DIHINDARI
gadget yang mengandung pop ebp, semua akan merusak stack Payload tidak boleh mengandung nullbytes
Untuk memanggil shell, kita harus memvariasikan beberapa chainig dari rop gadget, sehingga kita, bisa memanggil call system dengan argumen /bin//sh
Satu chaining yang saya pelajari untuk memanggil shell
- xor eax, eax ; untuk mengosongkan eax
- menulis /bin/sh didalam memori yang paling aman. Kita cbba untuk untuk menulis nya didata segmen. Yang dapat kita lakukan adalah menggunakan gadget
- pop {REG1}, ret, ALAMAT
- pop {REG2}, ret, STRING
- mov [REG1], REG2
Lakukan dua kali. Karena string /bin//sh memiliki ukuran 8 byte. Kita.
- Setelah semua persiapan selesai, kita bisa memanggil function call dengan gadget
- xor eax, eax ; untuk mengosongkan eax
- add eax, 0x0b ;mengisi eax, dengan function system call
- call gs:[0x10], ret
Payload ROP dari berbagai macam soal, bisa bervarisi, dari gadget gadget yang tersedia dari program
Beberapa payload yang pernah saya temui baik dari baca baca payload orang lain.
- Buffer + pop eax, pop ecx , ret + u32("/bin") + p32(0xaddr) + mov [eax], ecx, ret + xor eax, eax , ret + add eax, 0x0b, ret + call gs:[0x10], ret
Postingan ini pasti akan dilanjuti untuk meneruskan apa yang saya sudah pelajari dari ROP
Tidak ada komentar:
Posting Komentar