SiXSS ( engelsk Sql Injection Сross Site Scripting - "Cross -site scripting i nærvær af SQL-injektion ") - en type angreb på sårbare interaktive informationssystemer på nettet ; indsprøjtning af ondsindede scripts udført på klientcomputeren på siden udstedt af systemet ved at injicere kode i SQL-injektion. Denne sårbarhed opstår typisk på klientsiden, når udskrivbare felter udledes gennem SQL-injektion.
For at et angreb kan ske, skal der være to ting på serveren.
Angrebet er cross-site scripting (XSS) udført gennem en "forgiftet" anmodning. Skaden fra det er som fra almindelig XSS: den kan stjæle brugercookies, inklusive sessions - id'et og andre følsomme oplysninger, der er gemt på klienten, udføre kommandoer på vegne af brugeren.
Som enhver XSS kan SiXSS afspejles (det ondsindede script er gemt i anmodningen) og lagret (det ondsindede script er gemt i databasen).
Lad os antage, at serveren har en database, der indeholder en tabel med formen:
OPRET DATABASE cms ; BRUG cms ; TILDEL VALG PÅ cms . * TIL 'user_noprivs' @ 'localhost' IDENTIFICERET MED PASSWORD '4f665d3c1e638813' ; CREATE TABLE content_table ( id INT PRIMARY KEY AUTO_INCREMENT , content TEXT ); INSERT INTO content_table ( content ) VALUES ( 'Min bank [p] Bruger: [input type=\"tekst\" navn=\"brugernavn\"] Adgangskode: [input type=\"adgangskode\" navn=\"pass\" "] [input type=send værdi=\"Log på\"] ' );og der er en PHP-fil som denne:
Min bank
<? php if ( @ isset ( $_GET [ 'id' ])){ $myconns = @ mysql_connect ( \" 127.0.0.1 \" , \" user_noprivs \" , \" unbr34k4bё3 ! \" ) eller dø ( \" undskyld kan 't forbinde\"); @mysql_select_db(\"cms\") eller die(\"undskyld, jeg kan ikke vælge DB \" ); $sql_query = @ mysql_query ( \" vælg indhold fra content_table hvor id = \" . $_GET [ 'id' ]) eller dø ( \" Beklager forkert SQL - forespørgsel \" ); // ups SQL Injection-^ while ( $tmp = @ mysql_fetch_row ( $sql_query )) echo $tmp [ 0 ]; //ekkoer resultatet som HTML-kode } else { echo \" Welcome to My Bank \" . Log ind . \"\" ; } ?>Som du kan se, skal resultaterne af forespørgslen til MySQL overføres til brugeren. Vi kan se denne HTML-side, men vi vil ikke se noget særligt på den. Ved at besøge siden og klikke på linket vil brugeren modtage en invitation til godkendelse.
Ud fra dette kan det konkluderes, at:
Problemet opstår i det tilfælde, hvor noget tekst fra databasen går direkte til HTML-siden. Hvis vi forsøger at bruge det klassiske SQL-Injection-angreb, får vi nogle oplysninger om SQL-serveren og intet andet. Men der er en sårbarhed på klientsiden. Ved at bruge UNION SELECT vil en angriber være i stand til at indsætte vilkårlig tekst.
Angreb
For at omgå de inkluderede gpc_magic_quotes, brug "0xXX" HEX i stedet for tekst: mysql] vælg HEX('[ script]alert("SiXSS");[/script]');
+------------------------------------------------ --------------------+ | HEX ( '[script]alert(\"SiXSS\");[/script]' ) | +------------------------------------------------ --------------------+ | 3 C7363726970743E616C65727428222536958535322293B3C2F 7363726970743 E | +------------------------------------------------ --------------------+ 1 række i sæt ( 0,00 sek )og indsæt dette i HTTP-anmodningen:
http://www.mybank.com?id=1+union+select+ _ _ 0x3C7363726970743E616C6572742822536958535322293B3C 2 F7363726970743ESvaret vil være den samme side, men derudover vil dette script blive udført på klientsiden.
([ script ] advarsel ( " SiXSS " );[ /script])Dette vil være SQL Injection for Cross Site Scripting (SiXSS)
Eksempel taget fra SecurityLab- webstedet
Disse angreb er klassificeret i overensstemmelse med klassificeringen af SQL-injektion og XSS-angreb , da de er en kombination af to forskellige typer angreb.