Ir al contenido principal

Spoof IP

Hola amigos, contaros que desde hace tiempo andaba detrás de un reto hacking en el que se pedía spoofear cierta IP, que era inválida.

Como no podía ser que mi máquina tomase una ip inválida para spoofear, solo cabía esperar que en el servidor se compruebe la ip considerando la cabecera X-FORWARDED-FOR.

El script en el que necesito spoofear mi ip está escrito en PHP, y en este lenguaje muchar veces los programadores comprueban la cabacera X-FORWARDED-FOR, por ejemplo:


$ipString=@getenv("HTTP_X_FORWARDED_FOR"); 

El problema radica en que el valor de la cabecera x-forwarded-for puede ser spoofeado si se modifican las cabeceras http que se envían al servidor.

Se podrían construir paquetes personalizados, pero he preferido usar alguna herramienta ya existente para facilitar la tarea (y tardar menos en pasar el reto).

Instalaremos en local (por ejemplo) un proxy, y ponemos este entre nuestro navegador y la puerta de enlace escuchando en algún puerto, después se configura el navegador para que el tráfico de red pase por el proxy en el puerto indicado. En mi caso el proxy que he utilizado es burp suite free edition, aunque también se podría haber hecho con achilles, que es un proxy más modesto y limitado, pero cumple bien su función.



Ejemplo de mi configuración, el puerto que uso es el 8080 al ser el puerto en el que he puesto a escuchar el proxy:

Ahora solamente queda, por pasos:
  1. Configurar el proxy en modo intercepción, para que se encargue de capturar los paquetes destinados a la web en la que queremos spoofear.
  2. Visitar la web en cuestión.

En mi caso me he construido yo la web en un servidor local, el código está en PHP:

<?php
$remote_ip = getenv('HTTP_X_FORWARDED_FOR');
echo $remote_ip;
?>




Ahora deberíamos de tener los datos del paquete que le queremos enviar al servidor, podemos editarlo y enviarlo al servidor o dejarlo como está. Nosotros lo vamos a editar, yo lo voy a hacer desde la pestaña raw, en esta pestaña, nos vamos a la zona donde se encuentra la información que vamos a enviar, y añadimos una línea nueva (cuidado con la primera letra, debe ser mayúscula, a mi no me funciona si la pongo en minúscula):


X-forwarded-for:   la.ip.que.quieras

Después de escribir la línea anterior, le damos al botón de forward para enviar los datos al servidor y ver qué pasa:

Decir que además de poder spoofear, se podrían provocar:
  • Inyecciones SQL si las ip's fuesen almacenadas y no filtradas.
  • Ataques XSS persistentes si la ip se muestra a otros usuarios (por ejemplo un foro, o los comentarios de un periódico).

Como moraleja tenemos que el campo X-forwarded-for es spoofeable por el usuario, y por lo cual se debería de desconfiar de los datos aportados a través de este campo.

Sería más fiable usar (en php):
$_SERVER['REMOTE_ADDR']

Así es como se comportan las dos instrucciones ante el ataque:

Como vemos, realizar comprobaciones sobre la cabecera http x-forwarded-for es inseguro.

Un saludo.

Comentarios

  1. Interesante man. Disculpa, ya descargue el Burp Suite Free Edition, se puede en esta tool realizar X-forwarded-for ciclicos?, es decir, spoffear mi ip tipo: 10.0.1.1 y que vaya incrementando automaticamente a: 10.0.1.2, 10.0.1.3, 10.0.1.4 hasta 10.0.1.255?, es decir un incremento pero ciclico, se puede con Burp Suite y com oseria man? o con otro Modificador de Headers?, espero tu respuesta y gracias denuevo, saludos.

    ResponderEliminar
  2. Best Places To Bet On Boxing - Mapyro
    Where microtouch solo titanium To Bet On Boxing. It's a sports betting wooricasinos.info event in which you bet on the outcome of a game. 출장안마 In the boxing 1xbet app world, each player must decide if or not to herzamanindir

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Join o producto cartesiano de dos tablas en EXCEL 2007

Hace unos dias inicie mi ocupacion como becario de informatica en la facultad de humanidades y ciencias de la educacion de la UJAEN. Y como no, no han tardado en surgir los problemas. Supongamos que tenemos dos tablas, y queremos hacer una tabla que tenga datos de estas dos tablas, segun un criterio , y es que solo pueden aparecer ciertas filas, mas exactamente aquellas donde coincida cierto campo, en este ejemplo, el codigo de la asignatura. Si queremos realizar el join o producto cartesiano tal y como lo hariamos en una base de datos, parece ser que si no estamos trabajando con una bbdd sino con Excel, la cosa se complica un poco. Para "multiplicar tablas" en excel, primero vamos a hacer una cosa, cada tabla la vamos a guardar en hojas separadas, en nuestro caso, una tabla la guardamos en Hoja1 , y la otra en Hoja2 Ahora, nos situamos en la hoja donde queramos que aparezca el producto cartesiano de nuestras dos tablas, nos vamos a la ficha DATOS . Veremos que h

Descargar código fuente desde Google App Engine

Estaba desarrollando una aplicación en google app engine, cuando un día, al llegar al trabajo (hoy), me doy cuenta que no tengo acceso a mi versión de desarrollo. Como la ultima versión que estaba desarrollando, justo la noche de antes la había subido a google app engine, pues me dije: "Ya esta, me conecto y me descargo el código fuente" ERROR 404 // SOLUCIÓN A IDEA MÁGICA NO ENCONTRADA Tras buscar por google, observo que hay muchas voces que dicen que no te puedes descargar el código fuente, que google no deja disponible ninguna API para descargarte tu codigo, ... ¡Pero como va a ser así!, desde appengine, te dicen que se puede hacer, lo que no está tan claro es como hacerlo. Pues estos son los pasos para poder hacerlo: Crear un directorio vacío para poder descargar en el nuestra aplicación. Abrir la línea de comandos, y cambiarnos al directorio de google app engine: cd C:\Archivos de Programa\Google\google_appengine\ Ejecutar el siguiente comando para descar

Clases abstractas con python

¿Como se crean clases abstractas con python?. Voy a explicar cual es la forma correcta de definir una clase abstracta y heredar de ella. El procedimiento general es: Definir una clase abstracta utilizando una metaclase. Definir la subclase de la clase abstracta (sin herencia). Registrar esta última clase como subclase de la clase abstracta. Tomemos como ejemplo el siguiente código: from abc import ABCMeta, abstractmethod class AbstractFoo:     __metaclass__ = ABCMeta          @abstractmethod     def bar(self):         pass     @classmethod     def __subclasshook__(cls, C):         return NotImplemented class Foo(object):     def bar(self):         print "hola" AbstractFoo.register(Foo)  Lo primero que hacemos es importar del módulo abc la clase ABCMeta y el decorador abstractmethod . La clase ABCMeta es la metaclase que utilizamos para definir las clases abstractas, nos aporta una serie de funcionalidades. Una vez hemos asignada la metacl