Pentesting VoIP
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
从黑客的角度看待您的网络应用、网络和云
发现并报告具有实际商业影响的关键可利用漏洞。 使用我们 20 多个自定义工具来映射攻击面,查找让您提升权限的安全问题,并使用自动化漏洞收集重要证据,将您的辛勤工作转化为有说服力的报告。
要开始了解 VoIP 的工作原理,请查看:
1xx—临时响应
2xx—成功响应
3xx—重定向响应
4xx—客户端失败响应
5xx—服务器故障响应
6xx—全局失败响应
红队可以采取的第一步是使用OSINT工具、谷歌搜索或抓取网页来搜索可用的电话号码以联系公司。
一旦你有了电话号码,你可以使用在线服务来识别运营商:
知道运营商是否提供VoIP服务,你可以确定公司是否在使用VoIP……此外,公司可能没有雇佣VoIP服务,而是使用PSTN卡将自己的VoIP PBX连接到传统电话网络。
诸如自动音乐响应等情况通常表明正在使用VoIP。
任何其他有助于识别所使用的 VoIP 软件的 OSINT 枚举对红队都是有帮助的。
nmap
能够扫描 UDP 服务,但由于扫描的 UDP 服务数量较多,它的速度非常慢,并且在这类服务上可能不太准确。
svmap
来自 SIPVicious (sudo apt install sipvicious
): 将在指定网络中定位 SIP 服务。
svmap
容易被阻止,因为它使用了 User-Agent friendly-scanner
,但你可以修改 /usr/share/sipvicious/sipvicious
中的代码并进行更改。
SIPPTS scan
from sippts: SIPPTS扫描是一个非常快速的SIP服务扫描器,支持UDP、TCP或TLS。它使用多线程,可以扫描大范围的网络。它允许轻松指示端口范围,扫描TCP和UDP,使用其他方法(默认情况下将使用OPTIONS)并指定不同的User-Agent(等等)。
metasploit:
PBX 还可能暴露其他网络服务,例如:
69/UDP (TFTP): 固件更新
80 (HTTP) / 443 (HTTPS): 从网页管理设备
389 (LDAP): 存储用户信息的替代方案
3306 (MySQL): MySQL 数据库
5038 (Manager): 允许从其他平台使用 Asterisk
5222 (XMPP): 使用 Jabber 发送消息
5432 (PostgreSQL): PostgreSQL 数据库
以及其他...
可以使用 SIPPTS enumerate
从 sippts 找到 可用的方法。
分析服务器返回给我们的头部信息非常重要,这取决于我们发送的消息和头部类型。使用来自 sippts 的 SIPPTS send
,我们可以发送个性化消息,操纵所有头部,并分析响应。
如果服务器使用 websockets,获取数据也是可能的。通过 sippts 中的 SIPPTS wssend
,我们可以发送个性化的 WS 消息。
在PBX(私人分支交换机)系统中,扩展指的是分配给组织或企业内各个电话线路、设备或用户的唯一内部标识符。扩展使得在组织内部高效路由电话成为可能,无需为每个用户或设备提供单独的外部电话号码。
svwar
来自SIPVicious(sudo apt install sipvicious
):svwar
是一个免费的SIP PBX扩展线路扫描器。在概念上,它的工作方式类似于传统的拨号器,通过猜测一系列扩展或给定的扩展列表。
SIPPTS exten
来自 sippts: SIPPTS exten 用于识别 SIP 服务器上的扩展。Sipexten 可以检查大范围的网络和端口。
metasploit: 你也可以使用 metasploit 枚举扩展/用户名:
enumiax
(apt install enumiax
): enumIAX 是一个 Inter Asterisk Exchange 协议 用户名暴力破解枚举器。enumIAX 可以在两种不同模式下操作:顺序用户名猜测或字典攻击。
在发现了 PBX 和一些 分机/用户名 后,红队可以尝试通过 REGISTER
方法对分机进行身份验证,使用常见密码的字典进行暴力破解。
请注意,用户名 可以与分机相同,但这种做法可能会因 PBX 系统、其配置和组织的偏好而有所不同...
如果用户名与分机不同,您需要 找出用户名以进行暴力破解。
svcrack
来自 SIPVicious (sudo apt install sipvicious
):SVCrack 允许您破解 PBX 上特定用户名/分机的密码。
SIPPTS rcrack
来自 sippts: SIPPTS rcrack 是一个用于 SIP 服务的远程密码破解工具。Rcrack 可以在不同的 IP 和端口范围内测试多个用户的密码。
Metasploit:
如果你在开放Wifi网络中发现VoIP设备,你可以嗅探所有信息。此外,如果你在一个更封闭的网络中(通过以太网连接或受保护的Wifi),你可以在PBX和网关之间执行MitM攻击,例如 ARPspoofing以嗅探信息。
在网络信息中,你可能会找到管理设备的网页凭据、用户分机、用户名、IP地址,甚至哈希密码和RTP数据包,你可以重放这些数据包以听到对话,等等。
要获取这些信息,你可以使用工具如Wireshark、tcpdump...但一个专门创建的嗅探VoIP对话的工具是 ucsniff。
请注意,如果SIP通信中使用了TLS,你将无法看到明文的SIP通信。 如果使用SRTP和ZRTP,RTP数据包将不会是明文。
查看这个例子以更好地理解SIP REGISTER通信,以了解凭据是如何发送的。
sipdump
和sipcrack
,是sipcrack的一部分(apt-get install sipcrack
):这些工具可以从pcap中提取SIP协议中的摘要认证并进行暴力破解。
SIPPTS dump
来自 sippts: SIPPTS dump 可以从 pcap 文件中提取摘要认证。
SIPPTS dcrack
from sippts: SIPPTS dcrack 是一个用于破解通过 SIPPTS dump 获得的摘要认证的工具。
SIPPTS tshark
来自 sippts: SIPPTS tshark 从 PCAP 文件中提取 SIP 协议的数据。
不仅可以在网络流量中找到 SIP 凭据,还可以找到用于访问 语音邮件 的 DTMF 代码。 这些代码可以在 INFO SIP 消息、音频 或 RTP 数据包 中发送。如果代码在 RTP 数据包中,您可以剪切对话的那部分并使用工具 multimo 提取它们:
在 Asterisk 中,可以允许来自 特定 IP 地址 的连接或来自 任何 IP 地址 的连接:
如果指定了IP地址,主机将不需要每隔一段时间发送REGISTER请求(在REGISTER数据包中发送的生存时间通常为30分钟,这意味着在其他情况下,电话将需要每30分钟REGISTER一次)。然而,它需要开放端口以允许VoIP服务器进行通话。
要定义用户,可以定义为:
type=user
:用户只能作为用户接听电话。
type=friend
:可以作为对等方拨打电话并作为用户接听(与扩展一起使用)
type=peer
:可以作为对等方发送和接收电话(SIP-trunks)
还可以通过不安全变量建立信任:
insecure=port
:允许通过IP验证的对等连接。
insecure=invite
:不需要对INVITE消息进行身份验证
insecure=port,invite
:两者都可以
当使用**type=friend
时,host变量的值将不被使用**,因此如果管理员错误配置SIP-trunk使用该值,任何人都将能够连接到它。
例如,这种配置将是脆弱的:
host=10.10.10.10
insecure=port,invite
type=friend
在Asterisk中,上下文是拨号计划中一个命名的容器或部分,将相关的扩展、操作和规则组合在一起。拨号计划是Asterisk系统的核心组件,因为它定义了如何处理和路由来电和去电。上下文用于组织拨号计划、管理访问控制,并提供系统不同部分之间的分离。
每个上下文在配置文件中定义,通常在**extensions.conf
**文件中。上下文用方括号表示,上下文名称包含在其中。例如:
在上下文中,您定义扩展(拨打号码的模式)并将其与一系列操作或应用程序关联。这些操作决定了电话的处理方式。例如:
这个示例演示了一个简单的上下文,称为 "my_context",扩展为 "100"。当有人拨打 100 时,电话将被接听,播放欢迎消息,然后电话将被终止。
这是 另一个上下文,允许 拨打任何其他号码:
如果管理员将 默认上下文 定义为:
任何人都可以使用 服务器拨打任何其他号码(服务器的管理员将为通话付费)。
此外,默认情况下 sip.conf
文件包含 allowguest=true
,因此 任何 攻击者在 没有认证 的情况下都能够拨打任何其他号码。
SIPPTS invite
来自 sippts: SIPPTS invite 检查 PBX 服务器是否允许我们在没有认证的情况下拨打电话。如果 SIP 服务器配置不正确,它将允许我们拨打外部号码。它还可以允许我们将通话转移到第二个外部号码。
例如,如果您的 Asterisk 服务器有不良的上下文配置,您可以在没有授权的情况下接受 INVITE 请求。在这种情况下,攻击者可以在不知道任何用户/密码的情况下拨打电话。
IVRS 代表 交互式语音响应系统,是一种电话技术,允许用户通过语音或按键输入与计算机系统进行交互。IVRS 用于构建 自动呼叫处理 系统,提供一系列功能,例如提供信息、路由电话和捕获用户输入。
VoIP 系统中的 IVRS 通常包括:
语音提示:引导用户通过 IVR 菜单选项和说明的预录音频消息。
DTMF(双音多频)信号:通过按下电话上的按键生成的触摸音输入,用于在 IVR 菜单中导航和提供输入。
呼叫路由:根据用户输入将电话直接转接到适当的目的地,例如特定部门、代理或分机。
用户输入捕获:收集来电者的信息,例如账户号码、案件 ID 或任何其他相关数据。
与外部系统的集成:将 IVR 系统连接到数据库或其他软件系统,以访问或更新信息、执行操作或触发事件。
在 Asterisk VoIP 系统中,您可以使用拨号计划(extensions.conf
文件)和各种应用程序(如 Background()
、Playback()
、Read()
等)创建 IVR。这些应用程序帮助您播放语音提示、捕获用户输入并控制呼叫流程。
之前的例子中,用户被要求按1拨打一个部门,按2拨打另一个部门,或者如果他知道完整的分机号,则输入完整的分机号。 漏洞在于所指示的分机长度没有被检查,因此用户可以输入5秒超时的完整号码并进行拨打。
使用如下分机:
当 ${EXTEN}
是将被拨打的 分机 时,当 ext 101 被引入 时,将会发生以下情况:
然而,如果 ${EXTEN}
允许输入 超过数字(如在旧版 Asterisk 中),攻击者可以输入 101&SIP123123123
来拨打电话号码 123123123。这将是结果:
因此,对分机 101
和 123123123
的呼叫将被发送,只有第一个接到电话的分机会建立连接……但是如果攻击者使用一个 绕过任何匹配 的分机,该分机并不存在,他可以 仅向所需号码注入一个呼叫。
SIP Digest Leak 是一个影响大量 SIP 电话的漏洞,包括硬件和软件 IP 电话以及电话适配器(VoIP 转模拟)。该漏洞允许 泄露 Digest 认证响应,该响应是根据密码计算的。然后可以进行 离线密码攻击,并根据挑战响应恢复大多数密码。
**漏洞场景来自这里**:
一部 IP 电话(受害者)在任何端口上监听(例如:5060),接受电话呼叫
攻击者向 IP 电话发送 INVITE
受害者电话开始响铃,有人接听并挂断(因为另一端没有人接电话)
当电话挂断时,受害者电话向攻击者发送 BYE
攻击者发出 407 响应,请求认证并发出认证挑战
受害者电话在第二个 BYE 中提供对认证挑战的响应
攻击者可以在他的本地机器上(或分布式网络等)对挑战响应进行暴力破解攻击并猜测密码
SIPPTS 漏洞来自 sippts: SIPPTS 漏洞利用了影响大量 SIP 电话的 SIP Digest Leak 漏洞。输出可以以 SipCrack 格式保存,以便使用 SIPPTS dcrack 或 SipCrack 工具进行暴力破解。
Click2Call 允许一个 网络用户(例如可能对某个产品感兴趣) 提供 他的 电话号码 以接收电话。然后会拨打一个商业电话,当他 接听电话 时,用户将 被呼叫并与代理连接。
一个常见的 Asterisk 配置文件是:
之前的配置允许 任何 IP 地址连接(如果已知密码)。
要 组织一个电话,如前所述,不需要读取权限,只需要 在 写入 中 发起。
拥有这些权限的任何知道密码的 IP 都可以连接并提取过多信息,例如:
可以请求更多信息或操作。
在 Asterisk 中,可以使用命令 ChanSpy
指定要监控的 分机(或所有分机)来听取正在进行的对话。此命令需要分配给一个分机。
例如,exten => 333,1,ChanSpy('all',qb)
表示如果您 拨打 分机 333,它将 监控 all
分机,开始监听 每当新的对话开始时 (b
) 以静音模式 (q
) 进行,因为我们不想参与其中。您可以通过按 *
或标记分机号码在进行中的对话之间切换。
也可以使用 ExtenSpy
仅监控一个分机。
除了监听对话外,还可以使用分机将其 录制到文件中,例如:
通话将保存在 /tmp
。
您甚至可以让 Asterisk 执行一个在通话结束时泄露通话的脚本。
RTCPBleed 是一个影响基于 Asterisk 的 VoIP 服务器的重大安全问题(发布于 2017 年)。该漏洞允许 RTP(实时传输协议)流量,即承载 VoIP 通话的流量,被 互联网上的任何人拦截和重定向。这是因为 RTP 流量在通过 NAT(网络地址转换)防火墙时绕过了身份验证。
RTP 代理尝试通过在两个或多个参与者之间代理 RTP 流来解决影响 RTC 系统的 NAT 限制。当 NAT 存在时,RTP 代理软件通常无法依赖通过信令(例如 SIP)获取的 RTP IP 和端口信息。因此,一些 RTP 代理实现了一种机制,使得这种 IP 和端口元组能够自动学习。这通常是通过检查传入的 RTP 流量并将任何传入 RTP 流量的源 IP 和端口标记为应响应的来完成的。这种机制,可能被称为“学习模式”,不使用任何形式的身份验证。因此,攻击者 可以 向 RTP 代理发送 RTP 流量,并接收原本应发送给正在进行的 RTP 流的呼叫者或被叫者的代理 RTP 流量。我们称这种漏洞为 RTP Bleed,因为它允许攻击者接收原本应发送给合法用户的 RTP 媒体流。
RTP 代理和 RTP 堆栈的另一个有趣行为是,有时 即使不易受 RTP Bleed 漏洞影响,它们仍会 接受、转发和/或处理来自任何源的 RTP 数据包。因此,攻击者可以发送 RTP 数据包,这可能允许他们注入自己的媒体,而不是合法的媒体。我们称这种攻击为 RTP 注入,因为它允许将不合法的 RTP 数据包注入到现有的 RTP 流中。此漏洞可能在 RTP 代理和端点中发现。
Asterisk 和 FreePBX 传统上使用 NAT=yes
设置,这使得 RTP 流量能够绕过身份验证,可能导致通话中没有音频或单向音频。
有关更多信息,请查看 https://www.rtpbleed.com/
SIPPTS rtpbleed
来自 sippts: SIPPTS rtpbleed 通过发送 RTP 流来检测 RTP Bleed 漏洞。
SIPPTS rtcpbleed
来自 sippts: SIPPTS rtcpbleed 通过发送 RTCP 流来检测 RTP Bleed 漏洞。
SIPPTS rtpbleedflood
来自 sippts: SIPPTS rtpbleedflood 利用 RTP Bleed 漏洞发送 RTP 流。
SIPPTS rtpbleedinject
来自 sippts: SIPPTS rtpbleedinject 利用 RTP Bleed 漏洞注入音频文件(WAV 格式)。
在 Asterisk 中,如果你以某种方式能够 添加扩展规则并重新加载它们(例如,通过攻陷一个易受攻击的网络管理服务器),则可以使用 System
命令获得 RCE。
There is command called Shell
that could be used instead of System
to execute system commands if necessary.
如果服务器不允许在System
命令中使用某些字符(如在Elastix中),请检查Web服务器是否允许以某种方式在系统内部创建文件(如在Elastix或trixbox中),并利用它创建一个后门脚本,然后使用**System
来执行该脚本**。
sip.conf
-> 包含SIP用户的密码。
如果Asterisk服务器以root身份运行,您可能会危及root权限。
mysql root用户可能没有任何密码。
这可以用来创建一个新的mysql用户作为后门。
FreePBX
amportal.conf
-> 包含Web面板管理员(FreePBX)的密码。
FreePBX.conf
-> 包含用于访问数据库的用户FreePBXuser的密码。
这可以用来创建一个新的mysql用户作为后门。
Elastix
Elastix.conf
-> 包含多个明文密码,如mysql root密码、IMAPd密码、Web管理员密码。
多个文件夹将属于被攻陷的asterisk用户(如果不是以root身份运行)。该用户可以读取之前的文件并控制配置,因此他可以使Asterisk在执行时加载其他后门二进制文件。
可以使用工具如**rtpinsertsound
(sudo apt install rtpinsertsound
)和rtpmixsound
(sudo apt install rtpmixsound
)在对话中插入.wav
**文件。
或者您可以使用来自http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/的脚本来扫描对话(rtpscan.pl
)、向对话发送**.wav
(rtpsend.pl
)并在对话中插入噪音**(rtpflood.pl
)。
有几种方法可以尝试在VoIP服务器上实现DoS。
**SIPPTS flood
来自sippts:SIPPTS洪水向目标发送无限消息。
sippts flood -i 10.10.0.10 -m invite -v
**SIPPTS ping
来自sippts:SIPPTS ping进行SIP ping以查看服务器响应时间。
sippts ping -i 10.10.0.10
IAXFlooder: DoS IAX协议用于Asterisk。
inviteflood: 一种在UDP/IP上执行SIP/SDP INVITE消息洪水的工具。
rtpflood: 发送多个格式良好的RTP数据包。需要知道正在使用的RTP端口(先嗅探)。
SIPp: 允许分析和生成SIP流量,因此也可以用于DoS。
SIPsak: SIP瑞士军刀。也可以用于执行SIP攻击。
Fuzzers: protos-sip, voiper.
安装像Asterisk这样的软件最简单的方法是下载一个已经安装了它的操作系统发行版,例如:FreePBX、Elastix、Trixbox... 这些的一个问题是,一旦它工作,系统管理员可能不会再更新它们,而漏洞会随着时间的推移被发现。
从黑客的角度看待您的Web应用程序、网络和云
查找并报告具有实际业务影响的关键可利用漏洞。 使用我们20多个自定义工具来映射攻击面,发现让您提升权限的安全问题,并使用自动化漏洞利用收集重要证据,将您的辛勤工作转化为有说服力的报告。
学习和实践AWS黑客攻击:HackTricks Training AWS Red Team Expert (ARTE) 学习和实践GCP黑客攻击:HackTricks Training GCP Red Team Expert (GRTE)