|
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.. ;)
|