Sql inyeksiya va undan ximoyalanish
Download 163.39 Kb. Pdf ko'rish
|
MBX Mustaqil ish
SQL inyeksiya va undan ximoyalanish 221-17 guruh talabasi Buzrukov Bahodir
SQL inyeksiya nima ? Ilovaning kamchiligidan foydalanib ma’lumot kiritiladigan qismlarga SQL so’rovlarni inyeksiya qilish orqali ma’lumotlar maxfiyligiga, butunligiga, ishonchliligiga tahdid qilish usuliga SQL inyeksiya deyildi. Bunday turdagi tahdidlar 2007 – 2010 yillarda ommalashgan va shu yillardagi ilovalarning eng katta 10 ta kamchiligi qatoriga kiritilgan. SQL inyeksiya nima ? SQL inyeksiyaning birnecha turlari mavjud bo’lib ularning asosan 3 ta katta turi farqlanadi. Ular: Mantiqiy qiymatga asoslangan SQL inyeksiya; UNION komandasiga asoslangan SQL inyeksiya; Zanjirli so’rovga asoslangan SQL inyeksiya. SQL inyeksiya orqali tahdid qilishda ma’lumotlar qay darajada tasvirlanishiga qarab hujumlar oshkor, va ko’r turlariga bo’linadi. Oshkora SQL inyeksiya Bunday hujumlarda ilova natijalarni ekranga chiqarishi kerak bo’ladi. Masalan qidiruv natijalari ekranga chiqishi, maxsus id yoki loginga tegishli ma’lumotlarni ekranga chiqarilishi oshkora SQL inyeksiya tahdidini yuzaga keltiradi. Ko’r SQL inyeksiya Bunday turdagi hujumda ilova hech qanday ma’lumot taqdim etmaydi. Bunday taqdirda ma’lumot olish uchun boshqacharoq usllarni qo’llashga to’g’ri keladi.
SQL inyeksiya turlari Mantiqiy qiymatga asoslangan SQL inyeksiya Oddiy inyeksiya Union komandasiga asoslangan inyeksiya Xatoga asoslangan inyeksiya Vaqtga asoslangan inyeksiya Zanjirli so’rovga asoslangan inyeksiya Mantiqiy qiymatga asoslangan SQL inyeksiya Odatda qidirish amallari WHERE komandasi orqali bajariladi. Ya’ni WHERE komandasi kerakli qiymat topilganda true qiymat oladi va natijani qaytaradi. Agar ilovada SQL inyeksiyaga yo’l qo’yilgan bo’lsa mantiqiy true qiymatidan foydalanib WHERE komandasini aldash mumkin. WHERE true komandasi barcha qiymatlarn qaytaradi. Uni shaklini o’zgartirib WHERE '1'='1' bilam almashtirish mumkin. Bunday tahdidni amalga oshirish uchun ilovada ishlatilgan SQL so’rov haqida tasavvurga ega bo’lish kerak bo’ladi. U tahminan quyidagcha bo’lishi mumkin: SELECT …, …. FROM … WHERE … = '$qiymat’; Bu so’rov qachonki WHERE komandasi ture qiymat olganda natija qaytaradi. Mantiqiy qiymatga asoslangan oddiy SQL inyeksiya Agar biz $qiymat so’zi o’rniga o’zimizning SQL komandamizni inyeksiya qilsak u quyidagi ko’rinishda bo’ladi: 23123' or '1'='1 Ushbu qiymatni olganda SQL so’rov quyidagi ko’rinishga keladi SELECT …, … FROM … WHERE id='23123' or '1'='1’; Bunday SQL so’rov bizga jadvaldagi barcha ma’lumotlarni chiqarib beradi! Bu turdagi hujumda ma’lumotlar ochiq taqdim etilgani uchun oshkora tahdid jisoblanadi. Union buyrug’iga asoslangan SQL inyeksiya. Bunday turdagi inyeksiya ma’lumotlar bazasidagi ma’lumotlar taqdim etilmagan holda ham taqdim etilmgan holda ham ishlatilishi mumkin. Aytaylik jadvaldagi barcha ko’rsatilgan ma’lumotlarni chiqara olamiz. Ammo boshqa tablitsadagi ma’lumotlarni chiqara olmaymiz. Bunda UNION komandasi orqali buni amalga oshirish mumkin bo’ladi. Bunday hujumga quyidagi kodni misol qilib keltirishimiz mumkin. ' UNION SELECT username, password FROM users-- Bunday hujumdagi muammo boshqa tablitsaning nomini va tablitsa ustonlarining nomini bilish kerak bo’ladi. Bu ma’lumotlarni olish uchun esa xatoga asoslangan va vaqtga asoslangan hujumlardan foydalanish kerak bo’ladi.
Xatoga asoslangan SQL inyeksiya Bunda so’rov yuboriladi va unda kerakli ma’lumotni bilib olish uchun tahminiy variant taqdim etiladi. Agar xatolik yuz bersa demak varinatimiz xato, agar xatolik yuz bermasa demak bizning variantimiz to’g’ri bo’lib chiqadi. Bunday usulda hujum qilish uchun ma’lumotlar bazasi strukturasini yaxshi bilish kerak bo’ladi. Avval ma’lumotlar bazasi versiyasi tekshirib ko’riladi. So’ngra bundan foydalanib ma’lumotlar bazasining struktura fayllariga hujum qilinadi. Struktura fayllarda barcha jadvallarning nomlari va barcha ustunlarning nomlari saqlanadi. Bularni bilib olgandan so’ng UNION komandasi orqali hujum uyushtirish mumkin bo’ladi. Bunday hujumga quyidagi kodni misol qilib keltirish mumkin: https://shop.example.com?article=4 AND substring(database_version(),1,1) = 2 Vaqtga asoslangan SQL inyeksiya So’rov jo’natilganda tizim xatolik yzuberganida turli xatolar berishi mumkin. Qanday xatolik yuz berganini yashiradigan ilovalarda xatoga asoslangan SQL inyeksiya yordam bermaydi. Shunday vaziyatda vaqtga asoslangan SQL inyeksiyani qo’llash mumkin. Bunda kerakli ma’lumot taxmin qilinadi va agar ma’lumot to’g’ri kelsa kutib turish so’raladi. Bu orqali ma’lumotlarga ega bo’lish mumkin bo’lad. Bunga quyidagi kodni misol qilib keltirish mumkin:
Download 163.39 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling