Cross-site scripting (XSS) je chyba zabezpečenia, ktorá zahŕňa vloženie kódu na strane klienta (JavaScript) do webovej stránky, ktorú si prezerajú ostatní používatelia.

K zraniteľnosti dochádza v dôsledku nedostatočného filtrovania údajov, ktoré používateľ odošle na vloženie na webovú stránku. Oveľa jednoduchšie na pochopenie konkrétny príklad. Zapamätajte si akúkoľvek knihu návštev – ide o programy, ktoré sú navrhnuté tak, aby prijímali údaje od používateľa a následne ich zobrazovali. Predstavme si, že kniha návštev zadané údaje nijako nekontroluje a nefiltruje, ale jednoducho zobrazuje.

Môžete si načrtnúť svoj najjednoduchší skript (nie je nič jednoduchšie ako písať zlé skripty v PHP - veľa ľudí to robí). Ale pripravených možností je už dosť. Napríklad navrhujem začať s Dojo a OWASP Mutillidae II. Je tam podobný príklad. V samostatnom prostredí Dojo prejdite vo svojom prehliadači na: http://localhost/mutillidae/index.php?page=add-to-your-blog.php

Ak jeden z používateľov zadal:

Potom sa na webovej stránke zobrazí:

Ahoj! Páči sa mi vaša stránka.

A ak používateľ zadá takto:

Ahoj! Páči sa mi vaša stránka.

Zobrazí sa takto:

Prehliadače ukladajú veľa súborov cookie z veľkého počtu stránok. Každá stránka môže prijímať iba súbory cookie, ktoré si sama ukladá. Napríklad web example.com uložil do vášho prehliadača niektoré súbory cookie. Ak prejdete na stránku other.com, táto stránka (skripty klienta a servera) nemá prístup k súborom cookie uloženým na stránke example.com.

Ak je example.com zraniteľný voči XSS, znamená to, že doň môžeme nejakým spôsobom vložiť kód JavaScript a tento kód bude vykonaný v mene example.com! Tie. tento kód bude napríklad pristupovať k súborom cookie zo stránky example.com.

Myslím, že každý si pamätá, že JavaScript sa spúšťa v prehliadačoch používateľov, t.j. v prítomnosti XSS, vložené škodlivý kód pristupuje k údajom používateľa, ktorý otvoril webovú stránku.

Vložený kód dokáže všetko, čo dokáže JavaScript, konkrétne:

  • pristupuje k súborom cookie zo stránky, ktorú si prehliadate
  • môže vykonať akékoľvek zmeny vzhľad stránky
  • pristupuje do schránky
  • môže vložiť programy JavaScript, ako sú keyloggery (zachytávače stlačenia klávesov)
  • pripojiť sa k BeEF
  • atď.

Najjednoduchší príklad so súbormi cookie:

V skutočnosti, upozorniť používa sa len na detekciu XSS. Skutočné škodlivé zaťaženie vykonáva skryté akcie. Tajne sa stýka s vzdialený serverútočníkovi a prenesie mu ukradnuté údaje.

Typy XSS

Najdôležitejšia vec, ktorú je potrebné pochopiť o typoch XSS, je, že sú:

  • Uložené (trvalé)
  • Odrazené (netrvalé)

Príklad konštanty:

  • Špeciálne vytvorená správa z knihy návštev zadaná útočníkom (komentár, príspevok na fóre, profil), ktorá je uložená na serveri, sa stiahne zo servera vždy, keď používatelia požiadajú o zobrazenie stránky.
  • Útočník získal prístup k údajom servera napr SQL injekcia a vložil škodlivý kód JavaScript (pomocou keyloggerov alebo BeEF) do údajov vydaných používateľovi.

Netrvalý príklad:

  • Na stránke je vyhľadávanie, ktoré spolu s výsledkami vyhľadávania zobrazuje niečo ako „Hľadali ste: [hľadaný reťazec]“, pričom údaje nie sú správne filtrované. Keďže sa takáto stránka zobrazuje len tým, ktorí na ňu majú odkaz, kým útočník nepošle odkaz ostatným používateľom stránky, útok nebude fungovať. Namiesto odoslania odkazu obeti je možné použiť hosting škodlivého skriptu na neutrálnej stránke, ktorú obeť navštívi.

Tiež rozlišujú (niektoré ako typ neperzistentných XSS zraniteľností, niektorí hovoria, že tento typ môže byť aj typom perzistentných XSS):

  • Modely DOM

Vlastnosti XSS založeného na DOM

Zjednodušene povedané, škodlivý kód „normálneho“ neperzistentného XSS môžeme vidieť, ak otvoríme HTML kód. Odkaz sa vytvorí napríklad takto:

http://example.com/search.php?q="/>

A pri otvorení zdrojového HTML kódu vidíme niečo takéto: