Saytlararo skript. XSS zaifligi - bu nima? XSS zaifliklariga misollar

Ori Segal

Xakerlar saytlararo skript hujumidan qanday foydalanishi, u nimaga zarar etkazishi (va nima emas), uni qanday aniqlash va veb-saytingiz va unga tashrif buyuruvchilarni bunday zararli maxfiylik va xavfsizlik buzilishidan qanday himoya qilishni bilib oling.

Saytlararo skript (qisqacha XSS) xakerlar veb-ilovalarni buzish uchun foydalanadigan eng keng tarqalgan dastur qatlami hujumlaridan biridir. XSS - bu ma'lum bir veb-sayt mijozlari ma'lumotlarining maxfiyligiga hujum. Mijozning ma'lumotlari o'g'irlanganda va kelajakda har qanday maqsadda foydalanilganda xavfsizlik tizimining to'liq yo'q qilinishiga olib kelishi mumkin. Ko'pgina hujumlar ikki tomonni o'z ichiga oladi: tajovuzkor va veb-sayt yoki tajovuzkor va mijoz qurboni. Biroq, XSS hujumida uchta tomon ishtirok etadi: tajovuzkor, mijoz va veb-sayt.

XSS hujumining maqsadi mijozning kompyuteridan yoki boshqa yo'l bilan cookie-fayllarni o'g'irlashdir maxfiy ma'lumotlar bu veb-saytda mijozni aniqlashi mumkin. O'zini qonuniy foydalanuvchi sifatida tanishtirish uchun ma'lumotlarga ega bo'lgan tajovuzkor saytda bunday foydalanuvchi sifatida harakat qilishi mumkin, ya'ni. o'zini ulardek ko'rsat. Masalan, yirik kompaniyada o'tkazilgan bitta auditda foydalanuvchining shaxsiy ma'lumotlari va uning raqamini olish uchun XSS hujumidan foydalanish mumkin edi. kredit kartasi... Bunga maxsus JavaScript kodini ishga tushirish orqali erishildi. Ushbu kod veb-saytga kirish huquqiga ega bo'lgan jabrlanuvchining (mijozning) brauzerida ishga tushirildi. Skriptning saytga tegishli ma'lumotlardan boshqa narsaga kirishiga to'sqinlik qiluvchi juda cheklangan miqdordagi JavaScript imtiyozlari mavjud. Shuni ta'kidlash kerakki, zaiflik veb-saytda mavjud bo'lsa-da, uning o'zi bevosita zarar ko'rmaydi. Ammo bu skriptni yig'ish uchun etarli kukilar va ularni hujumchiga yubordi. Natijada, tajovuzkor kerakli ma'lumotlarni oladi va jabrlanuvchiga taqlid qilishi mumkin.

Keling, hujumga uchragan saytni quyidagicha nomlaylik: www.vulnerable.site... An'anaviy XSS hujumi zaif saytda joylashgan zaif skriptga asoslangan. Ushbu skript HTTP so'rovining bir qismini (odatda parametrlar, lekin ba'zan HTTP sarlavhalari yoki yo'lini) o'qiydi va javob sahifasi uchun uni to'liq yoki qisman takrorlaydi. Bu so'rovni tozalamaydi (ya'ni, so'rovda JavaScript yoki HTML teglari yo'qligini tekshirmaydi). Aytaylik, bu skript Welcome.cgi deb ataladi va uning parametri nomdir. U shunday ishlatilishi mumkin:

Buni qanday qilib noto'g'ri ishlatish mumkin? Buzg'unchi mijozni (jabrlanuvchini) tajovuzkor unga taqdim etgan havolani bosishga jalb qila olishi kerak. Bu ehtiyotkorlik bilan ishlab chiqilgan va zararli maqsadda yaratilgan havola bo'lib, u qurbonning veb-brauzerini saytga (www.vulnerable.site) kirishiga va zaif skriptni bajarishiga olib keladi. Ushbu skript uchun ma'lumotlar www.vulnerable.site uchun mijoz brauzeri tomonidan saqlangan cookie-fayllarga kirish uchun JavaScript kodini o'z ichiga oladi. Bunga ruxsat berilgan, chunki mijozning brauzeri JavaScript-ni www.vulnerable.site dan keladi deb "o'ylaydi". Va JavaScript xavfsizlik modeli ma'lum bir saytdan olingan skriptlarga ushbu saytga tegishli cookie-fayllarga kirish imkonini beradi.

Ta'sir qilingan saytning javobi quyidagicha bo'ladi:

Xush kelibsiz! Salom

Tizimimizga xush kelibsiz...

Jabrlanuvchining brauzeri ushbu so'rovni JavaScript-ning bir qismini o'z ichiga olgan HTML sahifasi sifatida izohlaydi. Ushbu kod bajarilganda www.vulnerable.site ga tegishli barcha cookie-fayllarga kirish huquqiga ega bo'ladi. Shunday qilib, u www.vulnerable.site bilan bog'liq barcha mijoz cookie-fayllarini ko'rsatadigan brauzerda qalqib chiquvchi oynani keltirib chiqaradi.

Albatta, haqiqiy hujum bu fayllarni tajovuzkorga yuborishni o'z ichiga oladi. Buning uchun tajovuzkor veb-sayt yaratishi mumkin (www.attacker.site) va cookie fayllarini olish uchun skriptdan foydalanishi mumkin. Qalqib chiquvchi oynani chaqirish o'rniga, tajovuzkor www.attacker.site URL manziliga kiradigan kod yozadi. Shu munosabat bilan cookie-fayllarni qabul qilish uchun skript bajariladi. Ushbu skript uchun parametr o'g'irlangan cookie fayllari. Shunday qilib, tajovuzkor www.attacker.site serveridan cookie-fayllarni olishi mumkin.

Ushbu sahifani yuklagandan so'ng darhol brauzer u yerga kiritilgan JavaScript kodini ishga tushiradi va so'rovni www.attacker.site dagi collect.cgi skriptiga hamda brauzerda allaqachon mavjud bo'lgan www.vulnerable.site cookie-fayllarining qiymatini yo'naltiradi. . Bu mijozning www.vulnerable.site veb-saytidagi cookie-fayllarning xavfsizligini buzadi. Bu tajovuzkorga o'zini qurbon qilib ko'rsatishga imkon beradi. Mijozning maxfiyligi to'liq buziladi.

Eslatma.
Odatda qalqib chiquvchi oynaga qo'ng'iroq qilish JavaScript yordamida saytning XSS hujumiga nisbatan zaifligini ko'rsatish uchun etarli. Agar siz JavaScript-dan Alert funksiyasini chaqira olsangiz, odatda qo'ng'iroq muvaffaqiyatsiz bo'lishi uchun hech qanday sabab yo'q. Shuning uchun XSS hujumlari misollarining aksariyati Alert xususiyatidan foydalanadi, bu esa hujumning muvaffaqiyatini aniqlashni juda oson qiladi.

Hujum faqat jabrlanuvchining saytga kirish uchun ishlatilgan brauzerida (www.vulnerable.site) sodir bo'lishi mumkin. Buzg'unchi mijozni zararli havolaga kirishga majbur qilishi kerak. Bunga bir necha usul bilan erishish mumkin.

  • Buzg'unchi brauzerni havolani ochishga majbur qiladigan HTML sahifani o'z ichiga olgan elektron pochta xabarini yuboradi. Buning uchun jabrlanuvchi mijozdan foydalanishi kerak Elektron pochta HTML bilan ishlashga qodir. Mijozdagi HTML ko'ruvchisi esa www.vulnerable.site saytiga kirish uchun ishlatiladigan brauzer bo'lishi kerak.
  • Mijoz tajovuzkor tomonidan yaratilgan saytga tashrif buyuradi, unda rasm yoki boshqa faol havola mavjud HTML elementi brauzerni havolani ochishga majbur qiladi. Shunga qaramay, bu holatda ham ushbu saytga, ham www.vulnerable.site saytiga kirish uchun bir xil brauzerdan foydalanish shart.

Zararli JavaScript kodi quyidagi ma'lumotlardan istalganiga kirishi mumkin:

  • brauzer tomonidan saqlanadigan doimiy cookie fayllari (www.vulnerable.site);
  • xotiradagi (www.vulnerable.site sayti) cookie-fayllari, ular faqat www.vulnerable.site saytini ko'rib chiqishda brauzer nusxasi tomonidan qo'llab-quvvatlanadi;
  • www.vulnerable.site uchun ochilgan boshqa oynalarning nomlari.
  • joriy DOM orqali kirish mumkin bo'lgan har qanday ma'lumot (qiymatlar, HTML kodlari va boshqalar).

Identifikatsiya, avtorizatsiya va autentifikatsiya ma'lumotlari odatda cookie fayllari shaklida saqlanadi. Agar bu cookie-fayllar doimiy bo'lsa, jabrlanuvchi hatto www.vulnerable.site saytiga kirish vaqtida brauzerdan foydalanmayotgan bo'lsa ham hujumga moyil bo'ladi. Biroq, agar cookie-fayllar vaqtinchalik bo'lsa (masalan, ular RAMda saqlanadi), u holda mijoz tomonida www.vulnerable.site sayti bilan sessiya bo'lishi kerak.

Identifikatsiya yorlig'ining yana bir mumkin bo'lgan amalga oshirilishi URL parametridir. Bunday hollarda siz JavaScript-dan foydalanib boshqa oynalarga quyidagi tarzda kirishingiz mumkin (sizga kerakli URL parametrlari bilan sahifa nomi foobar deb faraz qilinsa):

Bundan tashqari, JavaScript skriptini ishga tushirish uchun ko'plab HTML teglaridan foydalanish mumkin xakerlar qurilishdan foydalanishlari mumkin ... Bu HTML tegini filtrlaydigan saytlar uchun javob beradi qurilishdan foydalanishingiz mumkin">

Hozirgacha biz skript javob beradigan GET so'rovi parametrida XSS hujumi sodir bo'lishi mumkinligini ko'rdik. Biroq, hujum POST so'rovi yoki HTTP so'rovi yo'li komponenti va hatto ba'zi HTTP sarlavhalari (masalan, Referer) yordamida ham amalga oshirilishi mumkin.

Xususan, yo'l komponenti xato sahifasi xato yo'lini qaytarganda foydalidir. Bunday holda, yo'lda zararli skriptning kiritilishi ko'pincha uning bajarilishiga olib keladi. Ko'pgina veb-serverlar ushbu hujumga qarshi himoyasiz.

Shuni tushunish kerakki, veb-sayt ushbu hujumdan to'g'ridan-to'g'ri ta'sir qilmasa ham (u odatdagidek ishlashda davom etadi, unda hech qanday zararli kod bajarilmaydi, DoS hujumi sodir bo'lmaydi va saytdagi ma'lumotlar to'g'ridan-to'g'ri o'qilmaydi yoki o'zgartirilmaydi), bu hali ham sayt o'z mijozlari yoki tashrif buyuruvchilarga taqdim etadigan xavfsizlik tizimidagi buzilishdir. Bu zaif xavfsizlik yorliqlari bo'lgan ilovani joylashtirish uchun ishlatiladigan saytga o'xshaydi. Shu sababli, tajovuzkor mijozning xavfsizlik yorlig'ini taxmin qilishi va o'zini (yoki uning) deb ko'rsatishi mumkin.

Ilovadagi zaif nuqta uning qiymatidan qat'i nazar, o'z parametrini qaytaradigan skriptdir. Yaxshi skript parametrning to'g'ri formatga ega ekanligiga ishonch hosil qilishi kerak, unda maqbul belgilar mavjud va hokazo. Yaroqli parametr HTML teglari yoki JavaScript kodini o'z ichiga olishi uchun odatda hech qanday sabab yo'q. Parametrni javobga kiritish yoki ilovada ishlatishdan oldin ular o'chirilishi kerak. Bu xavfsizlikni ta'minlaydi.

Saytingizni XSS hujumlaridan himoya qilishning uchta usuli mavjud.

  1. Kirishda o'zingizning filtrlashni amalga oshirish orqali (ba'zan kirish sanitariyasi deb ataladi). Har bir foydalanuvchi kiritishi uchun (u parametr yoki HTML sarlavhasi boʻladimi), har bir maxsus skript HTML teglariga, jumladan JavaScript kodiga nisbatan kengaytirilgan filtrlashni qoʻllashi kerak. Misol uchun, oldingi misoldagi Welcome.cgi skripti tegni filtrlashi kerak

    Har bir skriptning har bir parametri uchun (eng oddiy turdagi XSS zaifligini aniqlash uchun JavaScript imkoniyatlariga ega brauzer orqali), agar matn JavaScript sifatida talqin qilinsa, brauzer JavaScript Alert oynasini ishga tushiradi. Albatta, bir nechta variant mavjud. Shuning uchun, bu variantni sinab ko'rishning o'zi etarli emas. Va siz allaqachon bilib olganingizdek, JavaScript kodini turli so'rov maydonlariga kiritishingiz mumkin: parametrlar, HTTP sarlavhalari va yo'l. Biroq, ba'zi hollarda (ayniqsa, HTTP Referer sarlavhasi bilan) brauzer yordamida hujumni amalga oshirish noqulay.

    Saytlar o'rtasida skript yaratish xakerlar veb-ilovalarni buzish uchun foydalanadigan eng keng tarqalgan dastur qatlami hujumlaridan biridir. U ham eng xavfli hisoblanadi. Bu ma'lum bir veb-sayt mijozlari ma'lumotlarining maxfiyligiga hujumdir. Mijoz ma'lumotlari o'g'irlanganda va kelajakda qandaydir maqsadlarda foydalanilganda xavfsizlik tizimining to'liq yo'q qilinishiga olib kelishi mumkin. Afsuski, ushbu maqolada aytib o'tilganidek, bu ko'pincha maqsadli mijoz yoki tashkilot haqida bilmagan holda amalga oshiriladi.

    Veb-saytlar ushbu zararli harakatlardan himoyasiz bo'lishining oldini olish uchun tashkilot onlayn va oflayn himoya strategiyasini amalga oshirishi muhimdir. Bunga veb-saytlardagi barcha ma'lum zaifliklarni va saytdagi maxsus ilovalarni (masalan, saytlararo skriptlarni) sinab ko'rishi mumkin bo'lgan avtomatlashtirilgan zaiflik tekshiruvi kiradi. To'liq onlayn himoya qilish uchun veb-serverlarda yoki ularning orqasida joylashgan kod va ma'lumotlarning har qanday turdagi manipulyatsiyasini aniqlay oladigan va bloklay oladigan xavfsizlik devorini o'rnatish juda muhimdir.

    Har bir inson uzoq vaqtdan beri XSS-dan foydalangan holda tajovuzkor qurbonga cookie faylini yuborishga, CSRF tokenlarini o'qishga, fishing hujumini amalga oshirishga (soxta login formasini yaratish orqali) urinishlarini biladi. foydalanuvchi va shunga o'xshash boshqa hujumlar (ehtimol bu barcha imkoniyatlar emas, lekin bularning barchasi menga ma'lum bo'lgan eng mashhurlari. bu daqiqa).

    Ushbu usulning maqsadi foydalanuvchi nomidan hujum qilingan saytga kiradigan sahifalarni kuzatish, shuningdek uning tugmachalarini bosishlarini kuzatish (siz ham harakat qilishingiz va sichqonchani bosishingiz mumkin, lekin men uchun bu keraksiz bo'ladi, ayniqsa foydali emas. ma'lumot, ko'p hollarda aniq) ...
    Endi maksimal foyda uchun - men algoritm quyidagicha bo'lishiga ishonaman:

    • cookie-fayllarni o'qish va yuborish;
    • qolgan ma'lumotlarni o'qing va yuboring (IP-manzil, o'rnatilgan plaginlar, brauzer versiyasi va turi, flesh-quvvatlash, silverlight-ni qo'llab-quvvatlash va boshqalar) [ixtiyoriy]
    • biz ichki tarmoq haqida ma'lumot olamiz, biz yo'riqnoma orqali o'tamiz [ixtiyoriy]
    • turli tokenlarni o'qish va yuborish [ixtiyoriy];
    • biz fishingni amalga oshiramiz [ixtiyoriy];
    • foydalanuvchi tomonidan "qo'l bilan" "biror narsa qilish [ixtiyoriy];
    • biz unga josuslik qilishni davom ettiramiz va u yorliqni yopmaguncha yoki saytni tark etmaguncha ma'lumotlarni chiqarib tashlaymiz;

    Ro'yxatdagi barcha ixtiyoriy elementlar vaziyatga va XSS yordamida erishiladigan maqsadlar uchun aniq ustuvorliklarga qarab bajarilishi kerak, ular ba'zan bir-biriga xalaqit berishi mumkin (agar siz ularni birlashtirishga harakat qilsangiz, aniqrog'i, birma-bir) va oshirish XSS ekspluatatsiyasining muvaffaqiyatsiz bo'lish ehtimoli.
    Lekin birinchi va oxirgi nuqtalarga har doim amal qilish kerak, har holda, maqolaning asosiy qismi ushbu ro'yxatdagi oxirgi nuqta haqida bo'ladi.

    Maqsadga yaqinlashamiz.

    Men uzoqdan boshlayman: JavaScript orqali yo'lni o'zgartirish mumkin manzil satri sahifani qayta yuklamasdan. Misol uchun, agar foydalanuvchi sahifani yuklagan bo'lsa


    Keyin manzil satrida tarkib quyidagicha bo'ladi (sahifani qayta yuklamasdan):

    http: //site.com/new-url/


    Aytgancha, bu xususiyat ba'zan foydalanuvchilardan (yoki foydalanuvchilarning ko'proq ehtiyotkor toifasi - administratorlardan) Reflected XSS-ni o'z ichiga olgan havolani bosgandan so'ng URLni yashirish kerak bo'lganda juda foydali bo'ladi, shunda keyinroq sahifa yuklangandan so'ng, manzil satriga qarab, hech narsa topilmadi.

    http: //site.com/search.php?q=123

    http: //site.com/search.php?q=123


    biz uni bu imkoniyatdan mahrum qilamiz.

    Ammo bu texnika yanada qiziqarli va kuchli foydalanishga ega. Biz havolani bosgandan so'ng foydalanuvchining saytda qolishini taqlid qilamiz, aslida u doimo bir xil sahifada qoladi va bu vaqtda uchinchi tomon skripti ishlaydi, ma'lumotni tajovuzkorga chiqaradi va yuboradi. Shunday qilib, XSS foydalanuvchi ushbu domendagi havolani bosgancha ishlaydi .

    Biz fikrni aniqlaymiz.

    Umumiy ishlash printsipi quyidagilardan iborat: foydalanuvchi XSS bilan sahifaga tashrif buyurganida, skript ushbu sahifa bilan bir xil manzilga ega iframe-ni yaratadi va uni oldingi planga "yopishadi", foydalanuvchi sahifa normal yuklangan degan taassurotga ega bo'ladi, chunki iframe faqat kod sahifalarida ko'rish mumkin.

    Va yordamchi skript ayg'oqchi botning mantig'ini boshqaradi, ya'ni u manzil satrida uni o'zgartirish uchun freymdagi manzil o'zgarganda nazorat qiladi, lekin agar freymning yangi o'zgartirilgan manzilida boshqa domen bo'lsa, keyin uni yangi vlkadkada ochishingiz mumkin yoki kuyib ketmaslik uchun sahifani qayta yuklashingiz kerak bo'ladi.
    Shunday qilib, XSS hozirda ishlashni to'xtatishi uchun foydalanuvchi sahifani qo'lda yangilashi kerak (agar XSS aks ettirilgan bo'lsa va POST usuli bilan uzatilgan bo'lsa, boshqa hollarda yangilanish saqlanmaydi va aytmoqchi, ba'zi brauzerlar endi sahifani yangilayotganda, POST so'rovini yana yuborishingiz mumkin) yoki yorliqni yoping yoki boshqa domenga o'ting (garchi bu holda siz hali ham nazoratni yo'qotishdan qochishingiz mumkin).

    Agar u hujum qilingan domenning subdomeniga kirsa, u holda tajovuzkorning tanlovi, ya'ni XSS ishlaydi, lekin foydalanuvchi manzil o'rtasidagi nomuvofiqlikni ko'rish ehtimoli kichik. O'ylaymanki, bu erda vaziyatga ko'ra, masalan, agar google.ru domeni hujumga uchragan bo'lsa, foydalanuvchi odatda drive.google.ru subdomenida joylashgan Google-ning bulutli fayl xizmatiga o'tdi, keyin u buni sezishi ehtimoli bor. manzil satriga qaraganingizda tuting ancha yuqori, agar u bu xizmatdan tez-tez foydalansa... Aks holda, siz xavf tug'dirishingiz mumkin. Ammo shuni hisobga olishimiz kerakki, biz endi subdomenli kadrdan uning ma'lumotlarini o'qiy olmaymiz, chunki Cross Origin siyosati bunga ruxsat bermaydi. Ammo biz uning nomidan asosiy domenga xotirjamlik bilan ko'tarilishimiz mumkin yashirin rejim(quyida bu haqda batafsilroq ma'lumot beriladi).

    Faqat soat bu usul cheklovlar mavjud, ya'ni - saytning veb-server javoblarida sarlavha mavjud bo'lsa, u ishlamaydi. X-Frame-Options ma'nosi bilan INDOR QILING... Ammo shaxsan men bunday saytlarni tom ma'noda bir necha marta uchratganman, hozir hatto yarmi SAMEORIGIN orqali to'liq cheklash u yoqda tursin, fosh emas INDOR QILING.

    Fikrni tahlil qilish.

    Endi ko'pchilik BeEF kabi ajoyib narsani eslagan bo'lishi mumkin, unda juda ko'p qiziqarli narsalar mavjud. Aytgancha, freymda foydalanuvchini majburiy qayta yo'naltirish imkoniyati ham mavjud, ammo manzillar panelidagi manzil o'zgarmaydi, bu stolni tezda yoqishi mumkin va bu parametr biroz boshqa maqsadlar uchun xizmat qiladi.
    Umuman olganda, BeEF'e sizga kerak bo'lgan deyarli hamma narsaga va hatto juda ko'p narsaga ega qo'shimcha funktsiyalar, lekin shaxsan men qo'shimcha funktsiyalarni xohlardim, xususan:

    • real vaqtda hujumga uchragan foydalanuvchi uchun mavjud bo'lgan sahifalar kodini kuzatish imkoniyati;
    • o'sha saytda yozgan hamma narsani (login va paroldan tortib, tezkor tugmalar va xabarlargacha), ya'ni JS-da keyloggerni ko'rish imkoniyati;
    • olingan sahifalar kodini ko'rgandan so'ng real vaqt rejimida botingizga JS buyruqlarini berish imkoniyati;
    • buyruqlarni mahalliy botga qoldirish imkoniyati, shundan so'ng u ularni "olib oladi" va bizning bevosita ishtirokimizsiz bajaradi;
    • botning yonib ketish ehtimolining pastligi yoki botning qiziquvchan ko'zlardan "yashirish" qobiliyati;

    Yuqorida aytib o'tilganidek - men BeEF'dan buyruqni bajarish navbatining ajoyib g'oyasini olishga qaror qildim. Misol uchun, biz imtiyozli foydalanuvchi o'zining boshqaruv panelida saqlangan XSS bilan ko'tarilganda bot tashlab ketgan sahifalarni tahlil qildik, biz buyruqni botga qoldiramiz - JS kodi, foydalanuvchi keyingi safar kirganda, ushbu tugmani bosing, buni yozing. bu yerda qiymat va h.k., bu foydalanuvchi keyingi sahifaga tashrif buyurganida, bot buyruqlarni o‘qiydi va ularni bajaradi va biz uning boshqaruvida umuman bo‘lishimiz shart emas – bu juda qulay.

    Asosan, bunday bot, albatta, kontentni boshqarishning qo'shimcha "tutqichlari" bo'lgan ba'zi saytlarning status foydalanuvchilari, boshqa foydalanuvchilar va boshqalar uchun mo'ljallangan. Funktsionallik so'rovlaridan ma'lum bo'lishicha, siz server tomonisiz qilolmaysiz.

    Keling, fikrni amalga oshiraylik.

    Asosan, siz maqolaning ushbu qismini o'tkazib yuborishingiz mumkin, chunki u shunchaki kerakli botni amalga oshirish jarayonini va uning ba'zi tafsilotlarini tavsiflaydi, agar kimdir uni qayta tiklamoqchi yoki o'zi uchun tugatishni xohlasa. Kodning boshida bot o'zgaruvchilarga ega bo'lsa-da, ular orqali siz ba'zi sozlamalarni o'rnatishingiz mumkin.
    Birinchidan, yuklangan paytdan boshlab bot harakatlarining algoritmi:

    1) Sarlavha mavjudligini tekshirish X-Frame-opsiyalari: RED ET(agar mavjud bo'lsa, baliq ovlash tayoqlarini o'rang);
    2) ramkani o'rnatish va botning barcha komponentlarini sozlash;
    3) HTML kodidagi skript va barcha izlarni olib tashlash;
    4) Server tomoni bilan aloqa o'rnatish va ma'lumotlarni jo'natishning boshlanishi, javoblarga munosabat bildirish (serverdan buyruqlar olish);

    Men birinchi fikrni to'liq aytmadim, ya'ni bot faqat birinchi sahifani va ildiz sarlavhasini tekshiradi. Gap shundaki, odatda bu sarlavhalar veb-server tomonidan bir vaqtning o'zida barcha sahifalar uchun va juda kamdan-kam hollarda o'rnatiladi. alohida sahifa hamma narsa "qo'lda" amalga oshiriladi. Va bu nomning o'zi juda kam uchraydi. Xo'sh, ikkinchi va uchinchi haqida aytish uchun alohida narsa yo'q, hamma narsa pastroq bo'ladi.

    Nisbatan muhim jihat borki, kodingizga bot skript kodini qo'shishdan oldin manzil satridagi XSS belgilaridan darhol (JS kodidan) xalos bo'lishingiz kerak, chunki bu aniqlash imkoniyatini kamaytiradi va eng muhimi, bir xil XSS kodi bo'lgan kadrga manzil qo'shganda paydo bo'ladigan rekursiyani oldini oladi, bu esa o'z navbatida o'zi bilan boshqa ramka yaratadi va hokazo.

    Biroq, har qanday holatda, bot kodi bunday ramka rekursiyasini aniqlash va uni allaqachon yaratilganiga ramka qo'shishga birinchi urinishda oldini olish imkoniyatini amalga oshiradi, lekin faqat unga tayanmaslik, balki qo'shimcha ravishda o'chirish yaxshiroqdir. bot kodini yuklashdan oldin kod. Garchi men hali hech qanday muammoga duch kelmagan bo'lsam ham.

    Ramka yangilanishini tekshirish funksiyasi. Voqealar boshqaruvchilarini osib qo'yish orqali bu muammoni iqtisodiy jihatdan hal qilishning bir qancha usullarini sinab ko'rdim contentWindow yoki kontent hujjati, lekin hech narsa muvaffaqiyatga erishmadi, shuning uchun men freymning manzilini tekshiradigan va uni avval saqlangan bilan solishtiradigan funktsiyani yozishim kerak edi va shunga asoslanib, ramka yangilanganmi yoki yo'qmi (manzil o'zgarganmi) va keyin rekursiv ravishda qaror qabul qilishim kerak edi. o'zini chaqirdi.

    Bunday tekshiruvlarning soniyada chastotasi o'zgaruvchi tomonidan boshqariladi kechikish, bu bot kod faylining boshida ko'rsatilgan. Ammo keyinroq, allaqachon yozganimdan so'ng, men samaraliroq echim topdim - oddiy echimdan foydalaning va osib qo'ying yuklash har bir kvadrat uchun, shuning uchun men bu funktsiyani tark etdim, lekin keyinchalik talab ko'proq bo'lib qolsa, uni izohlab berdim.

    Sahifaning HTML kodini yuborish.

    Bu erda sxema juda oddiy - freymning har bir qayta yuklanishidan so'ng (birinchi yuklashni o'z ichiga olgan holda) bot serverga sahifaning butun HTML kodini joriy manzili bilan birga yuboradi, shunda keyinchalik kod tegishli yoki tegishli emasligini farqlay olasiz. kerakli sahifalar.

    Server sahifalarni saqlash mantiqini amalga oshiradi - har bir domen uchun server ushbu domen nomi bilan papka yaratadi va u erda biz barcha ma'lumotlarni saqlaymiz. Sahifa kodlari saqlanadi va doimiy ravishda yangilanadi joriy versiyalar, lekin shu bilan birga, agar kerak bo'lsa, versiyalar tarixini boshqarishingiz uchun har bir yangi kunda sahifaning yangi nusxasi yaratiladi. Ya'ni, uchun /news.php 1-sentabrda status yangilanadi va 2-sentabrda uning nusxasi yaratiladi, faqat o'sha kun uchun tegishli va shuning uchun har kuni yana (agar foydalanuvchi ushbu sahifaga har kuni tashrif buyursa). Sahifa nomi sayt ildiziga (ya'ni domensiz) nisbatan sana va ushbu sahifaga yo'ldan iborat.

    JavaScript-dagi Keylogger.

    Bu g'oya allaqachon ba'zi ishqibozlar tomonidan amalga oshirilgan, ammo men uchun ularning ishlanmalari mos kelmadi, chunki ularning aksariyati juda oddiy edi, ya'ni ular bosilgan tugmachaning kodini aniqladilar. String.fromCharCode belgilarga tarjima qilingan. Ammo bu usulning bir qator kamchiliklari bor - shift, boshqarish, bo'sh joy va boshqalar kabi boshqaruv tugmachalari hech qanday shaklga tarjima qilinmaydi (ko'pincha bo'sh belgi), alfanumerik tugmachalarning shift tugmasi bilan o'zaro ta'siri noto'g'ri qayd etilgan, chunki bu dasturiy tarzda amalga oshirilishi kerak, shuningdek, barcha bosilgan tugmalar katta harflar bilan ko'rsatiladi, ular dasturiy jihatdan ham tuzatilishi mumkin.

    Natijada, biz raqamlar, harflar va asosiy belgilarning barcha tugmachalarini to'g'ri aniqlagan, ikkala tartibda ishlaydigan, smenaga javob beradigan va barcha asosiy maxsus kalitlarni jurnalga yozadigan keyloggerga ega bo'ldik. To'g'ri, ba'zi belgilar (raqamli qatorning yuqori qismida, smena va raqam bosilganda chop etiladi) ba'zi mashinalarda farq qilishi mumkin, chunki ular asosiy standartga muvofiq amalga oshirilgan, ba'zi kompaniyalar ba'zilari uchun o'zgartiradilar.
    Bosilgan belgilarning har bir qismi matn elementi diqqatni yo'qotmaguncha mijoz tomonidan saqlanadi. Bundan tashqari, ushbu qism serverga yuboriladi, u erda u matn faylida saqlanadi, u har kuni yangi nusxasi bilan yaratiladi, shunda katta o'lchamlarga o'sish bo'lmaydi va siz foydalanuvchi yozgan narsani tezda topishingiz mumkin. shunday vaqtda.
    Kalitlarning o'ziga qo'shimcha ravishda, matn terilgan element haqidagi ma'lumotlar har bir qism bilan serverga yuboriladi (ya'ni u bo'lganmi? ,