SiXSS ( în engleză Sql Injection Сross Site Scripting - "Cross -site scripting in the present of SQL injection ") - un tip de atac asupra sistemelor informatice interactive vulnerabile de pe web ; injectarea de scripturi rău intenționate executate pe computerul client în pagina emisă de sistem prin injectarea codului în injectarea SQL. De obicei, această vulnerabilitate apare pe partea clientului atunci când câmpurile imprimabile sunt deduse prin injecție SQL.
Pentru ca un atac să aibă loc, trebuie să existe două lucruri pe server.
Atacul este cross-site scripting (XSS) realizat printr-o solicitare „otrăvită”. Prejudiciul cauzat de acesta este ca de la XSS obișnuit: poate fura cookie -uri de utilizator , inclusiv ID-ul sesiunii și alte informații sensibile stocate pe client, poate executa comenzi în numele utilizatorului.
Ca orice XSS, SiXSS poate fi reflectat (scriptul rău intenționat este stocat în cerere) și stocat (scriptul rău intenționat este stocat în baza de date).
Să presupunem că serverul are o bază de date care conține un tabel de forma:
CREAȚI BAZĂ DE DATE cms ; UTILIZAȚI cms ; GRANT SELECT ON cms . * CĂTRE „user_noprivs” @ „localhost” IDENTIFICAT PRIN PAROLA „4f665d3c1e638813” ; CREATE TABLE content_table ( id INT PRIMARY KEY AUTO_INCREMENT , content TEXT ); INSERT INTO content_table ( continut ) VALUES ( 'My Bank [p] User: [input type=\"text\" name=\"username\"] Parola: [input type=\"parola\" nume=\"pass\ "] [input type=submit value=\"LogIn\"] ' );și există un fișier PHP ca acesta:
Banca mea
<? php if ( @ isset ( $_GET [ 'id' ])){ $myconns = @ mysql_connect ( \" 127.0.0.1 \" , \" user_noprivs \" , \" unbr34k4bё3 ! \" ) sau die ( \" scuze pot nu te conectezi\"); @mysql_select_db(\"cms\") sau die(\"Îmi pare rău, nu pot selecta DB \" ); $sql_query = @ mysql_query ( \" selectați conținutul din tabel_conținut unde id = \" . $_GET [ 'id' ]) sau die ( \" Îmi pare rău interogare SQL greșită \" ); // oops SQL Injection-^ while ( $tmp = @ mysql_fetch_row ( $sql_query )) echo $tmp [ 0 ]; //reduce rezultatul ca cod HTML } else { echo \" Bine ați venit la Banca mea \" . Autentificare . \"\" ; } ?>După cum puteți vedea, rezultatele interogării către MySQL vor trebui transmise utilizatorului. Putem vizualiza această pagină html, dar nu vom vedea nimic special pe ea. Vizitând pagina și făcând clic pe link, utilizatorul va primi o invitație de autorizare.
Din aceasta se poate concluziona că:
Problema apare în cazul în care un text din baza de date ajunge direct în pagina HTML. Dacă încercăm să folosim atacul clasic SQL-Injection, vom obține câteva informații despre serverul SQL și nimic altceva. Dar există o vulnerabilitate pe partea clientului. Folosind UNION SELECT, un atacator va putea injecta text arbitrar.
Atac
Pentru a ocoli gpc_magic_quotes incluse, utilizați "0xXX" HEX în loc de text: mysql] select HEX('[ script]alert("SiXSS");[/script]');
+------------------------------------------------- --------------------+ | HEX ( '[script]alertă(\"SiXSS\");[/script]' ) | +------------------------------------------------- --------------------+ | 3 C7363726970743E616C65727428222536958535322293B3C2F 7363726970743 E | +------------------------------------------------- --------------------+ 1 rând în set ( 0.00 sec )și lipiți acest lucru în cererea HTTP:
http://www.mybank.com?id=1+union+select+ _ _ 0x3C7363726970743E616C6572742822536958535322293B3C 2 F7363726970743ERăspunsul va fi aceeași pagină, dar, în plus, acest script va fi executat pe partea clientului.
([ script ] alertă ( " SiXSS " );[ /script])Aceasta va fi SQL Injection for Cross Site Scripting (SiXSS)
Exemplu preluat de pe site-ul SecurityLab
Aceste atacuri sunt clasificate în conformitate cu clasificarea atacurilor cu injecție SQL și XSS , deoarece sunt o combinație a două tipuri diferite de atacuri.