SELECT * FROM users WHERE username ='''AND password =''
Hal ini akan memicu kesalahan, karena mesin database akan mempertimbangkan ujung benang pada detik 'dan kemudian akan memicu kesalahan parsing pada ketiga karakter. Mari kita sekarang apa yang akan terjadi jika kita akan mengirimkan data ini masukan:
Username: 'OR' a '=' a
Password: 'OR' a '=' a
Query akan menjadi
SELECT * FROM pengguna WHERE username =''OR 'a' = 'a' DAN password =''OR 'a' = 'a'
Karena selalu sama dengan, query ini akan mengembalikan semua baris dari tabel pengguna dan server akan "berpikir" kita diberikan kepadanya dengan mandat sah dan biarkan seperti pada - injeksi SQL berhasil:).
Sekarang kita akan melihat beberapa teknik yang lebih maju .. Contoh saya akan didasarkan pada PHP dan platform MySQL. Dalam database MySQL, saya membuat tabel berikut:
MENCIPTAKAN TABLE pengguna (
nama VARCHAR (128),
sandi VARCHAR (128),
email VARCHAR (128))
Ada satu baris dalam tabel dengan data:
username: testuser
sandi: pengujian
email: testuser@testing.com
Untuk memeriksa identitasnya aku membuat query berikut dalam kode PHP:
$ Query = "pilih username, password dari pengguna dimana username ='".$ pengguna." 'Dan password ='".$ lulus ."'";
Server juga dikonfigurasi untuk mencetak kesalahan dipicu oleh MySQL (ini berguna untuk debugging, tapi harus dihindari pada server produksi).
Jadi, waktu terakhir saya menunjukkan cara SQL injection pada dasarnya bekerja. Sekarang saya akan menunjukkan kepada Anda bagaimana kita bisa membuat query yang lebih kompleks dan bagaimana menggunakan pesan kesalahan MySQL untuk mendapatkan informasi lebih lanjut tentang struktur database.
Mari kita mulai! Jadi, jika kita menempatkan hanya karakter 'pada kolom username kita mendapatkan pesan error seperti
Anda memiliki kesalahan dalam sintaks SQL; periksa manual yang sesuai dengan versi MySQL server Anda untuk sintaks yang benar untuk menggunakan dekat''''dan password ='''at line 1
Itu karena permintaan menjadi
pilih username, password dari pengguna dimana username ='''dan password =''
Apa yang terjadi sekarang jika kita mencoba untuk dimasukkan ke dalam bidang username string seperti 'atau user =' abc?
Query menjadi
pilih username, password dari pengguna dimana username =''atau user = 'abc' dan password =''
Dan ini memberi kita pesan kesalahan
Kolom yang tidak dikenal 'user' dalam 'mana klausa'
Itu bagus! Menggunakan pesan-pesan error yang kami bisa menebak kolom dalam tabel. Kita bisa mencoba untuk dimasukkan ke dalam bidang username 'atau email =' dan karena kita tidak mendapatkan pesan kesalahan, kita tahu bahwa kolom email ada di meja itu. Jika kita tahu alamat email dari pengguna, kita sekarang dapat hanya mencoba dengan testuser@testing.com 'atau email =' baik dalam username dan password dan query kita menjadi
pilih username, password dari pengguna dimana username =''atau email = 'testuser@testing.com' dan password =''atau email = 'testuser@testing.com'
yang merupakan permintaan valid dan alamat email jika itu ada dalam tabel kita akan berhasil login!
Anda juga dapat menggunakan pesan kesalahan untuk menebak nama tabel. Sejak di SQL Anda dapat menggunakan notasi table.column, Anda dapat mencoba untuk dimasukkan ke dalam bidang username 'atau user.test =' dan Anda akan melihat pesan kesalahan seperti
Diketahui tabel 'user' di mana klausa
Baik! Mari kita coba dengan 'atau users.test =' dan kami telah
Kolom yang tidak dikenal 'users.test' dalam 'mana klausa'
jadi secara logis ada tabel bernama user:).
Pada dasarnya, jika server dikonfigurasi untuk memberikan pesan kesalahan, Anda dapat menggunakannya untuk menghitung struktur database dan kemudian Anda mungkin dapat menggunakan informasi dalam serangan.
berikut semoga tidak bt dengan bahasa indonesia yang anehnya :) mohon maaf ya....
memang seperti itu XD
BalasHapus