Sabtu, 29 Juli 2017

ROP 1. Simple Introduction About ROP

untitled

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

  1. Memasukkan sesuatu ke register
  • pop eax, ret + 0xdeadbeef Gadget ini akan mengisi register eax dengan 0xdeadbeef
  1. Membaca dari memori
  • mov ecx, [eax], ret gadget ini akan memasukkan nilai yang berada pada alamat eax ke register ecx
  1. Memasukkan ke memori (stack)
  • mov [eax], ecx, ret

Gadget ini akan memasukkan nilai ecx ke alamat memori yang ditunjuk eax

  1. Aritmatika

add eax, 0x0b, ret

Ini akan menambahkan eax senilai 0x0b

xor eax, eax

mengosongkan nilai eax

  1. 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

  1. xor eax, eax ; untuk mengosongkan eax
  2. 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.

  1. 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