介紹
Cookies欺騙是通過盜取、修改、偽造Cookies的內容來欺騙Web系統,並得到相應許可權或者進行相應許可權操作的一種攻擊方式。
正如我們所知道的,在網路辭彙中,cookie是一個特殊的信息,雖然只是伺服器存於用戶計算機上的一個文本檔案,但由於其內容的不尋常性(與伺服器有一定的互交性,且常會存儲用戶名,甚至口令,或是其它一些敏感信息,例如在江湖或是一些社區中,常會用cookie來保存用戶集分,等級等等)。因而成為一些高手關注的對象,藉此來取得特殊許可權,甚至
攻克整個網站。
欺騙方法
所以要進行cookie欺騙可以有多種途徑:
1、跳過瀏覽器,直接對通訊數據改寫
2、修改瀏覽器,讓瀏覽器從本地可以讀寫任意域名cookie
3、使用簽名腳本,讓瀏覽器從本地可以讀寫任意域名cookie(有安全問題)
4、欺騙瀏覽器,讓瀏覽器獲得假的域名
其中:
方法1、2需要較專業的編程知識,對普通用戶不太合適。
方法3的實現有2種方法:
1、直接使用簽名腳本,不需要簽名驗證,但是產生很嚴重的安全問題,因為大家都要上網的,如果這樣做你的硬碟檔案就……
2、對腳本進行簽名後再使用簽名腳本,但是需要專用的數字簽名工具,對普通用戶也不合適。
方法4看樣子應該是最合適的了,域名欺騙很簡單,也不需要什麼工具(當然如果你的機器裝有web伺服器那更好了),下面我以the9為例,以這種方法為基礎,闡述一下cookie欺騙的過程(下文中提到的任何服務端的bug,the9都已經做了改進,所以本文對the9無安全方面的影響):
註:我們討論的cookie是那種不會在硬碟的cookie檔案里留下蹤跡的cookie,就是那種只在瀏覽器生存周期內(會話)產生的cookie,如果瀏覽器關閉(會話結束)那么這個cookie就被刪了!
COOKIE欺騙實戰
the9在登入的時候會返回3個cookie(這可把瀏覽器的警告cookie選項打開時看到):
cgl_random(隨即序列號):登入識別的記號
cgl_loginname(登入名):身份的識別記號
cgl_areaid(小區號):你居住的小區號碼
只要把cgl_loginname填入正確的登入名,再對cgl_random進行修改,就可以達到欺騙服務程式的目的。
一般欺騙php程式的字元串為:
1''or''1''=''1
把這個填入cgl_random,服務程式就被欺騙了!
因為服務程式不太可能對cookie進行語法檢查(the9現在改進了),那么把這個字元串填入,就可以成功的欺騙對方程式,而達到突破的目的了!
現在的問題是,如何使瀏覽器把這個我改過的cookie返回給the9?
看一看the9的域名吧:而瀏覽器的cookie警告已經告訴了我們這3個cookie會返回給有.the9.com這個域名的伺服器,哎?我的機器上正好有web伺服器,那么動手吧!
先編一個設定cookie的html,就叫cookie.htm吧,然後把這個cookie放進web目錄,這樣還不行,因為我的機器的域名沒設,那么設定host的名字,可是如果在網路設定中進行設定的話,機器要重啟動的,還是想想別的簡單的辦法吧!
然後我們應該編輯hosts檔案,這個檔案應該在windows目錄下,你有可能找不到它,但是如果你找到了hosts.sam檔案,那么把它後面的擴展名去掉,就是我們要的檔案了!
編輯hosts檔案,填入以下一行:
但是不是所有的網友都有自己的web伺服器啊!那怎么辦呢?
其實如果你有個人主頁的話,也可以達到cookie欺騙的目的,比如某個個人主頁的伺服器的
ip地址是1.2.3.4,先上傳cookie.htm檔案,再編輯hosts檔案:
為什麼要這樣呢?我等會會告訴大家的
繼續the9的cookie討論,還有2個cookie:
cgl_mainshowinfo(個人信息)
cgl_showinfo_changed(意義不知)
由於第二個cookie不知道是什麼,所以就討論第一個。
第一個cookie存放著你在the9的名字、稱號、居住的小區、街道、是否有工作、星級、門牌號等的信息(目前只知道這些,其餘的信息不知其意義,具體格式就讓給大家去分析了),但是中文都escape過了,如果你用的不是netscpae而是ie的話,不能用unescape得知其信息,因為ie對雙位元組採用unicode而不採用ascii,如果哪天the9也支持unicode就好了!:),但是其他網站站長注意了,你們可通過cgi的形式把這些the9居民信息抓過來實現數據共享!
哈哈……,如果你們真要這么做,就只有使用簽名腳本了,總不能讓別人編輯hosts吧(不過得注意著作權喔!)?
ie的cookie漏洞:
如果直接輸在瀏覽器地址欄里不行,就作個script,把location的值設為這個就可以了!
由於ie的bug,誤把前面那個的域名以為是.the9.com了!
hosts檔案解釋
hosts檔案實際上可以看成一個本機的dns系統,它可以負責把域名解釋成ip地址,它的優先權比dns伺服器要高,它的具體實現是TCP/IP協定中的一部分。
註:由於快取的作用,如果開著瀏覽器編輯hosts的話,hosts里的內容有可能不會當場生效,你可以重新啟動瀏覽器或等一會時間再試一下!
關於REFERER的欺騙(這個雖然不屬於cookie欺騙,但是懶得再寫一篇,就歸在一起了)
referer是http頭,它的作用是簽定用戶是從何處引用連線的,在the9,服務程式就充分利用了這一點,如過你是手動輸入url的話,那么referer不會設任何值,服務程式就返回什麼“投機取巧”的字樣!
如果你用了這個方法的話,那么你就不能直接點擊the9的連線,而得用工具中的地址欺騙來進行訪問,至於這樣做的好處,大家自己找找吧,我就不想詳細說了,太累了!
關於netvampire:
這個下載工具大家都知道吧?那么它的3.3版大家用過嗎?很棒的!因為它可以直接讓大家改變下載連線的referer,而且它還能繼承瀏覽器的cookie,把cookie返回給服務端(不過cookie不能改,如果能改的話,這個工具就太………………)
後記
好了關於cookie及referer就說到這了,在這個星期以前利用cookie欺騙的話the9的門戶可是大開的(當然似乎還有通用密碼什麼的),不過the9雖然改進了,我不能保證其他社區網也改進了,當然本文只是探討技術,不負什麼法律責任。
session和cookies不同點
session和cookies同樣都是針對單獨用戶的變數(或者說是對象好像更合適點),不同的用戶在訪問網站的時候 都會擁有各自的session或者cookies,不同用戶之間互不干擾。
他們的不同點是:
1,存儲位置不同
session在伺服器端產生,比較安全,但是如果session較多則會影響性能
cookies在客戶端產生,安全性稍弱
2,生命周期不同
session生命周期 在指定的時間(如20分鐘)到了之後會結束,不到指定的時間,也會隨著瀏覽器進程的結束而結束。
cookies默認情況下也隨著瀏覽器進程結束而結束,但如果手動指定時間,則不受瀏覽器進程結束的影響。
預防cookie欺騙
不要在公共場登入 自己重要的用戶名和密碼; 不用的時候,【關閉瀏覽器】,只點【退出】,還是會有安全隱患。
cookie加密, 加密雖然看不懂cookie,但根本就不需要知道cookie是什麼含義,請求的時候把【截取】到的cookie放入請求,則就可以繞過後台的判斷,獲取真實用戶的信息,所以單純加密無用。
cookie+ip等信息加密,可以抵擋大多數的惡意攻擊, 因為 雖然獲取到了 cookiie ,但是 惡意者的ip不和真實用戶的相同,則可以校驗出來,防止欺騙。
cookie + ip + 動態:請求正確一次,就清空一次,再重新賦值一個 唯一標示,那么 就算別人 竊取到了 cookie,只有在【用戶此次被獲取cookie的請求與下次請求之前的時間,那個cookie才會起到欺騙效果。配合 ip等客戶端的標示,可以避免 cookie欺騙】