Esta entrada se va a centrar en cómo evitar filtros para evitar ataques XSS (Cross Site Scripting). Para ello, se va a tomar como plataforma de pruebas DVWA, ya saben para no meterse en líos Como ya sabéis para instalar DVWA, nos monta la máquina virtual y le metemos la iso de DVWA (https://github.com/nightmare-rg/dvwa-vagrant/tree/master/dvwa-1.0.8)
Seleccionando la opción de XSS reflected y ajustando el nivel de dificultad, tenemos todo listo para empezar:
Nivel low
En el nivel “low” el servidor web no aplica ningún tipo de validación de los parámetros de entrada por lo que introduciendo la típica cadena
visualizamos el alert verificando que es vulnerable.
Recomendaciones:
Para evitar todo tipo de inyección nunca se debe confiar de datos o fuentes externas y validar todo sin suponer nada, por ejemplo, que los datos esperados son los que el usuario va a introducir.
Para ello, se debe validar todos los datos de entrada, escapar o filtrar los datos no permitidos y opcionalmente sanearlos. Sin embargo, el saneamiento de datos es opcional puesto si la aplicación recibe datos que no debería podría rechazarlos y enviar un mensaje de error para que el usuario los introduzca correctamente para ser aceptados.
En este caso, en PHP se tiene una función para filtrar etiquetas no permitidas como /, <, </, script,…. Esta función es script_tags
Otra función útil para escapar los datos de entrada antes de ser mostrados cuando el código de entrada esperado es HTML es htmlspecialchars.
Del mismo modo, se debería emplear la función trim que elimina caracteres especiales de inicio o final de la cadena sustituyéndolo por espacios en blanco. Por ejemplo, elimina tnr/
Nivel medium
Por lo tanto, para detectar que keywords está se realiza una batería de pruebas para identificar los posibles parámetros “prohibidos” para de esta manera, poder evitarlos.
Entrada
|
Salida
|
script | Hello script |
<script> |
hello
|
script> | Hello script> — Este es bueno! |
<script |
hello
|
<<script>> | Hello <> — Filtra keyword script |