Cómo falsificar $_SERVER[‘REMOTE_ADDR’] ¿variable?

5 minutos de lectura

Como falsificar SERVERREMOTE ADDR ¿variable
Richard Knop

¿Es posible falsificar o secuestrar un contenido de $_SERVER['REMOTE_ADDR'] ¿variable?

Me gustaría falsificar una solicitud con:

$_SERVER['REMOTE_ADDR']='127.0.0.1';

¿Cómo podría hacer eso con PHP? ¿CURL puede hacer eso de alguna manera?

Como falsificar SERVERREMOTE ADDR ¿variable
ircmaxell

Supongo que te refieres a fingir remotamente. La respuesta corta es sí, puedes. La respuesta larga sobre qué tan fácil es depende de cómo quieras fingir.

Si no le importa recibir una respuesta, es tan trivial como abrir un socket sin procesar en el destino y falsificar la dirección IP de origen. No estoy seguro de si es realmente fácil de hacer en PHP, ya que todas las implementaciones de socket de PHP están en el nivel de TCP o por encima de él. Pero estoy seguro de que es posible. Ahora, dado que no tiene el control de la red, la respuesta no volverá a usted. Eso significa que no puede (de manera confiable de todos modos) crear una conexión TCP a través de un encabezado TCP falsificado trivial (ya que el syn-ack evita esto al requerir una comunicación bidireccional).

Sin embargo, si puede comprometer la puerta de enlace de la que está desconectada la IP, puede hacer lo que quiera. Entonces, si compromete el enrutador wifi al que está conectada una computadora, puede pretender ser esa computadora y el servidor no notará la diferencia. Si compromete el enrutador de salida del ISP, puede (al menos en teoría) pretender ser la computadora y el servidor no notará la diferencia.

Para obtener más información, consulte los siguientes enlaces:

Sin embargo, solo podrás forjar el 127.0.0.1 dirección de bucle invertido bajo TCP si realmente compromete la máquina/servidor local. ¿Y en ese punto realmente importa?

Importante

Si está utilizando un marco para acceder a esta información, tenga absolutamente seguro que no comprueba el X-HTTP-FORWARDED-FOR ¡encabezamiento! De lo contrario, es trivial falsificar la dirección IP. Por ejemplo, si está utilizando Zend Framework Zend_Controller_Request_Http::getClientIp método, asegúrese absolutamente de aprobar false como el parámetro! De lo contrario, alguien solo necesita enviar un encabezado HTTP: X-Http-Forwarded-For: 127.0.0.1 ¡y ahora parecen ser locales! Este es un caso en el que usar un marco sin comprender cómo funciona en el backend puede ser realmente malo…

Editar: relevante

Recientemente escribí una publicación de blog sobre cómo encontré una vulnerabilidad en la aplicación de StackOverflow. Es muy relevante aquí, ya que explota un mecanismo muy similar a lo que busca esta pregunta (aunque las circunstancias a su alrededor son algo limitadas):

Cómo pirateé StackOverflow

1646758272 620 Como falsificar SERVERREMOTE ADDR ¿variable
miguel borgwardt

La dirección remota no es algo agregado por cortesía, se usa en el protocolo IP para enrutar paquetes, por lo que si enviar un paquete con una dirección falsano recibirá una respuesta, y dado que está hablando de una solicitud HTTP, que se entrega a través de una conexión TCP, que requiere varios paquetes IP (y las respuestas coincidentes) para configurar:

No, eso es imposible (excepto, por supuesto, enviando la solicitud desde el mismo host a través de la interfaz de bucle invertido).

  • Además, parece algo que necesitaría algunos ajustes en su pila TCP y controlador de tarjeta de red.

    –Álvaro González

    23 de febrero de 2011 a las 15:11

Apache puebla $_SERVER['REMOTE_ADDR'] desde un socket TCP que utiliza para comunicarse con su navegador. Está IMPOSIBLE influir en esta variable sobre la internet abierta debido a la apretón de manos de tres vías. Si el cliente y el servidor están en una red de transmisión, como wifi, entonces puede olfatear el cable y completar el apretón de manos.

Si navega a través de un proxy, $_SERVER['REMOTE_ADDR'] puede establecerse en la dirección IP del proxy en lugar de la del usuario final.

Hay otros encabezados que puede usar en su lugar en este caso: Esta página ofrece una función que verifica todas las posibilidades y proporciona la dirección que probablemente sea la del usuario final:

http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html

Sin embargo, si el usuario utiliza un proxy mal configurado, o uno malicioso, o uno diseñado para anonimizar al usuario final, entonces no podrá garantizar ninguno de los encabezados que no sean REMOTE_ADDR (lo que solo lo llevaría hasta el proxy).

Si su usuario final está navegando a través de HTTPS, entonces REMOTE_ADDR siempre será su dirección IP; no puede usar el reenvío de proxy a través de HTTPS. Por lo tanto, la única forma de estar absolutamente seguro de su dirección es hacer que abra tu sitio en HTTPS.

Puede sobrescribir cualquier elemento en el $_SERVER matriz, incluida la que mencionas, en tu servidor; por supuesto, no en la de otra persona.

Sin embargo, no cambiará la dirección IP de su computadora.

1646758273 977 Como falsificar SERVERREMOTE ADDR ¿variable
hsz

REMOTE_ADDR

La dirección IP desde la que el usuario está viendo la página actual.

Puede solicitar un script usando un proxy, etc. para cambiar la dirección IP, pero no puede establecer allí el texto que desee.

1646758274 673 Como falsificar SERVERREMOTE ADDR ¿variable
Quamis

Esa es una variable establecida por apache o cualquier servidor que esté usando. No puedes falsificarlo. puedes correr $_SERVER['REMOTE_ADDR']='127.0.0.1'; al comienzo de los guiones, pero dudo que eso sea lo que intentas hacer

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad