解析Cookie欺騙實現過程及具體應用

 正如我們所知道的,在網絡詞彙中,cookie是一個特殊的信息,雖然只是服務器存於用戶計算機上的一個文本文件,但由於其內容的不尋常性(與服務器有一定的互交性,且常會存儲用戶名,甚至口令,或是其它一些敏感信息,例如在江湖或是一些社區中,常會用cookie來保存用戶集分,等級等等)。因而成爲一些高手關注的對像,藉此來取得特殊權限,甚至攻克整個網站。本人出些拙作,以java script中對cookie的應用,來說初步說明cookie欺騙的實現過程及具體應用。

   一、cookie的建立

   在講如何建立cookie之前,我們先來了解一下cookie的基本格式:

   cookiename+cookievalue;expire=expirationdategmt;path=urlpath;domain=sitedomain

   其中各項以;分開,首先是指定cookie的名稱,併爲其賦值。接下來分別是cookie的有效期,url路徑以及域名,在這幾項中,除了第一項以外,其它部分均爲可先項。

   下面我們來看一段代碼,瞭解一下cookie究竟是怎樣建立的:

   <HTML>
   <HEAD>
   <TITLE>Set a cookie based on a form</TITLE>
   <SCRIPT LANGUAGE="java script" TYPE="TEXT/java script">
   <!-- Hide script from older browsers
  
   expireDate = new Date
   expireDate.setMonth(expireDate.getMonth()+6)
  
   userName = ""
   if (documents .cookie != "") {
   userName = documents .cookie.split("=")[1]
   }
  
   function setCookie() {
   userName = document.myform.nameField.value
   documents .cookie = "userName="+userName+";expires=" + expireDate.toGMTString()
   }
  
   // End hiding script -->
   </SCRIPT>
   </HEAD>
   <BODY BGCOLOR="WHITE" onLoad="document.myform.nameField.value = userName">
   <form NAME="myform">
   <H1>Enter your name:<INPUT TYPE="TEXT" NAME="nameField" onBlur="setCookie()"></H1>
   </form>
   </BODY>
   </HTML>

   這是一段簡單的建立cookie的腳本。
1.

   <SCRIPT LANGUAGE="java script" TYPE="TEXT/java script">

   腳本開始的標記,由此一句告訴瀏覽器以下將是java script.

   2.

   <!-- Hide script from older browsers

   爲了防止瀏覽器不能識別腳本,而讓瀏覽器誤以爲是HTML註釋而忽略它。

   3.expireDate = new Date

   獲取當前日期,並存入變量expireDate中。

   4.expireDate.setMonth(expireDate.getMonth()+6)

   獲取當前月份值,將其加6後設置爲expireDate的月份總值部分。這意味着本cookie的有效期爲6個月。

   5.if (documents .cookie != "")

   如果document的值不爲空,相當於檢查用戶硬盤上是否已經有了cookie。

   6.userName = documents .cookie.split("=")[1]

   此處用到了split("=")函數,它的功能是把cookie記錄分割爲數組,cookie的名爲cookie[0],值爲cookie[1],以此累推。所以此處documents .cookie.split("=")[1]返回的值是此cookie的值。在此句中將值賦給了變量username。

   7.function setCookie()

   設置名爲setCookie的函數。

   8.documents .cookie = "userName="+userName+";expires=" + expireDate.toGMTString()

   此句是將設置好的cookie寫入用戶硬盤。expireDate.toGMTString()把expireDate中的值轉換爲文本字符串,這樣才能寫入cookie中。

   9.onLoad="document.myform.nameField.value = userName"

   當頁面載入時,把username的值寫入文本框(如果有的話)。

   10.onBlur="setCookie()"

   當用戶離開文本框時,onBlur調用函數setCookie。

   結合上面的註釋,讀那段代碼相信不成問題吧!既然我們可以建立cookie,那麼讀取也不是什麼難事,請接着往下看!

   二、讀取和顯示cookie

   一般來說,cookie的作者並不希望cookie被顯示出來,這是當然的!天知道里面寫了些什麼!?然而這也是我們想要讀出它的原因!~~~:D

   <HTML>
   <HEAD>
   <TITLE>Cookie Check</TITLE>
   </HEAD>
   <BODY BGCOLOR="WHITE">
   <H2>
   <SCRIPT LANGUAGE="java script" TYPE="TEXT/java script">
   <!-- Hide script from older browsers
  
   if (documents .cookie == "") {
   document.write("There are no cookies here")
   }
   else {
   thisCookie = documents .cookie.split("; ")
  
   for (i=0; i<thisCookie.length; i++) {
   document.write("Cookie name is ’"+thisCookie.split("=")[0])
   document.write("’, and the value is ’"+thisCookie.split("=")[1]+"’<BR>")
   }
   }
  
   // End hiding script -->
   </SCRIPT>
   </H2>
   </BODY>
   </HTML>

   以上的便是一段讀取cookie的名字和值的腳本。上文中解釋過的語句在此不多贅述,且看有什麼新的語法:

   1.thisCookie = documents .cookie.split("; ")[注意:並非前文中出現過的split("=")。

   split("; ")可以產生數組的結果,本句中,由documents .cookie.split("; ")來獲取cookie的值,並將這個數組賦值緞帶變量:thisCookie。

   2. for (i=0; i
   設置計算器變量i的值爲0,如果其值小於thisCookie.length(thisCookie中值的個數),將i的值加1。

   3.document.write("Cookie name is ’"+thisCookie.split("=")[0])

   此句中thisCookie.split("=")[0]較難理解,上面的腳本中,thiscookie已經被賦值爲一個數組的值,那麼thisCookie是指數組中第i個值,也就是第i個cookie,而由上文可知split("=")[0]是指cookie的名字。

   這樣thisCookie.split("=")[0]便是第i的cookie中cookie的名字!

   4. document.write("’, and the value is ’"+thisCookie.split("=")[1]

   跟3極爲相似,即是第i個cookie中 cookie的值。

   到此,我們已經熟悉瞭如何建立cookie以及它的讀取。這些也正是cookie欺騙也需要的主要技術!


三、cookie欺騙的實現

   要做到cookie欺騙,最重要的是理解目標cookie中的儲值情況,並設法改變它。由上面的學習我們知道,基於cookie的格式所限,一般來說,只有在Cookie.split("=")[0]和Cookie.split("=")[1]中的值對我們纔是有用的。也就是說只需改變這兩處或是處的值即可達到我們的目的。

   而在實際操作中,還得先解決另一個問題。由於受瀏覽器的內部cookie機制所限,每個cookie只能被它的原服務器所訪問!可我們總不能跑到人家服務器上操作吧!這裏就需要一個小技巧了。

   在上面我們提到過cookie的格式,最後兩項中分別是它的url路徑和域名。不難想到,服務器對cookie的識別靠的就是這個!

   而在平時,我們要瀏覽一個網站時,輸入的url便是它的域名,需要經過域名管理系統dns將其轉化爲IP地址後進行連接的。這其中就有一個空當。如果能在dns上做手腳,把目標域名的IP地址對應到其它站點上,我們便可以非法訪問目標站點的cookie了!

   做到這一點並不難,當然我不並不是要去操縱dns,而且那也是不可能的事情。在win9下的安裝目錄下,有一 名爲hosts.sam的文件,以文本方式打開後會看到這樣的格式:
   127.0.0.1 lockhost #註釋

   利用它,我們便可以實現域名解析的本地化!而且其優先權高於網絡中的dns!

   具體使用時,只需將IP和域名依上面的格式添加,並另存爲hosts即可!(注意:此文件無後贅名,並非hosts.sam 文件本身!)

   到此,cookie欺騙所需的所以知識已經齊備。下面以一個“假”的例子,演示一下如何進入實戰.(不便給出真實地址,以免引起犯罪!~~~:P)

   假設目標站點是 [url]www.xxx.com[/url]

   [url]www.self.com[/url]是自己的站點。(可以用來存放欺騙目標所需的文件,用來讀取和修改對方的cookie.)

   首先ping出[url]www.self.com[/url]的IP地址:

   ping [url]www.self.com[/url]

   Reply from 12.34.56.78: bytes=32 time=20ms TTL=244

   然後修改hosts.sam文件如下:

   12.34.56.78 [url]www.xxx.com[/url]

   並保存爲hosts。

   將用來讀取cookie的頁面傳至[url]www.self.com[/url](腳本如二所示)。

   此時連上[url]www.xxx.com[/url]。由於我們已經對hosts動過手腳,這時來到的並不是[url]www.xxx.com[/url],而是[url]www.self.com[/url]

   [url]www.xxx.com[/url]設在本地的cookie便可被讀出!~~:D

   然後根據具體情況修改一的腳本,用同樣的方法,向此cookie中寫入數據。修改完畢後,刪掉hosts文件,再重新進入[url]www.xxx.com[/url],此時已經大功告成,可享受你的hack成果了!~~~:)

   編後

   cookie欺騙是一種發現較早,且較難使用的hack手法,除了java script 可以控制以外,asp等也可以用來對其進進設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章