Hacker101 — Micro-CMS v2 (Manual Blind SQLi)

3 years ago 183
BOOK THIS SPACE FOR AD
ARTICLE AD

nakabonne

Sebelumnya, saya menulis di posting bahwa meskipun saya menggunakan alat sqlmap untuk mengotomatisasi injeksi sql, saya akan melakukan injeksi sql secara manual dan saya akan menjelaskan konsep di baliknya.

Perhatikan bahwa penulisan ini hanya melakukan Blind SQL Injection untuk Flag 2 dari Micro-CMSv2.

Sebelum kita mulai, mari kita konsolidasikan petunjuk yang telah kita temukan :

Input rentan terhadap injeksi SQLIni adalah skenario injeksi SQL blindTabel database adalah ‘admins‘dan columns adalah ‘username‘ and ‘password‘Jika hasil querynya adalah TRUE, halaman web akan merespon sebagai “Invalid password“Jika hasil querynya adalah FALSE, halaman web akan merespon sebagai “Unknown user

Harap DICATAT bahwa nama pengguna dan kata sandi dapat bervariasi untuk Anda dan saya.

Ini dia !!!! BLIND SQL INJECTION SECARA MANUAL UNTUK MICRO-CMSv2

Concept

Blind SQL Injection adalah pernyataan berbasis Boolean di mana hasilnya dikembalikan sebagai TRUE atau FALSE.

Kita perlu menghitung ‘username’ & ‘password’ pengguna dari database.

Jadi, kita membutuhkan operator SQL ‘ATAU’, ‘panjang’, ‘substr’, ‘ascii’ untuk membantu kita menghitung database. Saya akan menjelaskan operator ini nanti saat kita melanjutkan dengan injeksi SQL Blind.

Tugas ini melelahkan tetapi sangat berharga karena Anda akan memiliki pemahaman yang lebih baik tentang injeksi SQL Blind.

Lanjut ke pekerjaan teknis.

Database Enumeration

Jumlah baris dalam Tabel
Untuk menghitung nama pengguna dari database. Pertama-tama kita perlu mengidentifikasi panjang nama pengguna. Pernyataan SQL berikut dibuat.

1' OR (select count(username) from admins)=1#

Memecah beberapa istilah dalam pernyataan SQL:

1′ ” adalah untuk menutup pernyataan SQL pertama” OR ” adalah membandingkan kedua ekspresi, pernyataan pertama dan pernyataan kedua di mana salah satu pernyataan benar, hasilnya akan benar.” count ” mengembalikan jumlah catatan yang dikembalikan oleh kueri” # ” untuk menandakan akhir dari pernyataan SQL,
(Ini adalah suatu keharusan untuk setiap pernyataan SQL di POST ini)

Pernyataan SQL ini ditanyakan untuk mengetahui jumlah baris dalam tabel. Mengingat pernyataan yang dibuat seperti ini “ (select count(username) from admins)=1 “, itu memeriksa apakah jumlah catatan sama.

Saya memasukkan pernyataan ini ke dalam kotak input dan saya bisa mendapatkan hasilnya pada percobaan pertama saya (TERIMA KASIH HACKERONE untuk membuat hidup menjadi mudah).
Jadi, banyaknya baris pada tabel ‘admins’ is ‘ 1 ‘.

Panjang Nama Pengguna
Setelah mengetahui jumlah baris dalam tabel, saatnya untuk mengetahui panjang nama pengguna. Berikut adalah Pernyataan SQL yang dibuat.

1' OR length(substr((select username from admins limit 0,1),1))=6#

Uraikan beberapa istilah dalam pernyataan SQL:

length(….) ” adalah untuk memeriksa di mana panjang nama sama dengan nomor yang diberikan.” substr((select username from admins limit 0,1),1)) ” ekstrak substring dari string yang diberikan.

syntax dari SUBSTR() function is SUBSTR(string, start, length). Jika Anda tidak menyebutkan panjangnya , SUBSTR akan mengekstrak seluruh string tergantung pada posisi awal..

Jika Anda memperhatikan syntaxnya ‘limit‘ , fungsinya untuk membatasi jumlah record yang kembali dari atas ke bawah dalam urutan itu. Karena hanya ada 1 baris dalam tabel ‘admins’, posisi baris itu akan dimulai dari ‘0’ dan ‘1’ menyatakan jumlah record yang akan dikembalikan artinya hanya 1 record yang dapat dikembalikan untuk setiap query.

Jadi pernyataan SQL ini adalah untuk mengetahui panjang nama pengguna karena memvalidasi panjang nama pengguna terhadap nilai numerik yang diberikan. Saya mencoba beberapa kali mulai dari 1 dan akhirnya saya mendapatkan hasil di mana panjang nama pengguna adalah ‘ 6 ‘.

Setelah mengetahui panjang username, saatnya brute force username tersebut. Pernyataan SQL yang dibuat digunakan untuk memaksa nama.

1' OR ascii(substr((select username from admins limit 0,1),1,1))=109# {109 asiic code rep char 'm'}

Perincian pernyataan SQL SQL:

ascii ” — adalah mengembalikan nilai ascii dari karakter tertentu dalam kata

Pernyataan SQL adalah untuk mengetahui setiap karakter dalam nama pengguna, memvalidasi setiap karakter terhadap kode ascii yang diberikan. Pernyataan SQL di atas cocok dengan karakter pertama nama pengguna, sekarang saya akan memaksa sisa nama pengguna.

Lakukan Catatan untuk mengubah posisi awal di SUBSTR() berfungsi saat Anda memaksa username.

Pernyataan SQL berikut ditempatkan setelah beberapa percobaan dan kesalahan.

1' OR ascii(substr((select username from admins limit 0,1),2,1))=105# {105 asiic code rep char 'i'}1' OR ascii(substr((select username from admins limit 0,1),3,1))=116# {116 asiic code rep char 't'}1' OR ascii(substr((select username from admins limit 0,1),4,1))=115# {115 asiic code rep char 's'}1' OR ascii(substr((select username from admins limit 0,1),5,1))=117# {116 asiic code rep char 'u'}1' OR ascii(substr((select username from admins limit 0,1),6,1))=101# {101 asiic code rep char 'e'}

Nama pengguna adalah ‘mitsue’

Akhirnya, saatnya untuk melakukan proses yang sama untuk menghitung kata sandi dari database juga.

Panjang Kata Sandi
Mirip dengan mencari tahu panjang nama pengguna. Berikut adalah pernyataan SQL yang dibuat.

1' OR length(substr((select password from admins limit 0,1),1))=7#

Kata sandinya adalah ‘malcolm’

Paksa Kata Sandi (BruteForce)
Mirip dengan brute memaksa nama pengguna, pernyataan SQL berikut dibuat.

1' OR ascii(substr((select password from admins limit 0,1),1,1))=109# {109 asiic code rep char 'm'}

Setelah brute memaksa nama pengguna dan kata sandi, kami akan dapat memperoleh tanda setelah masuk ke kredensial.

Result:

YAHHH, akhirnya kita selesai dengan Blind SQL-Injections manual.

Kesimpulannya, Anda dapat membuat skrip otomatis untuk melakukan Blind SQL Injection untuk CTF ini. Membuat skrip Anda sendiri bisa menyenangkan dan memuaskan pada saat yang sama tetapi juga menyakitkan.

Hope you have a nice day ~

Author:

Read Entire Article