Kamis, 17 September 2009

Mengenal trik hacking SQL Injection - konsep dasar dan pencegahan

Lupakan sejenak masalah hacking facebook ,friendster,email dan sejenisnya yang sekarang lagi marak banget. saya mau memposting catatan lama tentang SQL Injection sebagai dokumentasi untuk bahan bacaan bersama guna menambah wawasan buat yang belum tau,bagi yang dah expert, nyuwun sewu , demi melestarikan wawasan seni hacking warisan budaya para leluhur, supaya tidak punah.

Artikel SQL Injection pada posting ini , adalah tingkat pengenalan dasar, dan pada bagian akhir artikel ,sebuah tips untuk pencegahan dan pengamanan untuk pengelolaan situs , mudah2 an lain waktu saya bisa memposting lagi artikel lanjutannya lebih lengkap

SQL Injection merupakan salah satu trik hacking yang sudah populer. dan sekarang seperti mau tenggelam akibat makin majunya dunia web security dan makin banyaknya informasi yang menyesatkan seputar dunia hacking .

Tulisan ini bukan untuk mengajarkan atau menganjurkan orang melakukan tindakan hacking, tapi saya memandang dari sudut ilmu pengetahuan, masalah penggunaanya ,tanggung jawab masing-masing. karena realitanya bahwa di internet ini dalam hitungan detik bisa mendapatkan informasi tentang banyak hal apapun.

Tujuan saya di blog ini untuk sharing, sehubungan sekarang banyaknya orang2 yang memanfaatkan situasi dengan melakukan scam bin penipuan ,yang katanya menjual software yang mampu untuk melakukan hacking macem2...dan akibatnya tak sedikit orang2 awam yang tertipu.
Di lain hal saya mendukung semangat anak2 yang ingin menggali ilmu pengetahuan sebanyak-banyaknya di dunia hacking , dan tidak setuju dengan tindakan cracking . dalam hal ini saya anggap "crackers" adalah orang2 yang hanya mau cari keuntungan materil tanpa memperdulikan masalah pengetahuan , dan "hacker" adalah orang2 yang ingin mendalami dunia teknologi informasi, termasuk didalamnya maslah security dan hacking.

Satu-satunya syarat utama untuk menjadi hacker adalah menguasai system serta bahasa pemrograman dengan baik . tapi jika hanya ingin menjadi cracker memang cukup mencari informasi yang paling mudah dan simple sesuai kondisi yang dibutuhkan . makanya suka ada berita anak umur 14 tahun bisa mendeface situs, itu bukan karena dia menguasai system dengan baik, tapi karena kebetulan nemu informasi atau software yang dibutuhkan untuk aksinya (craker)

SQL singkatan dari Structured Query Language yg merupakan bahasa komputer standar yg ditetapkan oleh ANSI (American National Standard Institute) untuk mengakses dan memanupulasi sistem database. SQL bekerja dgn program2 database seperti MS Access, DB 2, Informix, MS SQL Server, Oracle, Sybase dan lain sebagainya.

SQL Injection attack merupakan salah satu teknik dalam melakukan web hacking utk menggapai akses pada sistem database yg berbasis SQL. Teknik ini memanfaatkan kelemahan dalam bahasa pemprograman scripting pada SQL dalam mengolah suatu sistem database. Hasil yg ditimbulkan dari teknik ini membawa masalah yg sangat serius. Mengapa disebut SQL Injection ? seperti yg kita ketahui, injection jika diartikan ke dalam bahasa Indonesia yaitu "suntikan". Yang terjadi memang seperti melakukan suntikan terhadap SQL yg tujuannya adalah tergantung kepada pelakunya dan pada intinya jika disalahgunakan maka akan membawa aspek negatif terhadap korban.

Sudah disinggung diatas bahwa SQL Injection attack memanfaatkan kelemahan dalam bahasa pemprograman scripting pada SQL maksudnya adalah memanfaatkan teknik string building untuk mengeksekusi/menjalankan kode SQL. Jadi prinsip dasar SQL Injection sebenarnya memanfaatkan kode insecure (tidak aman) atas sebuah sistem yg terhubung ke internet dalam upaya melangkahi command (perintah) dan secara langsung menuju ke database untuk kemudian mengambil keuntungan dari sistem yg dijamin aman untuk melakukan pengambilan atau pengubahan atau lain sebagainya oleh penyerang.

Keuntungan yg diambil adalah seperti login akses terhadap server yg bukan haknya atau yg lainnya, tergantung kepada penyerangnya.

Input Query String

Default setting dari SQL menggunakan :

adminID = sa

password ='' (kosong atau blank)

misalnya : http://www.target.com/login.asp?adminID=sa%20password=''

%20 artinya menggantikan "jarak spasi"

Ini merupakan kondisi yg berbahaya jika pengubahan setting tidak segera dilakukan.

Verifikasi yg dilakukan oleh SQL disaat pemakai memasukkan username dan password adalah seperti yg terlihat pada teks sebagai berikut :

SQLQuery="SELECT Username FROM Users WHERE Username="'&strUsername&"'strpassword&"'

Pada verifikasi terdapat kelemahan pada pemprosesan pada string2 tertentu yg sebenarnya string tersebut dapat dikatakan sebagai input ilegal. Verifikasi tetap melakukan proses dan nantinya menghasilkan error page. Error page tersebut justru membuka rahasia struktur database dan bahkan error page tetapi eksekusi terhadap validasi input tetap dijalankan.

Contoh : menggunakan injection string 'OR''= pada username maupun password baik dilakukan dgn metode URL input query string maupun Box input query string maka SQL query akan membacanya sebagai berikut :

SELECT Username FROM Users WHERE Username=''OR''='' AND Password=''OR''=''

Maka yg terjadi adalah SQL query akan menyatakan blank username dan blank password sebagai user yg sah (valid). SQL Injection yg berhasil dilakukan akan ditandai dgn munculnya error page dgn error yg dimunculkan dapat berupa ODBC error, internal server error, syntax error dan lain sebagainya.

Ada banyak variasi dari injection string yg dapat digunakan untuk melakukan SQL Injection :

'or 1=1--

'or 0=0 --

'or 'x'='x

'or a=a-

"or 0=0 --

"or 0=0 #

"or "x"="x

")or("a"="a

admin'--

hi" or 1=1 --

hi' or'a'='a

hi")or("a"="a

or 0=0 #

'or a=a--

'or 0=0 #

'having 1=1--

"or 1=1--

"or "a"="a

')or('a'='a

')or('x'='x

hi" or "a"="a

hi' or 1=1 --

hi')or('a'='a

or 0=0 --

or 1=1--

Serangan dgn menggunakan SQL Injection dapat lebih bervariasi lagi dan itu tergantung kepada situasi dan tujuan dari serangan yg dilakukan oleh penyerang. Contoh :

'UPDATE YEPCell_memberDB set Credits=100 wher UserID='yamakasi'

SQl Injection yg dilakukan seseorang dapat dideteksi dgn menggunakan IDS (Intrusion Detection System). IDS bukan lagi tool yg terlalu asing terdengar ditelinga anda. Anda dapat mencarinya di www.google.com


SQL Commands Yang Umum Digunakan

Berikut adalah beberapa SQL Commands yang umum, disini saya tidak akan memandu anda bagaimana cara penggunaan dari Command tersebut...jadi jangan pernah bertanya kepada saya bagaimana command tersebut digunakan.......sikap bijaksana yang harus anda ambil adalah dengan bertanya kepada paman google....karena dengannya akan terkuak jawaban dari pertanyaan anda..........

Berikut ini Commandnya:

ABORT -- abort the current transaction
ALTER DATABASE -- change a database
ALTER GROUP -- add users to a group or remove users from a group
ALTER TABLE -- change the definition of a table
ALTER TRIGGER -- change the definition of a trigger
ALTER USER -- change a database user account
ANALYZE -- collect statistics about a database
BEGIN -- start a transaction block
CHECKPOINT -- force a transaction log checkpoint
CLOSE -- close a cursor
CLUSTER -- cluster a table according to an index
COMMENT -- define or change the comment of an object
COMMIT -- commit the current transaction
COPY -- copy data between files and tables
CREATE AGGREGATE -- define a new aggregate function
CREATE CAST -- define a user-defined cast
CREATE CONSTRAINT TRIGGER -- define a new constraint trigger
CREATE CONVERSION -- define a user-defined conversion
CREATE DATABASE -- create a new database
CREATE DOMAIN -- define a new domain
CREATE FUNCTION -- define a new function
CREATE GROUP -- define a new user group
CREATE INDEX -- define a new index
CREATE LANGUAGE -- define a new procedural language
CREATE OPERATOR -- define a new operator
CREATE OPERATOR CLASS -- define a new operator class for indexes
CREATE RULE -- define a new rewrite rule
CREATE SCHEMA -- define a new schema
CREATE SEQUENCE -- define a new sequence generator
CREATE TABLE -- define a new table
CREATE TABLE AS -- create a new table from the results of a query
CREATE TRIGGER -- define a new trigger
CREATE TYPE -- define a new data type
CREATE USER -- define a new database user account
CREATE VIEW -- define a new view
DEALLOCATE -- remove a prepared query
DECLARE -- define a cursor
DELETE -- delete rows of a table
DROP AGGREGATE -- remove a user-defined aggregate function
DROP CAST -- remove a user-defined cast
DROP CONVERSION -- remove a user-defined conversion
DROP DATABASE -- remove a database
DROP DOMAIN -- remove a user-defined domain
DROP FUNCTION -- remove a user-defined function
DROP GROUP -- remove a user group
DROP INDEX -- remove an index
DROP LANGUAGE -- remove a user-defined procedural language
DROP OPERATOR -- remove a user-defined operator
DROP OPERATOR CLASS -- remove a user-defined operator class
DROP RULE -- remove a rewrite rule
DROP SCHEMA -- remove a schema
DROP SEQUENCE -- remove a sequence
DROP TABLE -- remove a table
DROP TRIGGER -- remove a trigger
DROP TYPE -- remove a user-defined data type
DROP USER -- remove a database user account
DROP VIEW -- remove a view
END -- commit the current transaction
EXECUTE -- execute a prepared query
EXPLAIN -- show the execution plan of a statement
FETCH -- retrieve rows from a table using a cursor
GRANT -- define access privileges
INSERT -- create new rows in a table
LISTEN -- listen for a notification
LOAD -- load or reload a shared library file
LOCK -- explicitly lock a table
MOVE -- position a cursor on a specified row of a table
NOTIFY -- generate a notification
PREPARE -- create a prepared query
REINDEX -- rebuild corrupted indexes
RESET -- restore the value of a run-time parameter to a default value
REVOKE -- remove access privileges
ROLLBACK -- abort the current transaction
SELECT -- retrieve rows from a table or view
SELECT INTO -- create a new table from the results of a query
SET -- change a run-time parameter
SET CONSTRAINTS -- set the constraint mode of the current transaction
SET SESSION AUTHORIZATION -- set the session user identifier and the current user identifier of the current session
SET TRANSACTION -- set the characteristics of the current transaction
SHOW -- show the value of a run-time parameter
START TRANSACTION -- start a transaction block
TRUNCATE -- empty a table
UNLISTEN -- stop listening for a notification
UPDATE -- update rows of a table
VACUUM -- garbage-collect and optionally analyze a database


Usaha Pencegahan
SQL Injection dapat terjadi karena :
1. Tidak adanya penanganan terhadap karakter – karakter tanda petik satu dan juga karakter double minus yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL.
2. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.
SQL injection yang merupakan jenis serangan dari para hacker mempunyai beberapa karakteristik yaitu :
1. Teknik serangan ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account.
2. Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.


Cara pencegahan dari SQL Injection adalah sebagai berikut :
1. Membatasi panjang dari suatu input box (jika memungkinkan), dengan
cara membatasinya di kode program, jadi si hacker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang.
2. Memfilterisasi input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation).
3. Mematikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan.
4. Mematikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan.
5. Mengubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab.