SiXSS ( anglicky Sql Injection Сross Site Scripting - "Cross- site scripting v přítomnosti SQL injection ") - typ útoku na zranitelné interaktivní informační systémy na webu ; vložení škodlivých skriptů spuštěných na klientském počítači do stránky vydané systémem vložením kódu do SQL injection. K této chybě zabezpečení obvykle dochází na straně klienta, když jsou tisknutelná pole odvozena prostřednictvím vkládání SQL.
Aby k útoku došlo, musí být na serveru dvě věci.
Útok je cross-site scripting (XSS) prováděný prostřednictvím „otráveného“ požadavku. Škody způsobené běžným XSS: mohou ukrást uživatelské soubory cookie , včetně ID relace a dalších citlivých informací uložených na klientovi, provádět příkazy jménem uživatele.
Jako každý XSS může být i SiXSS reflektován (škodlivý skript je uložen v požadavku) a uložen (škodlivý skript je uložen v databázi).
Předpokládejme, že server má databázi, která obsahuje tabulku ve tvaru:
VYTVOŘIT DATABÁZI cms ; USE cms ; GRANT SELECT ON cms . * TO 'user_noprivs' @ 'localhost' IDENTIFIKOVANÉ HESLEM ' 4f665d3c1e638813 ' ; CREATE TABLE tabulka obsahu ( id INT PRIMARY KEY AUTO_INCREMENT , obsah TEXT ); INSERT INTO content_table ( content ) VALUES ( 'Moje banka [p] Uživatel: [input type=\"text\" name=\"username\"] Heslo: [input type=\"password\" name=\"pass\ "] [input type=submit value=\"Přihlášení\"] ' );a existuje soubor PHP, jako je tento:
Moje banka
<? php if ( @ isset ( $_GET [ 'id' ])){ $myconns = @ mysql_connect ( \" 127.0.0.1 \" , \" user_noprivs \" , \" unbr34k4bё3 ! \" ) nebo zemřít ( \" sorry can 'nepřipojit\"); @mysql_select_db(\"cms\") or die(\"omlouvám se , ale nelze vybrat DB \" ); $sql_query = @ mysql_query ( \" vybrat obsah z tabulky obsahu , kde id = \" . $_GET [ 'id' ]) nebo zemřít ( \" Omlouvám se za špatný SQL dotaz \" ); // oops SQL Injection-^ while ( $tmp = @ mysql_fetch_row ( $sql_query )) echo $tmp [ 0 ]; //ozve se výsledek jako HTML kód } else { echo \" Vítejte v mé bance \" . Přihlášení . \"\" ; } ?>Jak vidíte, výsledky dotazu na MySQL bude nutné přenést k uživateli. Tuto html stránku si můžeme prohlédnout, ale nic zvláštního na ní neuvidíme. Návštěvou stránky a kliknutím na odkaz obdrží uživatel pozvánku k autorizaci.
Z toho lze usoudit, že:
Problém nastává v případě, kdy nějaký text z databáze jde přímo na HTML stránku. Pokud zkusíme použít klasický SQL-Injection útok, získáme nějaké informace o SQL serveru a nic jiného. Na straně klienta je ale zranitelnost. Pomocí UNION SELECT bude útočník schopen vložit libovolný text.
Záchvat
Chcete-li obejít zahrnuté gpc_magic_quotes, použijte "0xXX" HEX místo textu: mysql] select HEX('[ script]alert("SiXSS");[/script]');
+-------------------------------------------------- ---------------------+ | HEX ( '[script]alert(\"SiXSS\");[/script]' ) | +-------------------------------------------------- ---------------------+ | 3 C7363726970743E616C65727428222536958535322293B3C2F 7363726970743 E | +-------------------------------------------------- --------------------+ 1 řádek v sadě ( 0,00 s )a vložte toto do požadavku HTTP:
http://www.mybank.com?id=1+union+select+ _ _ 0x3C7363726970743E616C6572742822536958535322293B3C 2 F7363726970743EOdpověď bude stejná stránka, ale navíc bude tento skript spuštěn na straně klienta.
([ skript ] upozornění ( “ SiXSS ” );[ /script])Toto bude SQL Injection pro Cross Site Scripting (SiXSS)
Příklad převzat z webu SecurityLab
Tyto útoky jsou klasifikovány v souladu s klasifikací SQL injection a XSS útoků , protože se jedná o kombinaci dvou různých typů útoků.