Searching...
November 21, 2011

From Bug to 0day Against LINUX

Sebelumnya pernah dijelaskan bagaimana caranya mengaplikasikan teori from bug to 0day yang dijelaskan red-dragon. Sekarang giliran saya, blue-dragon, akan memberi tau bagaimana cara mengaplikasikan teori from bug to 0day pada LINUX. Check this out.

Pertama-tama saya mau spoiler, kalau tutorial kali ini akan sangat panjang. Untuk itu, saya akan menghilangkan tag CODE kali ini. Yang ada hanyalah skrinsut dan penjelasan step by step.

Yang kalian butuhkan hanyalah:
1. Web server http daemon (Apache dsb)
2. Jmpbuster (http://sprunge.us/XCCi)
3. Gnome Debugger / Gdb (gdb)

Kondisi PC saya:
1. Menggunakan VMWare
2. Mengakses ssh ke PC server (Kioptrix LV 3)

Tutorial:

Pertama koneksikan PC kamu melalui SSH. Untuk mencari tau bagaimana saya mencari password ssh, kamu bisa cek di sini.
[Pic]

Setelah terkoneksi, cari informasi yang berada di dalam server.
[Pic]


Ada yang menarik, yaitu untuk mencapai akses root, kita harus menggunakan perintah 'sudo ht' Mari kita cari keberadaan file 'ht' dan apakah server memiliki gdb. Lalu cari tau tentang 'sudo' pada server ini.
[Tampilan 'ht']

[Pic]

Semuanya sudah lengkap, sekarang saatnya menulis shellcode. Yang pertama, kamu harus melakukan debugging, jika di sini menggunakan OllyDBG, maka kita sekarang menggunakan gdb yang di attach ke program ht.
[Pic]

Perintah ini akan membuat program ht menuliskan huruf "A" pada memori 4400 dengan kode python. Hasilnya bug (tinggal 0day-nya nih :D)
[Pic]

Keliatan, kalo memori 4400 memang vulnerable, saatnya minta bantuan metasploit untuk meng-generate memori buffer overflow 4400.

[Pic]

Copas hasil keluaran ke dalam shellcode:
[Struktur awal shellcode]

#/usr/bin/python
buf="kode_pattern_create"
buf="kode_pattern_offset"
eip="kode_memori_eip"
nop="kode_memori_NOP"

shellcode=(kode_jahat)

print(buf+eip+nop+shellcode) --> semuanya

Awal shellcode
[Pic]

Setelah dimasukkan kode buffer overflow:
[Pic]

Langsung kita debugging lagi shellcode ini untuk menentukan alamat register eip.
[Pic]

Hasil debugging:
[Pic]

Catat info register eip, lalu kita generate offset-nya dengan bantuan metasploit.
[Pic]

Catat kode offset buffer overflow eip untuk digunakan nanti. Sekarang kita mencari alamt eip, dengan jmp buster. Pertama cari jmp buster di internet, lalu letakkan di folder /var/www kamu. Aktifkan apache dan coba download kode jmpbuster dari folder kita:

[Web JmpBuster]

[Download JmpBuster ke /var/www]

[Aktifkan Apache]

[Download JmpBuster dari target]

[Compile JmpBuster]

Setelah JmpBuster di compile, maka sekarang saatnya berburu kode eip. Caranya:

$ ./jmpbuster /usr/local/bin/ht | more

[Pic]

Tekan "Enter" sampai kamu nemuin jmp *%esp  yang warnanya berbeda (= Catat address-nya dan letakkan di shellcode kita.

[Pic]

Cara mencatat kode buf ke dua:
"\x41"*4091
Dimana x41 adalah "A" dan 4091 adalah alamat yang mengalami crash, kita harus mengambil alih halaman ini dengan menentukan lokasi NOP. Penulisan NOP:
0xaabbccdd ===> \xdd\xcc\xbb\xaa

Sekarang kita tentukan shellcode. Pertama saya mencoba menggunakan shikata_ga_nai sebagai encoder, tapi malahan ada address yang nilainya \x00 dimana address ini tidak bisa menginjeksi. Akhirnya saya gunakan encoder alpha_mixed. Setelah generate, gunakan kodenya sebagai shellcode dengan terlebih dulu menghapus tanda "+" dan satu spasi di belakang tanda "+"
[Generating shellcode]

[Tampilan akhir shellcode]

Setelah shellcode selesai, eksekusi shellcode dengan izin root dan program ht.
[Pic]

Hasilnya:
[Pic]

Ketik "reset" (tidak akan ada karakter yang keluar). lalu tekan enter, masukkan "ansi" sebagai jawaban default. Lalu tekan enter. Setelah ini, karakter ketikkan kamu akan selalu muncul tiap tombol keyboard ditekan. Kelar nge-root, sekarang testing!!!
[Pic]

Cari shadownya:
[Pic]

Written by:
blue-dragon

Supported by:
red-dragon

2 comment:

 
Back to top!