通常我們的開發人員在開發過程中會特別注意到防止惡意用戶進行惡意的注入操作,因此會對傳入的參數進行適當的過濾,但是很多時候,由於個人對安全技術了解的不同,有些開發人員只會對get,post這種方式提交的數據進行參數過濾。
但我們知道,很多時候,提交數據並非僅僅只有get\post這兩種方式,還有一種經常被用到的方式:request("xxx"),即request方法
通過這種方法一樣可以從用戶提交的參數中獲取參數值,這就造成了cookie注入的最基本條件:使用了request方法,但是注入保護程序中只對get\post方法提交的數據進行了過濾。
【檢測方法】:(本方法適用於asp程序,但對於jsp\php等語言來說,原理同樣適用,稍稍貼合相應語言特性進行修改即可)
1、首先找到傳參地址:
asp?id=xxx(例如:http://www.example.com/news.asp?id=1)
2、去掉參數,訪問該url
http://www.example.com/news.asp?
如果頁面訪問不正常,則說明該參數id是訪問頁面所必需的的參數,可以嘗試繼續注入。
3、記錄並清空當前瀏覽器地址欄中的地址,在其中輸入
javascript:alert(document.cookie="id="+escape("xxx")); //這里的xxx就是上一步中id=xxx中的參數值
4、再瀏覽器地址欄中輸入原來的url地址(注意,這里輸入的是不帶參數值的url,如下):
http://www.example.com/news.asp?
按下回車,訪問該url,如果發現頁面正常顯示了,到此可以證明,我們正在接受的頁面存在request方法獲取參數,可能存在cookie注入的風險
【利用方法】:手工檢測到可能存在cookie注入時,我們就可以通過常規注入方法來進行注入了
1、清空地址欄,輸入我們的寫cookie代碼:
javascript:alert(document.cookie="id="+escape("xxx and 1=1"));
2、使用無參數的url地址訪問
http://www.example.com/news.asp?
如果頁面正常,我們就可以進行下一步檢測。如果這是頁面不正常,說明站點管理員已經部署了響應的防御策略,就需要找其他方法注入
3、清空地址,同樣的方法寫入新的cookie
javascript:alert(document.cookie="id="+escape("xxx and 1=2"));
如果上一次頁面正常,這次頁面不正常,那么說明存在cookie注入漏洞,可以通過常規方法注入即可,只是cookie注入相對比較麻煩,需要每一次都在瀏覽器中執行寫cookie代碼
javascript:alert(document.cookie="id="+escape("xxx 注入語句"));
然后訪問不帶參數的url地址
http://www.example.com/news.asp?
根據頁面提示進行注入即可