現在很多網站都加了防注入系統代碼,你輸入注入語句將無法注入~~
感覺這樣的防注入系統不錯,但防注入系統沒有注意到 Cookies 的問題!所以就有了Cookies注入~~
我們來研究一下怎樣情況下才會有Cookies注入!
如果你學過ASP你應該會知道 Request.QueryString (GET) 或 Request.Form (POST)!
呵,沒錯,這就是我們用於讀取用戶發給WEB服務器的指定鍵中的值!
我們有時爲了簡化代碼,會寫成ID=Request("ID")這樣寫法是簡單了,但問題就來了~~~
我們先看WEB服務是怎樣讀取數據的,他是先取GET中的數據,沒有再取POST中的數據,還會去取Cookies中的數據(暈,書上沒有這麼說,這是和小高交流時才知道~~看來書說的不全~~)
我們再看看防注入系統,他會檢測GET和POST中的數據,如果有特殊字符(這裏當然是注入字符了)!
就禁止數據的提交! 但他沒有檢測Cookies的數據!問題就來了~~~
那我們怎樣測試是否有Cookies注入問題~
請先看下面的的連接(示例用,所以連接不是真的)
http://www.syue.com/1.asp?id=123
如果我們只輸 http://www.syue.com/1.asp
時,就不能看到正常的數據,因爲沒有參數!
我們想知道有沒有Cookies問題(也就是有沒有Request("XXX")格式問題),先用IE輸入
加載網頁,顯示不正常(沒有輸參數的原因)
之後在IE輸入框再輸入
javascript:alert(document.cookie="id="+escape("123"));
按回車,你會看到彈出一個對話框 內容是: id=123
之後,你刷新一個網頁,如果正常顯示,表示是用Request("ID") 這樣的格式收集數據~~~~,這種格式就可以試Cookies注入了
在輸入框中輸入
javascript:alert(document.cookie="id="+escape("123 and 3=3"));
刷新頁面,如果顯示正常,可以再試下一步(如果不正常,就有可能也有過濾了)
javascript:alert(document.cookie="id="+escape("123 and 3=4"));刷新一下頁面如果不正常顯示,這就表示有注入了~~~
如果程序員是用
Request.QueryString
或
Request.Form
收集數據的話,是無法利用Cookies繞過防注入系統進行注入的,因爲服務程序是直截從GET或POST中讀取數據的,Cookies是否有數據,WEB服務器是不理的,所以就無法利用了!~
爲了方便不懂的朋友瞭解
javascript:alert(document.cookie="id="+escape("123"));
的意思,我說明一下
document.cookie="id="+escape("123") 就是把 123 保存到Cookies 的 ID 中alert(xxx) 就是彈對話框