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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Posible bug PHP 5.3.3
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Posible bug PHP 5.3.3  (Leído 3,577 veces)
odeONeSs

Desconectado Desconectado

Mensajes: 125


programo luego existo!


Ver Perfil
Posible bug PHP 5.3.3
« en: 22 Agosto 2013, 00:06 am »

Hola buenas,

Programando un servicio web muy sencillo me he dado cuenta de que php hace algo muy raro. Puede ser el principio de un posible buffer overflow??? :S no se.. la verdad que nunca se me ha dado bien debuggear...

Os cuento:

en este código correspondiente a "fichero.php" recojo un parámetro get v e incluyo un "unarchivo.php" en el caso de que v sea igual a "2.0"

Código
  1. <?
  2. $version=isset($_GET['v']) ? $_GET['v'] : '2.0' ;
  3. if($version=='2.0'){
  4. include('unarchivo.php');
  5. }
  6. ?>

Al hacer la petición al fichero: http://localhost/fichero.php?v=2.0 todo va bien , se incluye correctamente "unarchivo.php"

Al hacer la petición al fichero: http://localhost/fichero.php?v=2.1 todo va bien , no se incluye

En cambio al hacer la petición http://localhost/fichero.php?v=2.00 de igual manera se incluye :SS

Continuando haciendo pruebas si se hace una petición  http://localhost/fichero.php?v=2.001 no se incluye.

Pero lo mas heavy de esto es que buscando los límites de esto haciendo la petición con 15 ceros trás el punto http://localhost/fichero.php?v=2.0000000000000001125

Se incluye admitiendo cualquier número detrás!!! (con letras no tira).

Alguien sabe que puede significar esto????

Gracias y Saludos!!

« Última modificación: 22 Agosto 2013, 00:09 am por odeONeSs » En línea

Cambio de firma de prueba
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Posible bug PHP 5.3.3
« Respuesta #1 en: 22 Agosto 2013, 00:26 am »

añade otro = para que quede

Código:
   <?
    $version=isset($_GET['v']) ? $_GET['v'] : '2.0' ;
    if($version==='2.0'){
    include('unarchivo.php');
    }
    ?>

y no, no es un bug, es un error tuyo de programación xD.

La comparación con dos == solo mira si es igual y 2.0 si que es matemáticamente lo mismo que 2.00 y si le pones muchos decimales pues lo redondea a 2.0. En cambio con tres = le dices que tiene que ser idéntico, entonces 2.0 es igual pero no idéntico a 2.00 y por eso ya no salta

Dejo un post de un compañero del foro llamado drvy donde explicaba esto con más detalle.
http://www.drvy.net/blog/nunca-comparar-string-igual-php/
« Última modificación: 22 Agosto 2013, 00:30 am por Stakewinner00 » En línea

odeONeSs

Desconectado Desconectado

Mensajes: 125


programo luego existo!


Ver Perfil
Re: Posible bug PHP 5.3.3
« Respuesta #2 en: 22 Agosto 2013, 00:32 am »

Estoy de acuerdo , pero ese es otro tipo de operador

Operadores de comparación
Código
  1. Ejemplo Nombre Resultado
  2.  
  3. $a == $b Igual TRUE si $a es igual a $b después de la manipulación de tipos.
  4. $a === $b Idéntico TRUE si $a es igual a $b, y son del mismo tipo.

El tema es que porqué interpreta el string "2.0" igual a "2.00000000000000012423434353454645645"

y te dice que "2.0" es diferente a "2.0001123131232131"

Y cuales pueden ser sus aplicaciones en seguridad.
En línea

Cambio de firma de prueba
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Posible bug PHP 5.3.3
« Respuesta #3 en: 22 Agosto 2013, 00:35 am »

Hace como las calculadoras, al tener un numero muy largo lo corta y listo. Pero con pocos decimales aun no decide recortar. Las calculadoras te mostraran 2.001 pero no te mostraran 2.00000000000000000000000000001 sino 2.0

En seguridad se puede aplicar como por ejemplo para hacer bypass de passwords como explica el post que deje en el comentario anterior
En línea

odeONeSs

Desconectado Desconectado

Mensajes: 125


programo luego existo!


Ver Perfil
Re: Posible bug PHP 5.3.3
« Respuesta #4 en: 22 Agosto 2013, 00:40 am »

Si , acabo de ver que lo has actualizado. Esta muy bien.

Pero vamos ya te digo yo que el 90% de las app open source se utiliza "==" a saco.

Por ejemplo:

https://github.com/WordPress/WordPress/search?q=%3D%3D&type=Code
En línea

Cambio de firma de prueba
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Posible bug PHP 5.3.3
« Respuesta #5 en: 22 Agosto 2013, 00:44 am »

En ese caso no es un problema de seguridad ni de funcionalidad. Compara con las teclas, no conozco ninguna tecla que sea 39x o 37x y en los otros puede que haya algo que si que sea un problema de seguridad pero por lo general se compara con == cuando no es un problema de seguridad menos cuando se despistan como es obvio.


PD:También hay muchos con === https://github.com/WordPress/WordPress/search?p=2&q=%3D%3D%3D&type=Code
« Última modificación: 22 Agosto 2013, 00:47 am por Stakewinner00 » En línea

odeONeSs

Desconectado Desconectado

Mensajes: 125


programo luego existo!


Ver Perfil
Re: Posible bug PHP 5.3.3
« Respuesta #6 en: 22 Agosto 2013, 00:51 am »

No no, no te he puesto un ejemplo en concreto.

Solo he pegado una busqueda en github en el código de wordpress
Citar
We've found 346 code results

Gracias por la info de todas maneras, no sabía que WHK ya le había encontrado una aplicación.

Y recordar a todos los que lean esto. Igual no es lo mismo que idéntico (según php).

Saludos!
En línea

Cambio de firma de prueba
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
es posible???
Juegos y Consolas
SaturoX 6 3,202 Último mensaje 28 Abril 2005, 18:38 pm
por neuronacero
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines