extremcs2 Posted July 28, 2010 Report Posted July 28, 2010 (edited) Definitia XSS-uluiUn atac XSS (Cross-Site Scripting) reprezinta o vulnerabilitate a aplicatiilor web ce apare atunci cand acestea afisaza date care nu sunt valide. Acesta consta in introducerea unui cod, pentru executia acestuia in respectivul site. De obicei, codul este scris in unul din urmatoarele limbaje: JavaScript, (X)HTML, VBScript, ActiveX, Java sau Flash (ar mai fi si altele).Scopul XSS-uluiScopul acestui tip de atac este de a fura cookie-urile unor anumiti utilizatori sau pentru a fura diferite informatii utile despre utilizatori, necesare hackerilor. In general aceste atacuri ii vizeaza pe cei cu drepturi privilegiate ale aplicatiei web (administratori sau alt rang important).In general atacurile implica doua lucruri (hackerul si site-ul), insa XSS-ul implica trei (hackerul, site-ul si utilizatorii site-ului).Despre XSSAtacurile de acest tip se folosesc de datele ce vin din exterior. Asadar formularele, e-mail-ul web, fisierele de tip XML sau RSS si bazele de date sunt cel mai des folosite de hackeri. Pentru a intelege mai bine, va voi face o schema, dupa care actioneaza majoritatea hackerilor.1. Hackerul intra pe site2. Hackerul verifica daca vulnerabilitatea este prezenta3. In cazul in care site-ul este vulnerabil, el introduce date care vor fi stocate in baza de date4. Un utilizator intra pe o pagina a site-ului care se conecteaza la baza de date si afisaza datele stocate in aceasta (incluzand cele introduse de hacker)5. Cookie-urile utilizatorului sunt trimise hackeruluiExemplu XSSVa voi arata prin acest exemplu, cum un hacker poate fura un cont cu ajutorul acestei vulnerabilitati.Vom crea o noua baza de date (folosind phpMyAdmin) numita xss si tabelul users, cu doua campuri: user si pass.[COLOR="Lime"]CREATE DATABASE xss;USE xss;CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT, user VARCHAR(20) NOT NULL, pass VARCHAR(32) NOT NULL, PRIMARY KEY(id));[/COLOR]Avem urmatorul script simplu de inregistrare:[COLOR="Lime"]<html><head><title>Script inregistrare</title></head><body><?php if(isset($_POST['submit'])) { $_POST['user'] = mysql_real_escape_string($_POST['user']); $_POST['pass'] = md5($_POST['pass']); @mysql_connect('localhost', 'root', '') or die('MySQL error.'); @mysql_select_db('xss') or die('MySQL error.'); $sql = "INSERT INTO users (user, pass) VALUES ('{$_POST['user']}', '{$_POST['pass']}')"; $result = @mysql_query($sql) or die('MySQL error.'); @mysql_close();} else { ?><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Username: <input type="text" name="user" /> Password: <input type="password" name="pass" /> <input type="submit" name="submit" value="Register" /></form><?php } ?><br /><div style="z-index:3" class="smallfont" align="center">Search Engine Friendly URLs by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.3.0 RC1 (<span style="color:red;font-weight:bold;">Unregistered</span>)</div></body></html>[/COLOR]Acum, o parte din codul panoului de administrare a site-ului, in care sunt afisati utilizatorii inregistrati:[COLOR="Lime"]<html><head><title>Panou de administrare</title></head><body>Utilizatori inregistrati:<?php@mysql_connect('localhost', 'root', '') or die('MySQL error.');@mysql_select_db('xss') or die('MySQL error.');$sql = "SELECT * FROM users";$result = @mysql_query($sql) or die('MySQL error.');while($row = mysql_fetch_array($result)) { echo $row['user'].'';} ?></body></html>[/COLOR]Acum sa vedem ce se intampla. Daca de exemplu, hackerul introduce in campul user urmatorul cod JavaScript:[COLOR="Lime"]<script>alert("Ti-am spart site-ul!");</script>[/COLOR]Cand administratorul va intra pe pagina care afisaza utilizatorii inregistrati, cookie-urile sale vor fi trimise catre 'http://www.site.com/steal.php' prin variabila $_GET['cookies']. Hackerul poate folosi aceste cookie-uri si poate capata acces in panoul de administrare.Pentru a preveni acest lucru, scriptul de afisare al utilizatorului va trebui sa arate asa:[COLOR="Lime"]<html><head><title>Panou de administrare</title></head><body>Utilizatori inregistrati:<?php@mysql_connect('localhost', 'root', '') or die('MySQL error.');@mysql_select_db('xss') or die('MySQL error.');$sql = "SELECT * FROM users";$result = @mysql_query($sql) or die('MySQL error.');while($row = mysql_fetch_array($result)) { echo htmlentities($row['user']).'';} ?></body></html>[/COLOR]Asadar, functia htmlentities() este folosita pentru a preveni introducerea sau injectarea a unui astfel de cod, ea ignorand tag-urile.Prevenirea XSS-uluiAsadar cum putem preveni atacurile XSS? Cateva functii PHP care ne vor ajuta sunt:1. htmlentities();2. htmlspecialchars();3. strip_tags();4. mysql_escape_string();5. mysql_real_escape_string();6. addslashes();Sau un exemplu de functie :[COLOR="Lime"]function filter($xss) { $tmp = $xss; $xss = str_replace("&", "&", $xss); $xss = str_replace("#", "#", $xss); $xss = str_replace("<", "<", $xss); $xss = str_replace(">", ">", $xss); $xss = str_replace("(", "(", $xss); $xss = str_replace(")", ")", $xss); $xss = str_replace('"', """, $xss); $xss = str_replace("'", "'", $xss); $xss = str_replace("+", "+", $xss); if(strcmp($tmp, $xss)) { echo 'Da-i drumu' de aici.'; } return $xss;}[/COLOR] Edited July 28, 2010 by extremcs2 1 Quote
parazitul29 Posted July 28, 2010 Report Posted July 28, 2010 puteai sa pui si sursa de unde l-ai luat Securitate - Cum sa te protejezi de XSS : Web Quote
famouz Posted July 28, 2010 Report Posted July 28, 2010 Ai Puso tu Ai puso tu sau ... Ai pus-o tu ? Quote
extremcs2 Posted July 28, 2010 Author Report Posted July 28, 2010 Hai ba lasa-ma ! Eu vreau sa ajut rst cu posturi multe multe am gresit si eu Quote
sevex Posted July 28, 2010 Report Posted July 28, 2010 Hai ba lasa-ma ! Eu vreau sa ajut rst cu posturi multee clar.... Quote