In-band SQL injection bilan ishlaganda va so'rov natijasi ilova qaytargan qiymat bilan birga ko'rsatilsa, biz UNION-based SQL injection larni ham sinab ko'rishimiz kerak.
UNION kalit so'zi ekspluatatsiyani osonlashtiradi, chunki u qo'shimcha SELECT buyrug'ini bajarishga imkon beradi va natijalarni bir xil so'rovda taqdim etadi, shu bilan ikkita so'rovni bitta bayonotga birlashtiradi.
UNION SQLi hujumlari muvaffaqiyatli bo'lishi uchun avval ikkita shartni qondirish kerak:
Ushbu tushunchani ko'rsatish uchun, quyidagi oldindan sozlangan SQL so'rovi bilan veb-ilovada sinov o'tkazamiz:
$query = "SELECT * from customers WHERE name LIKE '".$_POST["search_input"]."%'";
Listing 19 - Vulnerable SQL Query
Bu so'rov customers jadvalidan barcha yozuvlarni oladi. Shuningdek, u LIKE kalit so'zini o'z ichiga oladi, bu bizning kiritgan ma'lumotimizni o'z ichiga olgan name qiymatlarini qidiradi, undan keyin nol yoki istalgan miqdordagi belgilar keladi, bu foiz (*) operatori tomonidan ko'rsatiladi.
Zaif ilova bilan o'zaro aloqa qilish uchun Kali mashinamizdan **http://192.168.50.16/search.php** manziliga o'tamiz. Sahifa yuklangandan so'ng, SEARCH tugmasini bosish orqali customers jadvalidan barcha ma'lumotlarni olishimiz mumkin.
!
Figure 9: Loading the Customer Search Portal
Har qanday hujum strategiyasini ishlab chiqishdan oldin, maqsadli jadvalda mavjud ustunlarning aniq sonini bilishimiz kerak. Yuqoridagi natija to'rtta ustun mavjudligini ko'rsatsa-da, ilova tuzilishiga qarab taxmin qilmasligimiz kerak, chunki qo'shimcha ustunlar bo'lishi mumkin.
Ustunlarning to'g'ri sonini aniqlash uchun qidiruv satriga quyidagi kiritilgan so'rovni yuboramiz:
' ORDER BY 1-- //
Listing 20 - Verifying the exact number of columns
Yuqoridagi bayonot natijalarni muayyan ustun bo'yicha tartiblaydi, ya'ni tanlangan ustun mavjud bo'lmaganda xato qaytaradi. Ustun qiymatini har safar birga oshirib, jadvalda beshta ustun borligini aniqlaymiz, chunki oltinchi ustun bo'yicha tartiblash xato qaytaradi.
!
Figure 10: Finding the Exact Number of Columns
Bu ma'lumotni hisobga olgan holda, joriy ma'lumotlar bazasi nomi, foydalanuvchi va MySQL versiyasini sanab o'tish orqali birinchi hujumimizni sinab ko'rishimiz mumkin: