天天看點

解析Cookie欺騙實作過程及具體應變方法

BLOG/YESKY   

    正如我們所知道的,在網絡詞彙中,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 

<TITLE>Cookie Check</TITLE> 

<BODY BGCOLOR="WHITE"> 

<H2> 

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>") 

</H2> 

以上的便是一段讀取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) 

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

然後修改hosts.sam檔案如下: 

并儲存為hosts。 

編後 

cookie欺騙是一種發現較早,且較難使用的hack手法,除了java script 可以控制以外,asp等也可以用來對其進進設定。是以在此聲明,未必能對所有站點有較。但技術真實,無須置疑! 

  補充:在win2000中hosts檔案的建立與win98不同,需要c:\winnt\system32\drivers\etc檔案夾中建立!

本文轉自loveme2351CTO部落格,原文連結:http://blog.51cto.com/loveme23/8515 ,如需轉載請自行聯系原作者

下一篇: hack tools