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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Pregunta]: ¿Posible hueco de seguridad en una aplicación web?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Posible hueco de seguridad en una aplicación web?  (Leído 1,876 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: ¿Posible hueco de seguridad en una aplicación web?
« en: 18 Septiembre 2019, 14:55 pm »

Ya tenia conciencia de que por medio de las url's se pueden definir variables php (dependiendo si tu configuración php decidiste que no lo permita) pero en los casos donde se necesita crear paginas "dinámicas", por ejemplo un perfil (profile?id=3) digamos nos mostraría el perfil del usuario con el id 3, toda su información... avatar, nombre, apellido, etcétera. Pero digamos que en otro caso tenemos lo siguiente...

Este código lo saque de la pagina desde donde tome la información a esta vulnerabilidad. (Te explican otras vulnerabilidades, muy interesante.. No se si se permite publicar el link)
Código
  1. <?php
  2. if ($_GET['password'] == 'secreto') {
  3. $admin = true;
  4. }
  5.  
  6. [...]
  7.  
  8. if ($admin) {
  9. // Acciones que solo puede realizar el administrador conociendo la contraseña
  10. [...]
  11. }
  12. ?>
  13.  

Bueno en este código bastaría con que x usuario entre a la pagina que tiene este script, digamos que esta pagina se llama "page" entonces el "atacante" pondría "page?admin=1" y podría ingresar como un administrador.

La solución sería
Código
  1. <?php
  2. $admin = false;
  3.  
  4. if ($_GET['password'] == 'secreto') {
  5. $admin = true;
  6. }
  7.  
  8. [...]
  9.  
  10. if ($admin) {
  11. // Acciones que solo puede realizar el administrador conociendo la contraseña
  12. [...]
  13. }
  14. ?>
  15.  
Definir la variable de una forma más global.

Bueno la idea no era hacer una guía, pero acá va mi problema...
mi duda viene de si se pueden hacer lo mismo con sessiones, ya probé en mi script y no veo cambios pero no estoy totalmente seguro. En la misma pagina desde donde vi esta información dice...

"Transferir parámetros en direcciones URL (por ejemplo http://domain.tld/script.php?id=1) es una forma común de pasar argumentos a scripts. Sin embargo, siempre debe ser consciente de que estos argumentos pueden ser establecidos a voluntad por el usuario. Esto significa que su contenido no debe considerarse digno de confianza. Lo mismo se aplica a los datos transmitidos a través de HTTP-post y cookies.

Esto es importante cuando se redirige de un script a otro y se transmiten parámetros en el URL o como cookie. El nuevo script no puede considerar estos parámetros como fiables y tiene que comprobarlos de nuevo. A menudo es más fácil usar las funciones de sesión de PHP. Los datos que se han comprobado y almacenado en la sesión ahora se pueden clasificar y utilizar como seguros. El usuario no tiene la posibilidad de cambiar el contenido de la sesión directamente.
El identificador de sesión se transmite como parámetro con el URL. Dado que se trata de una cadena generada aleatoriamente, la probabilidad de que un atacante pueda adivinar el identificador de una sesión ajena es extremadamente baja.


Dice "la probabilidad de que un atacante pueda adivinar el identificador de una sesión ajena es extremadamente baja" es decir, probabilidades hay....

Quería saber si esto es así y no tendré que preocuparme en que alguien edite sus sessiones o todo lo contrario.

Ah y ya que estoy... quería saber que es "Lo mismo se aplica a los datos transmitidos a través de HTTP-post y cookies" Me imagino que sería en el caso de las cookies "page?$_COOKIE['cualquier_cosa']=1"

¡Gracias!



Mod: Temas sobre PHP van al subforo de PHP.


« Última modificación: 24 Septiembre 2019, 10:55 am por #!drvy » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Pregunta]: ¿Posible hueco de seguridad en una aplicación web?
« Respuesta #1 en: 18 Septiembre 2019, 15:48 pm »

Citar
Código
  1. <?php
  2. if ($_GET['password'] == 'secreto') {
  3. $admin = true;
  4. }
  5.  
  6. [...]
  7.  
  8. if ($admin) {
  9. // Acciones que solo puede realizar el administrador conociendo la contraseña
  10. [...]
  11. }
  12. ?>

Bueno en este código bastaría con que x usuario entre a la pagina que tiene este script, digamos que esta pagina se llama "page" entonces el "atacante" pondría "page?admin=1" y podría ingresar como un administrador.

no se de donde sacas eso... pero las variables no se definen por el contenido del GET, el contenido del get está solo dentro de $_GET y allí se queda a menos que tu lo saques

el problema con ese script es que $admin no está definido fuera del scope del if, es decir $admin existe unicamente en la linea 3, por lo tanto la linea 8 dará error porque $admin no está definido

el segundo codigo es correcto, porque $admin está definido globalmente y si existe en linea 5 y linea 10

primero con
Citar
Lo mismo se aplica a los datos transmitidos a través de HTTP-post y cookies

todo dato enviado por el usuario, get, post, cookies y headers, puede ser manipulado a voluntad por un atacante



Citar
Dice "la probabilidad de que un atacante pueda adivinar el identificador de una sesión ajena es extremadamente baja" es decir, probabilidades hay....

remitiendo a la documentacion

php por defecto usa sha256 para sesiones, es decir tienes un espacio de colisión de 160 bits... es decir de 2 elevado a la 160... es mas probable que tu generador de numeros pseudoaleatorios repita antes un numero


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Posible hueco de seguridad en una aplicación web?
« Respuesta #2 en: 18 Septiembre 2019, 16:15 pm »

El problema es con la directiva register_globals, php incluso tiene una página dedicada a este mismo problema:

https://www.php.net/manual/es/security.globals.php

No es mucho problema hoy en día, porque viene desactivada por defecto.

En cuanto a seguridad relacionado con las sesiones, todo va a depender de como las usas. Las sesiones usan cookies por defecto. Basicamente, tienes un identificador de la sesión guardado en la cookie y en base a este identificador de la sessión tu servidor PHP puede almacenar y desplegar información relacionada a esa sesión. La información está almacenada en el servidor.

No es necesario inclusive poner una cookie para sostener la sesión, puedes estar pasando el identificador de la sesión en la URL también. Claro que si la pones en una cookie, tu usuario no se da cuenta de la sesión a menos que se ponga a ver que más está enviando en las peticiones al servidor mientras que en la URL, el usuario puede ver claramente que estás pasando un identificador y si quiere navegar a otra parte del sitio y conservar la misma sesión tiene que reusar parte de la URL. La cookie obstruye menos al usuario regular.

Imaginate que tu script en PHP hace algo como:

Código
  1. if($_COOKIE['admin']){ /* código de admin */ }

Yo puedo enviar una cookie admin a la página web (no es difícil, los navegadores seguro te dejan cambiar valores de las cookies y/o crear nuevas) y listo, me salto la seguridad de tu página.

Pero si yo uso una sesión:

Código
  1. if($_SESSION['admin']){ /*codigo de admin */ }

El único que puede poner valores en la sesión eres tú. Tendrías que permitirle al usuario establecer el valor de alguna otra forma (otro hoyo de seguridad en algún lado por ejemplo) o el usuario tendría que robar una sesión de una persona que tiene el valor establecido (por ejemplo, a través de un MITM).

PHP por defecto usa session ids de 128 bits. No creo que te encuentres a alguien haciendo brute force para obtener la sesión. En primer lugar, el atacante no sabe si en ese momento existe una sesión con el valor puesto. Primero te truena el server antes de que  llegue a la id de la sesión. Y si los planetas se alinearan, los cerdos volaran y de alguna forma el atacante haya conseguido el identificador de una sesión que tiene puesto ese valor, todavía puedes agregar validaciones extras para cerciorarte que el identificador solo pueda ser usado por esa persona.

remitiendo a la documentacion

php por defecto usa sha256 para sesiones, es decir tienes un espacio de colisión de 160 bits... es decir de 2 elevado a la 160... es mas probable que tu generador de numeros pseudoaleatorios repita antes un numero

Esa página muestra valores más seguros para la configuración de las sesiones, no son los valores por defecto.
« Última modificación: 18 Septiembre 2019, 16:17 pm por MinusFour » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Asociar formatos a tu aplicacion? es posible?
Programación Visual Basic
ranslsad 2 1,568 Último mensaje 18 Marzo 2009, 14:59 pm
por ranslsad
Pregunta: Como funciona una aplicacion que genera otra aplicacion?
Programación C/C++
inGnio 2 3,448 Último mensaje 18 Octubre 2012, 04:48 am
por x64core
[pregunta]es posible tener varias ip con tor
Redes
daryo 3 2,903 Último mensaje 12 Mayo 2013, 18:37 pm
por daryo
Pregunta sobre una aplicación de c# « 1 2 3 4 »
.NET (C#, VB.NET, ASP)
andrecid 39 17,529 Último mensaje 3 Noviembre 2014, 07:16 am
por Eleкtro
Programa C# rectángulo hueco Ayudaa!!!
Programación General
RazaMex 2 3,434 Último mensaje 2 Marzo 2019, 23:27 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines