TATU Samarqand filiali TTKT fakulteti Axborot Xavfsizligi yo’nalishi 407-guruh talabasi Bobobekov Bektoshning
Dasturiy vositalar fanidan
Mustaqil ishi
Bajardi:Bobobekov B 407-AX
Tekshirdi: Rahmatullayev I
Mavzu : SQL ineksiya
REJA:
1.Kirish
2.Sql ineksiya nima ?
3.SQL ineksiyadan himoyalanish
4.Xulosa
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: SELECT * FROM card WHERE id=1- IF(MID(VERSION(),1,1) = '5', SLEEP(15), 0). Zanjirli so’rovga asoslangan SQL inyeksiya. Ushbu turdagi SQL inyeksiyani amalga oshirsh uchun ma’lumotlar bazasi zanjirli so’rovlarni qo’llab quvvatlashi kerak bo’ladi. Bunday turdagi so’rovlarni yangi versiyadagi ma’lumotlar bazalari qo’llab quvvatlamaydi. Ammo bu turdagi hujum eng xavflisi hisoblanadi. Uning yordamda ma’lumotlar bazasida istalgan ishni qilish mumkin. Ma’lumotlarni o’chirish, o’zgartrish, ma’lumotlar bazasini o’chirib tashlash va hattoki operatsion tizimdan ham foydalanish mumkin. Bunga misol qilib quyidagi kodni keltirish mumkin: SELECT * FROM table_name WHERE smth = ' ';DROP database;--’; Zanjirli so’rovga asoslangan SQL inyeksiya. SQL ning maxsus imkonyatlari mavjud. exec xp_cmdshell komandasi orqali SQL so’rov yordamida operatsion tizim imkoniyatlaridan foydalanish mumkin. Bu imkoniyat odatda o’chirib qo’yilgan holda bo’ladi. Lekin uni yoqib qo’yish orqali maxsus ishlarni bajrish mumkin. Masalan BackUp nusxani olishni avtomatlashtirish mumkin. Ammo bu imkoniyat anchagina xavfli hujumlarga olib kelishi mumkin. SQL inyeksiyaga yo’l qo’yilganda zanjirli so’rov orqali ushbu imkonyatdan foydalanilsa SQL bazasi turgan kompyuter yoki serverning barcha imkoniyatlarini qo’lga kiritish mumkin. Bunda ham hamma imkoniyatlarni qo’lga kiritish yoki kiritmaslik SQL server qaysi huquq bilan ishlayotganiga bog’liq. Agar SQL server adminstartor nomidan daoliyat yurutayotgan bo’lsa demak hujum natijasida server xavf ostida qolishi mumkin. SQL inyeksiyadan himoyalanish SQL inyeksiya hujumiga zaiflikni avvalambor dinamik so’rov orqali bazaga murojat qilish keltirib chiqaridi. Masalan: $id; $query = “SELECT * FROM tablename WHERE id –'” + $id + “’;” Bunday hujumdan himoyalanish uchun maxsus belgilarni almashtirib qo’yish mumkin. Masalan ( ' ) qo’shtirnoq belgisini va (;) nuqtali bergul belgilarini xuddi shunday tasvirlanadigan ammo dastur boshqa belgi deb tushunadigan belgilarga almashtirib qo’yish mumkin. SQL inyeksiyadan himoyalanish Hujumdan himoyalanishning eng samarali yo’li tayyorlangan so’rovlardan foydalanish orqali ma’lumotlar bazasiga murojat qilish hisoblanadi. Bunday so’rovga quyidagini misol qilib keltirish mumkin: $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $firstname, $lastname, $email); Yoki mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse’; mysql> SET @a = 3; mysql> SET @b = 4; mysql> EXECUTE stmt1 USING @a, @b; SQL inyeksiyadan himoyalanish Inson omilini hisobga oladigan bo’lsak hamma joyda ham tayyorlangan himoya usulini qo’llash yoddan ko’tarilishi mumkin. Shuning uchun himoyaning ikki turini ham qo’llagan ma’qul.
Xulosa SQL inyeksiya yordamida ma’lumotlar bazasi maxfiyligiga, ishonchliligiga, butunligiga va operatsion tizim boshqaruvini yo’qotishga sabab bo’lishi mumkin ekan.
Dostları ilə paylaş: |