Demo – DOM-Based XSS
Acum că am pregatit mediul de lucru pentru demo, vom arăta cum să exploatam o vulnerabilitate în codul JavaScript pe partea de client (browser) pentru a efectua un atac Cross-site scripting.
În acest atac:
• Codul malitios va modifica adresa URL
• Codul malitios va adăuga o intrare în istoricul browserului
• Codul malitios va modifica aspectul vizual al paginii curente
Scriptul care conține codul malitios va fi descărcat de pe un server web extern, mai exact serverul web pregatit de noi pe Codeanywhere.
Gasirea vulnerabilitatii
Una dintre primele task-uri pe care trebuie să le efectuați atunci când auditați o aplicație web, este să accesați cu crawlere sau să pătrundeți transversal site-ul pentru a găsi fișierele și directoarele legate. Această acțiune vă poate ajuta să descoperiți puncte interesante pentru testări suplimentare, cum ar fi formulare de cautare, etc.
În cazul nostru, avem un formular de căutare în bara de navigare din partea de sus a paginii. Facem un test folosing un text oarecare in bara de cautare. Putem vedea în adresa URL din browser, că textul folosit la căutare apare după un semn hash (#).
https://h9demoxss-juice-shop.herokuapp.com/#/search
Partea care începe de la semnul hash (#) este cunoscută sub numele de fragmentul adresei URL și este o parte care este, de obicei, gestionată de cod JavaScript pe partea clientului (browserul client).
Pentru a înțelege mai bine cum funcționează formularul de căutare, să apăsăm F12 pentru a deschide instrumentele de dezvoltare ale browserului și să facem clic pe fila Network.
Apoi, să tastăm un termen de căutare în bara de cautare, cum ar fi Apple, și să facem clic pe butonul Search.
După ce faceți clic pe buton, vom putea observa că pagina web nu se actualizeaza. În schimb, putem vedea în fila de rețea că a fost efectuată o cerere HTTP folosind codul JavaScript.
Un alt lucru interesant pe care l-am observat este că, deși pagina web nu s-a actualizat, termenul de căutare Apple este afișat lângă cuvintele Search results pe ecran.
Prin urmare, există cod JavaScript pe partea de client care modifica conținutul paginii. Dacă facem clic pe Request, vom putea vedea adresa URL a cererii:
https://h9demoxss-juice-shop.herokuapp.com/rest/product/search?q=apple
Aceste date sunt solicitate si primite folosind cod JavaScript pe partea de client. Intrucât pagina nu se actualizeaza, știm că datele sunt procesate utilizând cod JavaScript pe partea client. Deci, dacă gasim o vulnerabilitate care ar conduce la un atac de tip Cross-site scripting, tipul XSS va fi bazat pe DOM.
Există mai multe moduri de a insera cod JavaScript într-un site web, dar probabil una dintre cele mai cunoscute este utilizarea etichetelor <script> în limbajul HTML. Să încercăm să introducem in formularul de cautare un Pop-up simplu de alertă pe care majoritatea o folosesc pentru testare. Tastăm urmatorul cod în formularul de căutare și apoi apăsăm butonul Search:
<script>alert(‘Xss’)</script>
Și după cum putem vedea, codul JavaScript se executa declanșând un pop-up de alertă:
Aceasta inseamnă că dezvoltatorul nu numai că nu filtrează Input-ul pe care l-am completat in formularul de cautare, dar nu filtreaza caractere precum < sau > înainte de a afișa codul in pagina.
După ce faceți clic pe butonul OK, puteti vedea că acel cod pe care l-am tastat este încorporat în sursa paginii (View source).
Toate datele introduse de utilizator ar trebui să fie validate, inainte de a fi afisate.