Sto provando a catturare il traffico tra due container Docker ("server web" e "chrome_client"), usando un contenitore "intermedio" in modalità MITM. Quindi abbiamo questa topologia di base:
[chrome_client] - > [intermedio] - > [Webserver]
Questa è una breve descrizione dei contenitori:
-
[chrome_client] : contenitore utilizzato per avviare graficamente Chrome
-
[intermedio] : contenitore Kali che usa
ettercap
per avviarlo in modalità mitm e catturare tutto il traffico che passa attraverso. -
[server web] : un semplice server
lighttpd
che mostra un semplice editor Markdown.
Il modo in cui lancio i container è innanzitutto l'impostazione di una rete isolata e la distribuzione dei contenitori al suo interno (come spiegato qui ). Ad esempio:
# the isolated network
docker network create --subnet=172.19.0.0/24 --gateway 172.19.0.254 mynet123
ora, il contenitore "intermedio":
docker run --rm -it --net mynet123 --ip=172.19.0.7 --privileged kali/wireless:ettercap bash
il browser Chrome:
docker run --rm -d -u=1000:1000 --net mynet123 --ip=172.19.0.4 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -v $HOME/EmptyDir:/data -v /dev/shm:/dev/shm --cap-add=SYS_ADMIN image/chrome:latest
e il server web (un server lighttpd, che mostra un editor Markdown):
docker run --rm -d --net mynet123 --ip=172.19.0.5 image/markdown:latest
Nel contenitore "intermedio" eseguo:
# First, some settings for forwarding
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv4.conf.all.send_redirects=0
iptables -A FORWARD -i eth0@if16 -o eth0@if16 -j ACCEPT
# launch mitm to capture anything between the other 2 containers:
ettercap -T -M arp:remote -i eth0 /172.19.0.5// /172.19.0.4//
Ora inserisci l'URL del browser Chrome http://172.19.0.5
e non viene visualizzato nulla. Tutto è vuoto, mentre nell'output di ettercap ottengo:
Tue Jun 19 16:19:22 2018 [463117]
TCP 172.19.0.4:51840 --> 172.19.0.5:80 | S (0)
Tue Jun 19 16:19:22 2018 [463119]
TCP 172.19.0.4:51842 --> 172.19.0.5:80 | S (0)
... and so on....
Non capisco cosa stia cercando di dirmi. Tieni presente che non utilizza https, quindi non dovrei avere problemi con i certificati. Giusto?
PD: Nel frattempo, sto cercando di utilizzare mitmproxy
nel "proxy intermedio, ma ho pensato che potrei impostare il mitm nel modo sbagliato scartando qualsiasi problema con i certificati SSL.
EDIT:
Quindi ho appena ripetuto la procedura di cui sopra ma sostituendo il contenitore "Markdown" con un semplice server HTTP Python, e ho ottenuto lo stesso comportamento. In particolare, l'ho eseguito nel contenitore [webserver]:
python -m SimpleHTTPServer 80
e I non ho log nello stdout HTTP Python (come se non fosse stata fatta nessuna richiesta), mentre in ettercap
(cioè
nel contenitore [intermedio] ottengo lo stesso risultato di cui sopra.