it-swarm-id.com

Injeksi SQL dengan AND 1 = 1

Tolong jelaskan arti dari "AND 1 = 1 "dalam serangan injeksi SQL. Ini dari latihan di universitas saya. E.g.

select * from user where id = 'smith'' AND 1=1;--  and birthdate = 1970;

atau

select * from user where id = 'smith' and birthdate = 1970 AND 1=1;--;
20
Alex

Pertanyaan khusus adalah injeksi SQL dengan DAN 1 = 1 dan bukan ATAU 1 = 1. Ada perbedaan besar di sini tentang apa yang ditanyakan OP. Jika saya adalah guru Anda dan Anda memberi saya jawaban JonathanMueller, Anda akan mendapat nilai jelek karena Anda tidak mengerti pertanyaannya.

DAN 1 = 1 biasanya digunakan dalam suntikan SQL buta . Inilah saatnya Anda harus menentukan antara keadaan benar atau salah dari hasil aplikasi untuk mengetahui apa hasil sebenarnya. Anda tidak mendapatkan data yang tercantum dalam hasil, satu-satunya yang dikembalikan adalah keadaan perubahan.

Jika Anda mencoba untuk mengeksploitasi injeksi SQL Blind dengan OR 1 = 1 Anda akan gagal karena penggunaan utama dari OR 1 = 1 adalah untuk membuat yang selalu benar pernyataan untuk mendapatkan data terbanyak dari database atau untuk memaksa pernyataan yang benar dalam kasus skrip login dieksploitasi.

Contoh exploit SQL praktis yang keliru:

Kami menggunakan contoh kami: http://www.site.com/news.php?id=7 Mari kita mengujinya: http://www.site.com/news.php ? id = 7 dan 1 = 1 <--- ini selalu benar dan halaman dimuat secara normal, tidak apa-apa.

http://www.site.com/news.php?id=7 dan 1 = 2 <--- ini salah, jadi jika beberapa teks, gambar, atau beberapa konten hilang pada halaman yang dikembalikan maka situs itu rentan terhadap injeksi sql buta.

Contoh lain di mana Anda mencoba mencari tahu versi MySQL:

http://www.site.com/news.php?id=7 dan substring (@@ version, 1,1) = 4 Ini akan menghasilkan TRUE jika versi MySQLnya 4. Ganti 4 dengan 5, dan jika permintaan kembali BENAR maka versinya adalah 5.

Contoh diambil dari: http://www.exploit-db.com/download_pdf/14475

34
Chris Dale

Biasanya, Anda akan melihat frasa "OR 1 = 1 '". Alasannya adalah, jika programmer tidak benar menangani parameter (seperti id pengguna), maka penyerang bisa menggunakan OR 1=1 untuk mengembalikan semua data dalam tabel.

Misalnya, kami ingin mendapatkan detail tentang pengguna yang bernama smith. Permintaannya bisa select * from user where id = '?', tempat tanda tanya diganti dengan parameter dari input pengguna. Jika penyerang lolos smith' OR 1=1--, SQL yang dihasilkan adalah select * from user where id = 'smith' OR 1=1--'. Dalam hal ini, kutipan tunggal kedua dari kueri asli dilewati karena merupakan bagian dari komentar, dan kueri akan mengembalikan semua data di tabel pengguna.

15
JonathanMueller

Untuk memberikan contoh injeksi sql (agak sepele, tidak penting), bayangkan kueri ini di suatu tempat dalam kode aplikasi Anda ...

select 1 from user where name='[NAME]' and password='[PASS]'

setelah Malicious Guy menetapkan parameter bernama di atas sesuai pilihannya, Anda mendapatkan:

select 1 from user where name='admin' --' and password='[PASS]'
 menggunakan nilai-nilai yang dipilih dan tidak disanitasi berikut: 
 [NAMA] = '-' dan kata sandi = '[LULUS]' 
 nilai variabel [LULUS] tidak penting 

Dengan demikian, dengan asumsi permintaan dimaksudkan untuk mengembalikan 1 untuk kesuksesan dan set kosong untuk pengguna atau pass yang tidak valid, 1 akan secara keliru dikembalikan, memungkinkan pengguna jahat ini untuk masuk sebagai akun "admin".

0
Garrett