Berbagi teknologi

Injeksi sekunder dari injeksi sql

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

injeksi sekunder

Kerentanan injeksi sekunder merupakan bentuk kerentanan keamanan yang tersebar luas di aplikasi web. Dibandingkan dengan kerentanan injeksi primer, kerentanan injeksi sekunder lebih sulit dideteksi, namun memiliki kekuatan serangan yang sama dengan kerentanan injeksi primer.

Peretas membangun data dalam bentuk pengiriman permintaan paket data HTTP ke server untuk diproses di browser atau perangkat lunak lain. Permintaan paket data yang dikirimkan mungkin berisi pernyataan atau perintah SQL yang dibuat oleh peretas.
Aplikasi sisi server akan menyimpan informasi data yang dikirimkan oleh peretas, biasanya dalam database. Fungsi utama dari informasi data yang disimpan adalah untuk menyediakan data masukan asli bagi aplikasi untuk menjalankan fungsi lain dan menanggapi permintaan klien.
Peretas mengirimkan pesan data permintaan kedua ke server yang berbeda dari yang pertama.
Setelah server menerima informasi permintaan kedua yang disampaikan oleh hacker, untuk memproses permintaan tersebut, server akan menanyakan informasi data yang sudah tersimpan dalam database dan memprosesnya, sehingga menyebabkan pernyataan atau perintah SQL yang dibuat oleh hacker pada permintaan pertama. untuk berada dalam layanan.
Server mengembalikan informasi data hasil eksekusi. Peretas dapat menggunakan informasi data hasil yang dikembalikan untuk menentukan apakah kerentanan injeksi sekunder berhasil dieksploitasi.

Singkatnya, injeksi sekunder disebabkan oleh kegagalan memfilter data saat menyimpannya dalam database. Pertama, permintaan karakter khusus yang dibuat dikirimkan untuk disimpan dalam database, dan kemudian ketika permintaan kedua dikirimkan, karakter itu yang dikirimkan ke database untuk pertama kalinya terjadi. Fungsi, membentuk pernyataan sql baru untuk dieksekusi.Ambil sqli-labs level 24 sebagai contoh

sqli-labs kurang-24

1. Klik di bawah untuk mendaftarkan pengguna


Nama pengguna yang terdaftar di sini adalah admin'#

         

Pada titik ini kami memeriksa database, pengguna terdaftar telah disimpan, dan kata sandi admin adalah DDD

2. Login dengan akun yang terdaftar dan ubah password menjadi ccccc

Pada saat ini, akan muncul konfirmasi bahwa kata sandi telah berhasil diubah.

Saat ini, kami menemukan bahwa kata sandi admin diubah menjadi ccccc, tetapi kata sandi pengguna terdaftar kami admin'# tidak diubah.

Penyebab kerentanan

1. Karakter khusus seperti ' dan # diperbolehkan selama pendaftaran pengguna.

2. Dalam kode sumber halaman perubahan kata sandi, ditemukan adanya kerentanan injeksi yang jelas.

$sql = "PERBARUI pengguna SET PASSWORD='$pass' di mana username='$username' dan password='$curr_pass' ";

Saat kita login ke akun admin'# dan mengganti password, statement sqlnya menjadi seperti berikut, #Komentarkan kode berikut, maka password user admin diubah menjadi ccccc

$sql = "PERBARUI pengguna SET PASSWORD='$pass' di mana username='admin'#' dan password='$curr_pass' ";

Tautan asli: https://blog.csdn.net/qq_44159028/article/details/114325805