koleksi ilmu-ilmu hikmah,kisah 2 tokoh sufi.teknologi tips n trik dll

Senin, Februari 17, 2014

SQL injection

SQL injection

Banyak pengembang web tidak menyadari bagaimana query SQL dapat dirusak, dan menganggap bahwa query SQL adalah perintah Web. Ini berarti bahwa query SQL dapat menghindari kontrol akses, sehingga melewati standar otentikasi dan otorisasi cek, dan kadang-kadang query SQL bahkan memungkinkan akses ke tuan perintah tingkat sistem operasi.

Direct Injection SQL Command adalah teknik di mana seorang penyerang menciptakan atau alter ada perintah SQL untuk mengekspos data yang disembunyikan, atau untuk menimpa orang-orang yang berharga, atau bahkan untuk menjalankan perintah tingkat sistem berbahaya pada host basis data. Hal ini dilakukan oleh aplikasi mengambil input pengguna dan menggabungkan dengan parameter statis untuk membangun sebuah query SQL. Contoh-contoh berikut ini didasarkan pada kisah nyata, sayangnya.

Karena kurangnya validasi input dan menghubungkan ke database atas nama superuser atau orang yang dapat membuat pengguna, penyerang dapat menciptakan superuser dalam database Anda




Contoh
 1 Memisahkan hasil set ke halaman ... dan membuat superusers (PostgreSQL)
 

<? php

$ offset = $ argv [0]; / / hati-hati, tidak ada validasi input!
$ query = "SELECT id, nama FROM produk ORDER BY nama LIMIT 20 OFFSET $ offset;";
$ result = pg_query ($ conn, $ query);

>

 


Pengguna biasa klik 'next', 'prev' link di mana $ offset dikodekan ke dalam URL. Script mengharapkan bahwa $ masuk offset angka desimal. Namun, bagaimana jika seseorang mencoba untuk istirahat di dengan menambahkan sebuah urlencode () 'd bentuk berikut ini untuk URL 


 0;
masukkan ke pg_shadow (usename, usesysid, usesuper, usecatupd, passwd)
     pilih 'retak', usesysid, 't', 't', 'retak'
     dari pg_shadow mana usename = 'postgres';
-


Jika itu terjadi, maka script akan menyajikan akses superuser kepadanya. Perhatikan bahwa 0; adalah untuk menyediakan valid diimbangi dengan permintaan asli dan untuk mengakhiri itu.

     Catatan:

     Ini adalah teknik umum untuk memaksa SQL parser untuk mengabaikan sisa query ditulis oleh pengembang dengan - yang merupakan tanda komentar di SQL



Jika itu terjadi , maka script akan menyajikan akses superuser kepadanya . Perhatikan bahwa 0; adalah untuk menyediakan valid diimbangi dengan permintaan asli dan untuk mengakhiri itu .

    
Catatan :

    
Ini adalah teknik umum untuk memaksa SQL parser untuk mengabaikan sisa query ditulis oleh pengembang dengan - yang merupakan tanda komentar di SQL .
Sebuah cara yang layak untuk mendapatkan password adalah untuk menghindari halaman hasil pencarian Anda . Satu-satunya hal penyerang perlu lakukan adalah untuk melihat apakah ada variabel yang disampaikan digunakan dalam pernyataan SQL yang tidak ditangani dengan benar . Filter ini dapat diatur umumnya dalam bentuk sebelumnya untuk menyesuaikan MANA , ORDER BY , LIMIT dan OFFSET klausa dalam laporan SELECT . Jika database Anda mendukung konstruksi UNION , penyerang dapat mencoba untuk menambahkan seluruh query untuk satu asli untuk daftar password dari tabel yang sewenang-wenang . Menggunakan medan password terenkripsi sangat didorong .
Contoh

2 Listing keluar artikel ... dan beberapa password ( database server )< ? php
$ query = " SELECT id , nama , dimasukkan , ukuran FROM produk
           
MANA size = ' $ size ' " ;$ result = odbc_exec ( $ conn , $ query ) ;
>Bagian statis dari query dapat dikombinasikan dengan pernyataan SELECT lain yang mengungkapkan semua password :
'union select '1 ' , concat ( uname | |' - '| | passwd ) sebagai nama , '1971 - 01-01 ' , '0 'dari usertable ;-
Jika pertanyaan ini ( bermain dengan ' dan - ) ditugaskan untuk salah satu dari variabel yang digunakan dalam $ query , binatang permintaan terbangun .
SQL UPDATE ini juga rentan terhadap serangan . Pertanyaan ini juga terancam dengan memotong dan menambahkan query sama sekali baru untuk itu . Tapi penyerang mungkin biola dengan klausa SET . Dalam hal ini beberapa informasi skema harus dimiliki untuk memanipulasi query berhasil . Hal ini dapat diperoleh dengan memeriksa nama-nama variabel bentuk , atau hanya cukup kasar memaksa . Ada tidak begitu banyak konvensi penamaan untuk bidang menyimpan password atau username .
Contoh

3 Dari reset password ... untuk mendapatkan lebih banyak hak istimewa ( database server )< ? php$ query = " UPDATE SET usertable pwd = ' $ pwd ' WHERE uid = ' $ uid ' ; " ;>Tapi pengguna berbahaya sumbits nilai ' atau uid seperti ' % admin % menjadi $ uid untuk mengubah password admin , atau hanya menetapkan $ pwd untuk hehehe ' , dipercaya = 100 , admin = ' ya untuk mendapatkan lebih banyak hak . Kemudian , pertanyaan akan diputar :< ? php
/ / $ Uid : ' atau uid seperti ' % admin %$ query = " UPDATE SET usertable pwd = ' ... ' MANA uid = '' atau uid seperti ' % admin % ' ; " ;
/ / $ Pwd : hehehe ' , dipercaya = 100 , admin = ' yes$ query = " UPDATE SET usertable pwd = ' hehehe ' , dipercaya = 100 , admin = ' yes ' WHERE... ; " ;
>
Sebuah contoh yang menakutkan bagaimana perintah tingkat sistem operasi dapat diakses di beberapa host basis data .
Contoh 

 4 Menyerang sistem operasi basis data host ( MSSQL Server )< ? php
$ query = " SELECT * FROM produk WHERE id LIKE ' % $ prod % ' " ;$ result = mssql_query ( $ query ) ;
>Jika penyerang mengajukan nilai a% ' exec master .. xp_cmdshell ' test net user testpass / ADD ' - untuk $ prod , maka $ query akan :< ? php
$ query = " SELECT * FROM produk
           
WHERE id LIKE ' % a% '
           
exec master .. xp_cmdshell 'test net user testpass / ADD ' - % ' " ;$ result = mssql_query ( $ query ) ;
>MSSQL Server mengeksekusi pernyataan SQL dalam batch termasuk perintah untuk menambahkan user baru ke database account lokal . Jika aplikasi ini berjalan sebagai sa dan layanan MSSQLSERVER berjalan dengan hak yang mencukupi , penyerang sekarang akan memiliki account yang dapat digunakan untuk mengakses mesin ini .

    
Catatan :

    
Beberapa contoh di atas terkait dengan server database tertentu . Ini tidak berarti bahwa serangan serupa tidak mungkin terhadap produk lainnya . Database server Anda mungkin sama rentannya dengan cara lain .
Contoh bekerja isu mengenai SQL InjectionGambar milik » xkcdTeknik Penghindaran ¶
Meskipun masih jelas bahwa penyerang harus memiliki setidaknya beberapa pengetahuan tentang arsitektur database dalam rangka untuk melakukan serangan yang sukses , memperoleh informasi ini seringkali sangat sederhana . Sebagai contoh, jika database adalah bagian dari open source atau paket perangkat lunak publik lain yang tersedia dengan instalasi default, informasi ini benar-benar terbuka dan tersedia . Informasi ini juga dapat diungkapkan oleh kode sumber tertutup - bahkan jika itu dikodekan , mengaburkan , atau disusun - dan bahkan oleh kode Anda sendiri melalui tampilan pesan kesalahan . Metode lain termasuk pengguna tabel dan kolom nama umum . Sebagai contoh, sebuah form login yang menggunakan tabel ' user ' dengan nama kolom ' id ' , 'username' , dan 'password' .
Serangan ini terutama didasarkan pada pemanfaatan kode tidak ditulis dengan keamanan dalam pikiran . Jangan pernah percaya apapun masukan , terutama yang berasal dari sisi klien , meskipun itu berasal dari kotak pilih , field input tersembunyi atau cookie . Contoh pertama menunjukkan bahwa seperti permintaan bersalah dapat menyebabkan bencana .

    
Jangan menghubungkan ke database sebagai superuser atau sebagai pemilik database . Gunakan pengguna selalu disesuaikan dengan hak yang sangat terbatas .
    
Gunakan pernyataan siap dengan variabel terikat . Mereka disediakan oleh PDO , dengan MySQLi dan dengan perpustakaan lainnya .
    
Periksa apakah input yang diberikan memiliki tipe data yang diharapkan . PHP memiliki berbagai fungsi masukan memvalidasi , dari yang paling sederhana yang ditemukan di Fungsi Variabel dan Jenis Karakter Fungsi ( misalnya is_numeric ( ) , ctype_digit ( ) masing-masing) dan seterusnya ke Perl kompatibel Regular Expressions dukungan .

    
Jika aplikasi menunggu input numerik , mempertimbangkan verifikasi data dengan ctype_digit ( ) , atau diam-diam mengubah jenisnya menggunakan settype ( ) , atau menggunakan representasi numerik dengan sprintf ( ) .

    
Contoh # 

5 Cara yang lebih aman untuk menulis query untuk paging
    
< ? php

    
settype ( $ offset, ' bilangan bulat ' ) ;
    
$ query = " SELECT id , nama FROM produk ORDER BY nama LIMIT 20 OFFSET $ offset; " ;

    
/ / Perlu diketahui % d dalam format string , menggunakan % s akan berarti
    
$ query = sprintf ( " SELECT id , nama FROM produk ORDER BY nama LIMIT 20 OFFSET % d ; " ,
                     
$ offset) ;

    
>
    
Jika lapisan database tidak mendukung variabel mengikat kemudian mengutip setiap pengguna diberikan nilai non numerik yang dilewatkan ke database dengan fungsi string escape - database tertentu ( misalnya mysql_real_escape_string ( ) , sqlite_escape_string ( ) , dll ) . Fungsi generik seperti addslashes ( ) hanya berguna dalam lingkungan yang sangat spesifik ( misalnya MySQL dalam karakter single-byte set dengan NO_BACKSLASH_ESCAPES cacat) maka akan lebih baik untuk menghindari mereka .
    
Jangan mencetak informasi database apapun yang spesifik , terutama tentang skema , dengan cara yang adil atau busuk . Lihat juga Kesalahan Pelaporan dan Penanganan Kesalahan dan Fungsi Logging .
    
Anda dapat menggunakan prosedur yang tersimpan dan kursor didefinisikan sebelumnya untuk mengakses data abstrak sehingga pengguna tidak langsung mengakses tabel atau dilihat, tetapi solusi ini memiliki dampak lain .
Selain itu, Anda mendapatkan keuntungan dari permintaan logging baik di dalam script atau database itu sendiri , jika mendukung logging . Jelas, penebangan tidak dapat mencegah setiap upaya berbahaya , tetapi bisa membantu untuk melacak kembali aplikasi yang telah dielakkan . Log tidak berguna dengan sendirinya , tetapi melalui informasi yang dikandungnya . Lebih detail umumnya lebih baik daripada kurang . 









 sumber : php.net

Tidak ada komentar:

Posting Komentar

stroom09@gmail.com

KLINIK CENAYANG STROOM09

KLINIK CENAYANG STROOM09
KLINIK CENAYANG STROOM09

pengunjung

RENTAL MOBIL CIREBON

RENTAL MOBIL CIREBON
RENTAL MOBIL CIREBON,TAXI ONLINE CIREBON,SEWA MOBIL CIREBON MINAT HP/WA :089537731979

Total Tayangan Halaman