Si el otro día empezamos con esto del bypass básico XSS en aplicaciones web (y viendo que ha tenido buena acogida) hoy vamos a seguir con otra técnica de evasión de filtros muy sencilla.
Bien, supongamos que tenemos que insertar el código habitual de siempre:
- <script>alert('XSS')</script>
Pero ahora nos encontramos una web (en nuestro laboratorio, por supuesto) que tiene implementado un filtro para el comando script con la función str_replace() de PHP de la siguiente manera:
- <?php echo "<p>".str_replace('script', null, $unsafe_string)."</p>";?>
Si pasásemos la misma cadena del primer código (<script>alert('XSS')</script>) sobre la web atacada
www.webvulnerable.com/server.php?cadena=<script>alert('XSS')</script>
La palabra script sería eliminada por el filtro y el código no se ejecutaría, quedando así:
- <p><>alert('XSS')</></p>
Bueno, llegados a este punto, vamos a ver que hacer para evadir ese filtro. ¿Se os ocurre algo? Es muy fácil, solo esta "bloqueando" la palabra "script", pero así, tal cual está escrita, es decir, si yo jugase con el "case sensitive" y cambiase algunas letras que están en minúscula por las mismas pero en mayúsculas, la web volvería a ser vulnerable.
www.webvulnerable.com/server.php?cadena=<sCripT>alert('XSS')</ScRipt>
Obviamente el filtrado que nos vamos a encontrar en un laboratorio en nivel "medium" o "high" no va a valer porque ya estará implementado un filtro que no permita el cambio de minúsculas a mayúsculas, pero también es cierto que podremos saltarlo nuevamente.
Esto es solo para que os deis cuenta que a veces con algo tan sencillo como lo visto hoy podemos evadir algunos filtros. Lo que quiero con esto es que abráis la mente y penséis más.
Recordar que esto es con fines educativos, no para andar tirando scripts por ahí a lo loco. Espero que os haya gustado y lo pongáis en practica en vuestro laboratorio.
Roberto García (@1GbDeInfo)