principalsolucionesentornospaperspaperscontactepapers

COMO ACCEDER A SERVICIOS EN HOSTS QUE ESTAN DETRAS DE PROXYS/NAT/FIREWALLS

E.Sobrino (eid0) 2001
eid0@micro-electronica.com
http://www.micro-electronica.com

Dedicado a Ru69 y su red gabacha (gracias por testear el programa).

Este texto esta escrito unicamente con fines didacticos. El autor no se hace responsable del mal uso que se pueda dar a esta informacion,ni se hace responsable de los programas que lleve incluidos.
Si el ordenador se te quema, se te borra todo el disco duro o te muerde un perro al ejecutarlos, no reclames al autor.

Los programas junto al codigo fuente referentes a este articulo se pueden bajar de:
http://www.micro-electronica.com/download/conexinversas.zip

INTRODUCCION

Cada vez es mas usual encontrarnos con ordenadores que solo tienen salida a internet y no permiten conexiones entrantes. Esto es debido basicamente a dos motivos:

1.Falta de IP de internet (es decir, que el ordenador va bajo NAT o PROXY) y el cual solo tiene una ip local.
2.Reglas de Firewall que impiden la entrada de paketes de conexion hacia el host.

Como ya habreis deducido(y muchos comprobado),estos ordenadores solo se pueden utilizar para conexiones salientes de protocolos simples, por ejemplo navegar por la web, hacer ftp's pasivos (los activos no funcionaran como ya se discutirá),etc..
Este hecho nos impide tener servicios de cualquier tipo, y esto es lo que vamos a intentar hackear.

OBJETIVO

Nuestro objetivo es crear un programa que nos permita acceder a los servicios que hay detras de estos hosts. Ejemplo practicos:

Crear servidores ftp en cualquier ordenador de la universidad accesibles desde internet evitando todos los firewalls de la universidad.

Acceder a todos los ordenadores locales de la universidad desde internet.

Es decir, queremos acceder a todos los servicios de estos hosts "ocultos" desde un ordenador externo,
evitando todos los filtros del firewall o los efectos colaterales del NAT y PROXYS.
Para esto, vamos a necesitar:

Ejecutar un programa en uno de los hosts que este detras del proxy/fire que nos permita entrar desde cualquier lugar de internet a todos sus servicios (http,ftp,etc...),
asi como a todos los servicios de los hosts de su intranet.

Como era de esperar necesitaremos crear tambien un programa en el ordenador cliente desde el que queremos entrar para que todos los programas clientes (ftp,navegador,etc...) no se den cuenta del cambio realizado y no tengan que preocuparse de ip's locales ni nada por el estilo.

A partir de ahora llamaremos controlador al ordenador que tiene conexion a internet y quiere conectarse a un ordenador que esta detras de un proxy/fire. Llamaremos esclavo al ordenador que esta detras del proxy/fire.

El principio de funcionamiento es sencillo, el esclavo se conectara al controlador con una conexion saliente que evite los firewalls locales. A partir de ese momento el controlador a traves de esa conexion dara mandatos al esclavo para recibir mas conexiones a los puertos locales que el quiera y desde el host y puerto remoto que mande.

Ademas implementaremos los programas para que sean cliente/servidor, multithreaded y de conexion permanente para utilizar una unica conexion para todo tipo de servicios y con multiples conexiones y con multiples esclavos distintos,
tambien vigilaremos bien la reconexion de esa conexion principal, ya que es el unico lazo que nos une con los esclavos.

Para comenzar implementaremos el programa controlador para linux, y el programa esclavo para ordenadores que corran Windows 9X/NT/2000, ya que son lo que normalmente nos vamos a encontrar en todos sitios.

Antes de comenzar en faena, para seguir este articulo vais a necesitar una aplicacion muy simple y muy util utilizada desde tiempo ha en sistemas UNIX y portada recientemente a Windows por el extraordinario grupo Lopht. Bajadlo gratuitamente de su pagina.

El programa servidor de linux tiene como nombre server.c, consiste un daemon que recogera todas las conexiones de los esclavos y tambien de los clientes y hara de intercomunicador entre ellos.
Los programas clientes de windows tienen como nombre pilladorftp.c(nombre totalmente inapropiado por que no tiene nada que ver con el ftp) y datapipeinverso.c. El programa pilladorftp.c establecera la conexión principal con el controlador y cuando reciba un mandato llamara a datapipeinverso para que bouncee la conexión a donde le halla dicho el controlador.
Lo mejor para entender el funcionamiento es ver el ejemplo:

EJEMPLO DE FUNCIONAMIENTO

Los programas de windows se han de meter juntos en el mismo directorio.

Ejemplo:
servidor: ip= 200.200.200.200

esclavo: ip local= 192.168.0.1

gateway= 201.201.201.201

Vamos a acceder al servicio telnet del esclavo desde cualquier punto de internet para ello hacemos:

En el linux:
server 7000 (el programa escuchara en el 7000 a conexiones de esclavos)

En el Windows:
pilladorftp 200.200.200.200 (el windows lanza una conexion al servidor para recibir ordenes)

Ya tenemos la comunicacion principal, ahora podemos dedicarnos a acceder a servicios.

En linux:
nc -l -p 8000 -v

y en otro shell:
nc 127.0.0.1 7000
y escribimos lo siguiente:
CONTROL201.201.201.201REDIRECCIONAPUERTO 200.200.200.200 08000,00023,127.000.000.001 [INTRO]

al hacer esto veremos como nos aparece en la shell del puerto 8000 el servicio telnet desde el cual ya podremos acceder.

La explicacion de la sentencia de control ke le llega al controlador es la siguiente:

CONTROL(IP-esclavo-gtway) REDIRECCIONAPUERTO(IP-server) (portserver) (puertolocal) (hostbounce)

las ips contendran siempre 15 digitos y los puertos siempre 5 digitos.

PROTOCOLOS DE SERVIDORES ESPECIALES (FTP)

Hay protocolos como el ftp donde hay informacion del protocolo de red en el protocolo de aplicacion, esto evidentemente da problemas en los firewalls y en muchos routers que solo tratan IP.
Para este tipo de protocolos el programa controlador se ha de hacer especial para que saque toda la informacion de red desde los datos. Esto se puede ver en el codigo fuente del programa emuladorftp.c que tambien implementé para acceder a servicios ftp en los hosts esclavos. Este programa soporta las conexiones PASV del ftp creando conexiones nuevas...

El funcionamiento seria el siguiente:

Ejemplo:
servidor: ip= 200.200.200.200

esclavo: ip local= 192.168.0.1

gateway= 201.201.201.201

En el linux:
server 7000 (el programa escuchara en el 7000 a conexiones de esclavos)

En el Windows:
pilladorftp 200.200.200.200 (el windows lanza una conexion al servidor para recibir ordenes)

Ya tenemos la comunicacion principal, ahora podemos dedicarnos a acceder al servicio ftp.

emuladorftp 200.200.200.200 9000 201.201.201.201 21

y ahora para acceder al ftp del esclavo solo tenemos que hacer un ftp a : ftp 200.200.200.200 9000
o tambien
ftp 127.0.0.1 9000

Se puede utilizar cualquier cliente de ftp y cualquier numero de sesiones....

Estos programas junto al codigo fuente se pueden bajar de:
http://www.micro-electronica.com/download/conexinversas.zip

Cualquier feedback, correcciones y aportaciones constructivas, enviadlas a: eid0@micro-electronica.com

CODIGO FUENTE

Servidor Hub Multithreaded Multihost, corre en Linux

Esclavo, corre en Windows
Esclavo maestro que se encarga de realizar la conexion saliente.

Emulador Server ftp de conexiones pasivas, corre en Linux
Scanner de hosts de intranet, loggea todos los banners de los puertos de los hosts especificados CLASIFICADO
Si alguien porta a Windows el hub y el emulador, podriais enviarlo para que lo cuelgue aqui.
Ahh! Y no os paseis bajando DIV-X.. ;)