Komputer, Pemrograman
Apa injeksi SQL?
Jumlah situs dan halaman di web terus berkembang. Diambil untuk pengembangan semua orang yang bisa. Dan pengembang Web pemula sering menggunakan kode yang tidak aman dan tua. Dan itu menciptakan banyak celah bagi penjahat dan hacker. Daripada mereka. Salah satu kerentanan yang paling klasik - SQL injection.
Sedikit teori
Banyak orang tahu bahwa mayoritas situs dan layanan pada jaringan menggunakan penyimpanan database SQL. Ini adalah bahasa query terstruktur yang memungkinkan Anda untuk mengontrol dan mengelola penyimpanan data. Ada banyak versi yang berbeda dari database sistem manajemen database - Oracle, MySQL, Postgre. Terlepas dari nama dan jenis, mereka menggunakan data query yang sama. Di sinilah letak potensi kerentanan. Jika pengembang gagal untuk menangani dengan baik dan aman meminta, penyerang dapat mengambil keuntungan dari ini dan menggunakan taktik khusus untuk mendapatkan akses ke database, dan kemudian - dan untuk semua manajemen situs.
Untuk menghindari situasi tersebut, Anda perlu benar mengoptimalkan kode dan untuk memantau erat dengan cara di mana permintaan sedang diproses.
Periksa SQL injection
Untuk membangun kehadiran kerentanan dalam jaringan memiliki berat sistem perangkat lunak otomatis selesai. Tetapi adalah mungkin untuk melakukan cek sederhana secara manual. Untuk melakukan hal ini, pergi ke salah satu situs uji dan di address bar untuk mencoba untuk menyebabkan database error. Sebagai contoh, sebuah script di situs tidak dapat menangani permintaan dan tidak trim mereka.
Misalnya, ada nekiy_sayt / index.php? Id = 25
Cara termudah - untuk menempatkan 25 setelah kutipan dan mengirim permintaan. Jika tidak ada kesalahan terjadi, baik di situs dan filter semua permintaan ditangani dengan benar, atau dinonaktifkan dalam pengaturan output mereka. Jika halaman reloaded dengan masalah, maka kerentanan terhadap SQL injection adalah.
Setelah dia tahu, Anda dapat mencoba untuk menyingkirkan itu.
Untuk melaksanakan kebutuhan kerentanan ini untuk mengetahui sedikit tentang tim SQL-query. Salah satu dari mereka - UNION. Ini membawa bersama-sama beberapa hasil query menjadi satu. Jadi kita dapat menghitung jumlah field dalam tabel. CONTOH pertanyaan pertama adalah:
- nekiy_sayt / index.php? id = 25 UNION SELECT 1.
Dalam kebanyakan kasus, catatan ini harus menghasilkan kesalahan. Ini berarti bahwa jumlah bidang tidak sama dengan 1. Jadi, memilih opsi 1 atau lebih besar, adalah mungkin untuk membangun jumlah pasti mereka:
- nekiy_sayt / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.
Artinya, ketika kesalahan tidak akan muncul lagi, itu berarti bahwa jumlah bidang menebak.
Ada juga alternatif solusi untuk masalah ini. Sebagai contoh, ketika sejumlah besar bidang - 30, 60 atau 100. Perintah ini GROUP BY. Ini kelompok hasil query pada setiap alasan, misalnya id:
- nekiy_sayt / index.php? id = 25 GROUP BY 5.
Jika kesalahan belum diterima, maka bidang lebih dari 5. Dengan demikian, pilihan mengganti dari kisaran yang cukup luas, adalah mungkin untuk menghitung berapa banyak dari mereka sebenarnya.
Ini contoh SQL injection - untuk pemula yang ingin mencoba sendiri dalam pengujian situsnya. Penting untuk diingat bahwa untuk akses tidak sah ke artikel lain yang tersedia KUHP.
Jenis utama dari injeksi
Menerapkan kerentanan dengan SQL injection di beberapa perwujudan. Berikutnya adalah metode yang paling populer:
UNION query SQL injection. Sebuah contoh sederhana dari jenis ini telah diperiksa atas. Hal ini diwujudkan karena kesalahan dalam memeriksa data yang masuk, yang tidak disaring.
Kesalahan berbasis SQL injection. Seperti namanya, jenis ini juga menggunakan kesalahan, mengirimkan ekspresi terdiri sintaksis yang salah. Lalu ada intersepsi dari header respon, menganalisis yang dapat dilakukan kemudian SQL injection.
Stacked query SQL injection. Kerentanan ini ditentukan dengan melakukan permintaan berturut-turut. Hal ini ditandai dengan penambahan pada akhir tanda ";". Pendekatan ini sering diterapkan untuk mengakses pelaksanaan membaca dan menulis data atau sistem operasi fungsi, jika hak mengizinkannya.
Software untuk mencari SQL-kerentanan
Apakah ada untuk SQL injection, program ini biasanya memiliki dua komponen - sebuah situs memindai kerentanan mungkin dan menggunakan mereka untuk mendapatkan akses ke data. Ada beberapa alat untuk platform hampir semua dikenal. fungsi mereka sangat memudahkan memeriksa situs web untuk memecahkan SQL injection Anda.
sqlmap
scanner yang sangat kuat yang bekerja dengan sebagian besar database. Ini mendukung berbagai metode pelaksanaan SQL injection. Ia memiliki kemampuan untuk secara otomatis mengenali jenis hash password retak dan kamus. Hadir dan fungsional file upload dan download dari server.
Instalasi pada Linux dilakukan dengan menggunakan perintah:
- git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
- cdsqlmap-dev /,
- --wizard ./sqlmap.py.
Untuk Windows tersedia sebagai pilihan dengan baris perintah dan antarmuka pengguna grafis.
jSQL Injection
jSQL Injection - alat cross-platform untuk menguji penggunaan kerentanan SQL. Ditulis di Jawa, sehingga sistem harus diinstal JRE. Mampu menangani permintaan GET, POST, header, kue. Ini memiliki antarmuka grafis yang nyaman.
Instalasi paket perangkat lunak ini adalah sebagai berikut:
wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] . {1,2} [0-9] {1,2} .jar '| kepala-n 1`
Launching adalah dengan menggunakan perintah java-jar ./jsql-injection-v*.jar
Dalam rangka untuk memulai situs tes pada SQL-kerentanan, Anda harus memasukkan alamat di bidang atas. Mereka terpisah untuk GET dan POST. Dengan hasil positif, daftar tabel yang tersedia akan muncul di jendela kiri. Anda dapat melihat mereka dan mempelajari beberapa informasi rahasia.
tab «Halaman Admin» digunakan untuk menemukan panel administrasi. Di atasnya dengan cara template khusus secara otomatis mencari sistem mencatat pengguna istimewa. Dari mereka Anda bisa mendapatkan hanya hash dari password. Tapi dia memiliki dalam kotak peralatan program.
Setelah menemukan semua kerentanan dan injeksi pertanyaan yang diperlukan, alat akan memungkinkan server untuk mengisi file Anda atau, sebaliknya, men-download dari sana.
SQLi Dumper v.7
Program ini - mudah digunakan alat untuk menemukan dan menerapkan kerentanan SQL. Ini menghasilkan PBB didasarkan pada apa yang disebut Dorkas. daftar mereka dapat ditemukan di Internet. Dorca untuk SQL injection - ini adalah template khusus permintaan pencarian. Dengan bantuan mereka, Anda dapat menemukan situs yang berpotensi rentan melalui mesin pencari.
Alat untuk pelatihan
Itsecgames.com di situs ada satu set khusus dari alat yang memungkinkan misalnya menunjukkan bagaimana melakukan SQL injection dan mengujinya. Dalam rangka memperoleh manfaat, perlu untuk men-download dan menginstal. arsip berisi satu set file, yang merupakan struktur situs. Untuk menginstalnya perlu dalam sistem yang ada set Apache web server, MySQL dan PHP.
Uraikan arsip dalam folder web server, Anda harus pergi ke alamat yang dimasukkan ketika menginstal ini software. Sebuah halaman dengan pendaftaran pengguna. Di sini Anda harus memasukkan informasi Anda dan klik «Buat». Pindah pengguna untuk layar baru, sistem meminta Anda untuk memilih salah satu kasus uji. Di antara mereka ada baik dijelaskan oleh injeksi, dan banyak item tes lainnya.
Hal ini layak dipertimbangkan contoh dari jenis SQL injection GET / Search. Di sini Anda perlu pilih dan klik «Hack». Sebelum pengguna akan muncul, dan imitasi string pencarian dari situs film. Untuk mengurutkan film bisa panjang. Tapi hanya ada 10. Misalnya, Anda dapat mencoba untuk memasukkan Iron Man. Ini akan menunjukkan film, maka situs tersebut bekerja, dan tabel yang dikandungnya. Sekarang kita harus memeriksa apakah filter karakter khusus naskah, dalam kutipan tertentu. Untuk melakukan hal ini, tambahkan 'di address bar. " Selain itu, ini harus dilakukan setelah judul film. Situs ini akan memberikan Kesalahan kesalahan: Anda memiliki kesalahan dalam sintaks SQL; periksa manual yang sesuai dengan versi MySQL server Anda untuk sintaks hak untuk menggunakan dekat '%' 'pada baris 1, yang menyatakan bahwa karakter masih belum ditangani dengan benar. Sehingga Anda dapat mencoba untuk mengganti permintaan Anda. Tapi pertama-tama kita harus menghitung jumlah bidang. Hal ini digunakan untuk pesanan ini dengan, yang diperkenalkan setelah tanda kutip: http://testsites.com/sqli_1.php?title=Iron+Man 'order by 2 - & action = pencari.
Perintah ini hanya menampilkan informasi tentang film, yang, jumlah bidang lebih besar dari 2. tanda hubung ganda memberitahu server bahwa permintaan lainnya harus dibuang. Sekarang kita harus memilah, menempatkan pentingnya peningkatan selama kesalahan tidak dicetak. Pada akhirnya, ternyata bahwa ladang akan 7.
Sekarang saatnya untuk mendapatkan sesuatu yang berguna dari dasar. Akan sedikit memodifikasi permintaan di address bar, membawanya ke bentuk: union http://testsites.com/sqli_1.php?title=Iron+Man' pilih 1, basis data (), user (), 4, password, 6, 7 dari pengguna - & action = pencari. Sebagai hasil dari pelaksanaannya akan menampilkan string dengan hash password, yang dapat dengan mudah dikonversi menjadi simbol dimengerti menggunakan salah satu layanan online. Sebuah menyihir sedikit dan mengambil nama field dengan login, Anda dapat memperoleh akses ke entri orang lain, seperti admin situs.
Produk ini memiliki jenis injeksi spesies berat, di mana untuk berlatih. Harus diingat bahwa penerapan keterampilan ini dalam jaringan di situs nyata mungkin tindak pidana.
Injeksi dan PHP
Sebagai aturan, PHP-kode dan bertanggung jawab untuk memproses permintaan yang diperlukan berasal dari pengguna. Oleh karena itu, pada tingkat ini Anda butuhkan untuk membangun pertahanan terhadap SQL injection di PHP.
Pertama, mari kita memberikan beberapa panduan sederhana, atas dasar yang perlu untuk melakukannya.
- Data harus selalu diproses sebelum ditempatkan ke dalam database. Hal ini dapat dilakukan baik dengan menggunakan ekspresi yang ada, atau dengan mengatur query secara manual. Di sini, juga, harus memperhitungkan bahwa nilai-nilai numerik yang dikonversi dengan jenis yang dibutuhkan;
- Dihindari diminta berbagai struktur kontrol.
Sekarang sedikit tentang aturan kompilasi query di MySQL untuk melindungi terhadap SQL injection.
Dalam menyusun ekspresi apapun untuk query adalah penting untuk memisahkan data dari kata kunci SQL.
- SELECT * FROM tabel WHERE nama = Zerg.
Dalam konfigurasi ini, sistem mungkin berpikir bahwa Zerg - nama bidang apapun, sehingga Anda perlu melampirkan dalam tanda kutip.
- SELECT * FROM tabel WHERE nama = 'Zerg'.
Namun, ada kalanya nilai itu sendiri berisi tanda kutip.
- SELECT * FROM tabel WHERE nama = 'Côte d'Ivoire'.
Di sini hanya menangani bagian dari Côte d, dan sisanya dapat dirasakan sebagai tim, yang, tentu saja, tidak. Oleh karena itu, kesalahan terjadi. Maka Anda perlu semacam ini data screening. Untuk melakukannya, gunakan garis miring terbalik - \.
- SELECT * FROM tabel WHERE nama = 'cat-d \' Ivoire'.
Semua di atas mengacu pada baris. Jika aksi terjadi dengan angka, maka tidak memerlukan tanda kutip atau garis miring. Namun, mereka harus diminta untuk secara paksa menyebabkan tipe data yang diinginkan.
Ada rekomendasi bahwa nama field harus diapit backquotes. simbol ini adalah di sisi kiri keyboard, bersama dengan tilde "~". Hal ini untuk memastikan bahwa MySQL dapat secara akurat membedakan nama lapangan dari kata kunci Anda.
kerja yang dinamis dengan data
Sangat sering, untuk mendapatkan data dari database menggunakan query, yang dihasilkan secara dinamis. Sebagai contoh:
- SELECT * FROM tabel WHERE nomor = '$ nomor'.
Di sini, $ jumlah variabel dilewatkan sebagai menentukan nilai lapangan. Apa yang akan terjadi jika mendapat 'Côte d'Ivoire'? Kesalahan.
Untuk menghindari masalah ini, tentu saja, Anda dapat menyertakan "kutipan sihir" pengaturan. Tapi sekarang data akan diputar di mana diperlukan dan tidak perlu. Selain itu, jika kode ditulis dengan tangan, Anda dapat menghabiskan lebih banyak waktu untuk membuat tahan terhadap retak sistem itu sendiri.
Untuk penambahan independen garis miring dapat menggunakan mysql_real_escape_string.
$ Jumlah = mysql_real_escape_string ($ angka);
$ Tahun = mysql_real_escape_string ($ tahun);
$ Query = "INSERT INTO tabel (nomor, tahun, kelas) VALUES ( '$ nomor', '$ tahun', 11)".
Meskipun kode dan peningkatan volume, namun berpotensi akan bekerja jauh lebih aman.
placeholder
Placeholder - semacam penanda yang sistem mengakui bahwa ini adalah tempat yang Anda butuhkan untuk menggantikan fungsi khusus. Sebagai contoh:
$ Sate = $ mysqli-> mempersiapkan ( "District SELECT FROM Nomor MANA Nama =?");
$ Sate-> bind_param ( "s", $ angka);
$ Sate-> mengeksekusi ();
Bagian ini kode membutuhkan pelatihan permintaan Template dan kemudian mengikat jumlah variabel, dan mengeksekusinya. Pendekatan ini memungkinkan Anda untuk membagi pemrosesan query dan pelaksanaannya. Dengan demikian, dapat diselamatkan dari penggunaan kode berbahaya yang SQL-.
Apa mungkin seorang penyerang
Sistem perlindungan - faktor yang sangat penting, yang tidak dapat diabaikan. Tentu saja, sebuah situs kartu sederhana akan lebih mudah untuk mengembalikan. Dan jika itu adalah sebuah portal besar, layanan, forum? Apa konsekuensi jika Anda tidak berpikir tentang keamanan?
Pertama, seorang hacker dapat mematahkan integritas baik dasar dan menghapus sepenuhnya. Dan jika administrator situs atau hoster tidak membuat cadangan, Anda akan memiliki masa-masa sulit. Di atas semua, penyusup, retak satu situs, bisa pergi ke yang lain diposting di server yang sama.
Berikutnya adalah pencurian informasi pribadi dari pengunjung. Cara menggunakan - semuanya hanya dibatasi oleh imajinasi seorang hacker. Tapi dalam hal apapun, konsekuensi tidak akan sangat menyenangkan. Terutama jika terdapat informasi keuangan.
Juga, penyerang dapat menggabungkan basis data diri sendiri dan kemudian memeras uang untuk kembalinya.
pengguna informasi yang salah atas nama administrator situs, orang yang mereka tidak menjadi, juga bisa konsekuensi negatif mungkin fakta penipuan.
kesimpulan
Semua informasi dalam artikel ini disediakan untuk tujuan informasi saja. Menggunakannya hanya perlu menguji proyek mereka sendiri ketika mendeteksi kerentanan dan alamat mereka.
Untuk studi yang lebih mendalam tentang teknik bagaimana melakukan SQL injection, perlu untuk memulai dengan kemampuan penelitian yang sebenarnya dan fitur dari bahasa SQL. Sebagai query dikompilasi, kata kunci, tipe data, dan penggunaan dari semua itu.
Juga tidak bisa tanpa memahami pengoperasian PHP dan elemen HTML fungsi. Penggunaan utama titik-titik rawan untuk injeksi - garis alamat, dan berbagai bidang pencarian. Belajar fungsi PHP, metode pelaksanaan dan fitur akan mencari cara untuk menghindari kesalahan.
Kehadiran banyak perangkat lunak siap pakai memungkinkan untuk analisis mendalam tentang kerentanan situs yang dikenal. Salah satu produk yang paling populer - kali linux. Ini gambar dari sistem operasi berbasis Linux, yang berisi sejumlah besar alat dan program yang dapat melakukan analisis yang komprehensif dari kekuatan situs.
Apa yang perlu Anda tahu cara hack situs? Ini sangat sederhana - itu perlu untuk menyadari kerentanan potensi proyek atau website Anda. Terutama jika itu adalah sebuah toko online dengan pembayaran online, di mana data pembayaran pengguna dapat dikompromikan oleh penyerang.
Untuk studi profesional personil keamanan informasi yang ada akan dapat memeriksa situs untuk berbagai kriteria dan mendalam. Mulai dari yang sederhana HTML-suntikan dan rekayasa sosial dan phishing.
Similar articles
Trending Now