Tool - Tool Programming di Linux
Penulis: mywisdom
Penjelasan Jargon
- elf binary: merupakan bentuk program yang bisa dieksekusi di sistem linux.
Nasm (Netwide Assembler)
Merupakan assembler / dissasembler untuk kode-kode bahasa assembly di mesin linux (intel assembly)
Untuk mengkompile gunakan perintah ini:
Lalu kita linker dengan ld sehinga menjadi suatu elf executable :
GCC (Gnu C Compiler)
Merupakan kompiler untuk Bahasa C dan Bahasa C++.
Contoh penggunaan:
Jadi misal nama file c adalah nama_program.c setelah kita kompile dengan gcc menghasilkan suatu elf executable dengan nama: nama_program
Beberapa contoh opsi-opsi gcc:
Untuk informasi debugging yang bermanfaat saat proses pencarian bug dengan gdb (gnu debugger).
Untuk menampilkan seluruh pesan kesalahan saat proses kompilasi.
Opsi kompilasi ini untuk mencegah dependensi
Untuk lebih lengkapnya silahkan cari di google tentang opsi-opsi gcc.
objdump
objdump merupakan salah satu tool yang berguna saat melakukan dissasembly suatu program.
Ok, sebagai eksperimen manfaat dari objdump kita buat suatu program dengan asm intel syntax menggunakan syscall nomor 1 (exit):
Simpan dengan nama exit.asm lalu ubah jadi elf binary:
Misal kita mao mendissasemble dari elf binarynya ke at&t asm sytax:
maka tampilan hasilnya :
Di mana kita bisa melihat source codenya dalam mode AT&T syntax (yang kolom paling kanan).
ndisasm
Suatu program untuk membantu kita melakukan dissasemble. Misal kita punya shellcode:
\x31\xc0\x40\x89\xc3\xcd\x80 untuk kita disasseble.
ketikkan:
Lalu kita disassemble ke mode 32 bit:
wc
WC (word count) sebenarnya hanyalah utilitas dasar di sistem linux tapi juga sering digunakan saat pembuatan program. Fungsinya sesuai dengan namanya untuk menghitung jumlah karakter di suatu file.
misal:
GDB
GDB (Gnu Debugger) merupakan suatu program yang berguna untuk menganalisis suatu program terhadap kesalahan atau bug pemrograman.
misal:
Ok untuk lebih jelasnya mari kita praktekkan sedikit penggunaan gdb. Misal kita buat suatu program dengan nama stackbof.c:
Lalu Kompile dengan gcc:
Dari kode program di atas ada kesalahan yang memungkinkan untuk kita eksploitasi, coba perhatikan kode-kode ini:
char buff[1024];
dan
keterangan:
strcpy akan menyalin argumen program ke dua (argv[2]) ke stack buffer tanpa validasi panjang string.
Ok selanjutnya mari kita sengaja manfaatkan kesalahan kode program tadi untuk mengeksploitasi stack dengan mengirimkan inputan melebihi kapasitas buffer, ketikkan ini dari linux shell Anda:
Hasil dari eksekusi program dengan argumen di atas akan menyebabkan pesan segmentation fault karena buffer yang ukuranya hanya 100 bytes
menerima salinan string dengan kapasitas yang melebihi buffer sehingga terjadilah yang namanya buffer overflow.
Untuk menganalisis kesalahan program kita jalankan gdb:
Analisis dengan gdb di mana program dirun dengan argumen ” `perl -e ‘print “A”x1040′`” :
terlihat terjadi kesalahan program karena tidak adanya pengecekan panjang string yang masuk ke stack.
GAS
GAS merupakan assembler untuk Assembly dengan sintaks AT&T.
Ok sekian dan terima kasih akan saya lanjutkan lain waktu.
Special thanks:
kiddies, gunslinger, flyv666, v3n0m, marc0, aurel666, cakill, cyber mutaqqin chaer newbie, dan masih banyak lagi.
Thanks and greets;
All jasakom crews & members
All devilzc0de crews & members
All jatimcrew crews & members
All yogyacarderlink crews & members
mywisdom
Co-Pas: http://devilzc0de.org
Penulis: mywisdom
Penjelasan Jargon
- elf binary: merupakan bentuk program yang bisa dieksekusi di sistem linux.
Nasm (Netwide Assembler)
Merupakan assembler / dissasembler untuk kode-kode bahasa assembly di mesin linux (intel assembly)
Untuk mengkompile gunakan perintah ini:
Code:
nasm -f elf nama_program_anda.asm
Lalu kita linker dengan ld sehinga menjadi suatu elf executable :
Code:
ld nama_program_anda.o -o nama_program_anda
GCC (Gnu C Compiler)
Merupakan kompiler untuk Bahasa C dan Bahasa C++.
Contoh penggunaan:
Code:
gcc nama_program.c -o nama_program
Jadi misal nama file c adalah nama_program.c setelah kita kompile dengan gcc menghasilkan suatu elf executable dengan nama: nama_program
Beberapa contoh opsi-opsi gcc:
Code:
-g
Code:
-Wall
Code:
-static
Untuk lebih lengkapnya silahkan cari di google tentang opsi-opsi gcc.
objdump
objdump merupakan salah satu tool yang berguna saat melakukan dissasembly suatu program.
Ok, sebagai eksperimen manfaat dari objdump kita buat suatu program dengan asm intel syntax menggunakan syscall nomor 1 (exit):
Code:
;exit.asm
[SECTION .text]
global _start
_start:
xor eax, eax
mov al,1
xor ebx,ebx
int 0x80
Simpan dengan nama exit.asm lalu ubah jadi elf binary:
Code:
nasm -f elf exit.asm
ld -o exit exit.o
Misal kita mao mendissasemble dari elf binarynya ke at&t asm sytax:
Code:
objdump -S exit
maka tampilan hasilnya :
Code:
objdump -S exit
exit: file format elf32-i386
Disassembly of section .text:
08048060 <_start>:
8048060: 31 c0 xor %eax,%eax
8048062: b0 01 mov $0x1,%al
8048064: 31 db xor %ebx,%ebx
8048066: cd 80 int $0x80
Di mana kita bisa melihat source codenya dalam mode AT&T syntax (yang kolom paling kanan).
ndisasm
Suatu program untuk membantu kita melakukan dissasemble. Misal kita punya shellcode:
\x31\xc0\x40\x89\xc3\xcd\x80 untuk kita disasseble.
ketikkan:
Code:
echo "\x31\xc0\x40\x89\xc3\xcd\x80">shellcode
Lalu kita disassemble ke mode 32 bit:
Code:
ndisasm -b32 shellcode
wc
WC (word count) sebenarnya hanyalah utilitas dasar di sistem linux tapi juga sering digunakan saat pembuatan program. Fungsinya sesuai dengan namanya untuk menghitung jumlah karakter di suatu file.
misal:
Code:
wc nama_file
GDB
GDB (Gnu Debugger) merupakan suatu program yang berguna untuk menganalisis suatu program terhadap kesalahan atau bug pemrograman.
misal:
Code:
gdb nama_program
Ok untuk lebih jelasnya mari kita praktekkan sedikit penggunaan gdb. Misal kita buat suatu program dengan nama stackbof.c:
Code:
//stackbof.c
#include
#include
fungsi_yang_vulner(char *temp1, char * temp2)
{
char bufer[400];
strcpy(bufer,temp2);
printf(“Isian data: %s %s\n”,temp1,temp2);
}
int main(int argc, char * argv[])
{
fungsi_yang_vulner(argv[1],argv[2]);
printf(“Isian data Anda: %s %s \n”,argv[1],argv[2]);
}
Lalu Kompile dengan gcc:
Code:
gcc -o stackbof stackbof.c
Dari kode program di atas ada kesalahan yang memungkinkan untuk kita eksploitasi, coba perhatikan kode-kode ini:
char buff[1024];
dan
Code:
strcpy(bufer,temp2);
keterangan:
strcpy akan menyalin argumen program ke dua (argv[2]) ke stack buffer tanpa validasi panjang string.
Ok selanjutnya mari kita sengaja manfaatkan kesalahan kode program tadi untuk mengeksploitasi stack dengan mengirimkan inputan melebihi kapasitas buffer, ketikkan ini dari linux shell Anda:
Code:
./stackbof argumen1 `perl -e ‘print “A”x405′`
menerima salinan string dengan kapasitas yang melebihi buffer sehingga terjadilah yang namanya buffer overflow.
Untuk menganalisis kesalahan program kita jalankan gdb:
Code:
gdb -q stackbof
Analisis dengan gdb di mana program dirun dengan argumen ” `perl -e ‘print “A”x1040′`” :
Code:
# gdb -q stackbof
Using host libthread_db library “/lib/libthread_db.so.1″.
(gdb) run argumen1 `perl -e ‘print “A”x400′`
Starting program: /root/sploits/eksperimen/ezine/stackbof argumen1 `perl -e ‘print “A”x400′`
Isian data: argumen1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Isian data Anda: argumen1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0×08048423 in main ()
(gdb)
terlihat terjadi kesalahan program karena tidak adanya pengecekan panjang string yang masuk ke stack.
GAS
GAS merupakan assembler untuk Assembly dengan sintaks AT&T.
Code:
as nama_program.s -o nama_program.o
ld nama_program.o -o nama_program
Ok sekian dan terima kasih akan saya lanjutkan lain waktu.
Special thanks:
kiddies, gunslinger, flyv666, v3n0m, marc0, aurel666, cakill, cyber mutaqqin chaer newbie, dan masih banyak lagi.
Thanks and greets;
All jasakom crews & members
All devilzc0de crews & members
All jatimcrew crews & members
All yogyacarderlink crews & members
mywisdom
Co-Pas: http://devilzc0de.org
Komentar
Posting Komentar
Ramaikan Blog Ini Dengan Komentar-Komentar Anda
Bebas, Sopan, Ataktif, Kritik Juga Boleh