XSS y reparacion

Iniciado por Okol, Enero 03, 2013, 06:05:45 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

¿Qué es XSS?
Xss es una vulnerabilidad que permite inyectar un código html o javascript en algún formulario ya sea por GET o por POST (por GET es más peligroso).

¿Consecuencias?
Podrian hacer desde una simple alerta hasta robar la cookie de el administrador.

NOTA: para poder entender muy bien esta vulnerabilidad deberíamos saber sobre html ó javascript.

Enviar datos por GET:
Para enviar datos por el método GET es muy fácil, solo debemos poner en la variable nuestro "vector" (un vector es como decir el "Código" con el que saltará nuestra alerta o cualquier otra cosa que hagamos.
Ejemplo:
pagina.com/archivo.php?variable="><script>alert("Okol")</script>
Ya que con el método GET se muestra lo que envias en la url es más "fácil" inyectar nuestro vector.

Enviar datos por POST:
Para enviar datos con el método POST es necesario capturar lo que estamos enviando, para eso yo uso un complemento de firefox llamado Live Http Headers. Básicamente eso registra TODO lo que envías.
Lo instalamos en Complementos -> Buscamos Live http Headers.
Bien. Una vez que lo tenemos, lo abrimos y abrimos una página cualquiera y miren.

Ahora, si nosotros llenamos algun formulario por POST se mostrará así como vemos a continuación:

Salen muchas variables pero la que nos interesa es la POST, bien ahora daremos click a donde dice POST y daremos en repetir, veras que tenemos color=red ó cualquier otro color y quedaría así:

Damos a repetir y miramos la alerta:


Existen funciones en PHP que filtran diferentes caracteres, en está entrada entenderemos 2 de ellos y cual es su función.

htmlentities()

Esa función convierte todos los caracteres html.

htmlspecialchars()

Convierte los siguentes caracteres:

Código: php
'&' (et) se convierte en '&amp;'
'"' (comillas dobles) se convierte en '&quot;' cuando ENT_NOQUOTES no está establecido.
"'" (comilla simple) se convierte en ''' (o &apos;) sólo cuando ENT_QUOTES está establecido.
'<' (menor que) se convierte en '&lt;'
'>' (mayor que) se convierte en '&gt;'


Bueno mi favorito es htmlentities(), pero puedes usar el que más te guste.

¿Como aplicarlo?

tenemos nuestro formulario y nuestro PHP:

Código: php
<form method="POST" action="archivo.php">
<input type="text" name="lol">
<input type="submit" value="Probar">
<?php
$variable = htmlentities($_POST['lol']);
echo $variable;
?>



También podemos sustituir el htmlentities por htmlspecialchars.

Saludos.
Okol.
Underc0de Manager!

Que buen aporte!
Muchas gracias okol! esta excelente!


Muchas Gracias me sirve mucho...

Saludos..


Un Hacker sabe de la materia;
Un Lamer Cree Saberlo;
Y yo solo aprendo.

Por que me tira Bad Request, Algo estoy haciendo mal? lo eh intentado en varios casos y siempre sale esto.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Por que me tira Bad Request, Algo estoy haciendo mal? lo eh intentado en varios casos y siempre sale esto.

Pon tu código y te lo soluciono, tendrás un error de sintaxis, si no quieres hacerlo público envíamelo por MP :)

Un saludo.