cookie欺騙必須要收集到密文,cookie是怎麼收集的呢?不允許上傳,不允許html,不允許flash,防止網頁帶毒,防止asp木馬。防止跨站漏洞攻擊。建議:強制不允許長時間儲存cookie。
是不是只要收集到cookie密文就可以進行cookie欺騙呢?是的,如果password存放在cookie中的話。
動網作這個為什麼?相比較而言降低很多,因為你只要再登陸,前面的cookie就失效,動網就是讓你這個失效。
以動網資料庫和註冊、登陸、登出為核心建立passport是可以信賴的。
李濤 2006-11-22
動網7.0sp2 cookie欺騙原理 (本文發於《黑客防線》雜誌)
似乎近年來asp指令碼的漏洞都來自動網,從sql注入到cookie欺騙,動網無一不首當其衝。樹大招風,無不為奇,但在嚴酷的磨練下,動網最新的版本似乎無懈可擊。但網上關於動網入侵的案例不少,總結起來,其實並非動網本身問題,而屬論壇配置或管理不當。
動網論壇目前最新版本sql注入似乎不太可能了,而md5加密的16位密碼如果設定比較合理的話,暴力破解也非其對手。
目前直接入侵動網無非找一些管理上的不當入侵,比如預設的管理員使用者名稱密碼,根據預設的資料庫路徑盜得資料庫等。當有了資料庫而無法暴力破解管理員密碼的話,cookie欺騙就能大展身手!
然而在多次cookie欺騙得手而要對動網下**時候,問題出現了,在cookie其中幾個值進行修改欺騙並不成功,仔細研究後發現,其中password欄位並非md5加密的密文(圖1),一般的md5密文均為數字加小寫字母或數字加大寫字母的形式,大寫字母和小寫字母放在一起,一定是利用了另外的演算法處理了密碼。 圖1
開啟動網的源**,從index.asp檔案中跟蹤到inc/dv_clsmain.asp,發現這樣幾個函式: 引用
if checkstr(trim(request.cookies(forum_sn)("password")))=truepassword then
execute("update [dv_user] set truepassword='"&truepassword&"' where userid="&userid)
memberword = truepassword
dim iuserinfo
iuserinfo = session(cachename & "userid")
iuserinfo(35) = truepassword
session(cachename & "userid") = iuserinfo
end if 第一句校驗如果使用者cookie中的password字段值等於資料庫中truepassword的值,等會,truepassword,這是什麼意思?開啟動網的資料庫,果然在dv-user欄位中發現userpassword和truepassword兩個字段,那這個truepassword是做什麼用的呢?
繼續跟蹤這個函式: 引用
public sub newpassword0()
if userid=0 then exit sub
if not response.isclientconnected then
exit sub
end if
dim truepassword,usercookies
usercookies=request.cookies(dvbbs.forum_sn)("usercookies")
truepassword=createpass
if (isnull(usercookies) or usercookies="") and not isnumeric(usercookies) then usercookies=0
select case cint(usercookies)
case 0
response.cookies(forum_sn)("usercookies") = usercookies
case 1
response.cookies(forum_sn).expires=date+1
response.cookies(forum_sn)("usercookies") = usercookies
case 2
response.cookies(forum_sn).expires=date+31
response.cookies(forum_sn)("usercookies") = usercookies
case 3
response.cookies(forum_sn).expires=date+365
response.cookies(forum_sn)("usercookies") = usercookies
end select
response.cookies(forum_sn).path=cookiepath
response.cookies(forum_sn)("username") = membername
response.cookies(forum_sn)("userid") = userid
response.cookies(forum_sn)("userclass") = checkstr(request.cookies(forum_sn)("userclass"))
response.cookies(forum_sn)("userhidden") = userhidden
response.cookies(forum_sn)("password") = truepassword
'檢查寫入是否成功如果成功則更新資料
if checkstr(trim(request.cookies(forum_sn)("password")))=truepassword then
execute("update [dv_user] set truepassword='"&truepassword&"' where userid="&userid)
memberword = truepassword
dim iuserinfo
iuserinfo = session(cachename & "userid")
iuserinfo(35) = truepassword
session(cachename & "userid") = iuserinfo
end if
end sub 可以看出,論壇在對使用者的cookie進行校驗的時候,其中的密碼項是用乙個truepassword進行對照的,而在這個函式中,truepassword定義後賦值的時候給的是這個值:truepassword=createpass,檢視createpass函式, 引用
public function createpass()
dim ran,i,lengthnum
lengthnum=16
createpass=""
for i=1 to lengthnum
randomize
ran = cint(rnd * 2)
randomize
if ran = 0 then
ran = cint(rnd * 25) + 97
createpass =createpass& ucase(chr(ran))
elseif ran = 1 then
ran = cint(rnd * 9)
createpass = createpass & ran
elseif ran = 2 then
ran = cint(rnd * 25) + 97
createpass =createpass& chr(ran)
end if
next
end function 這是乙個系統分配隨機密碼的函式,通過跟蹤下邊這個函式: public sub newpassword()
if userid=0 then exit sub
response.write ""
end sub 可以得出結論:動網在使用者開啟頁面的時候,通過cookie檢查使用者的資訊,然後進行密碼校驗的時候並不是通過使用者的真實password,而是通過乙個truepassword進行驗證,如果驗證通過,則重新分配乙個隨機密碼createpass,重新整理資料庫中truepassword的值為createpass,然後使用者登陸資訊寫入伺服器端session;當cookie校驗不能通過的時候,顯示登陸錯誤資訊,呼叫登陸頁面,提示使用者登陸,當使用者輸入正確的使用者名稱密碼的時候(這次的驗證在login.asp頁面中的dvbbs_chklogin函式中),使用者正確登陸,系統仍然分配乙個隨機的密碼儲存在truepassword欄位中,供下次登陸校驗用。
可以看出,動網論壇在防止cookie欺騙上確實下了一番工夫,是不是這樣就不能進行欺騙了呢?不是:當你要進行對動網的欺騙的時候,只要把cookie中password中的值替換成資料庫中truepassword的值就可以,但要注意:從你盜得資料庫到你進行欺騙的中間,你要使用的帳戶不能再登陸,否則資料庫中的truepassword值又會更新,那你那時候肯定是欺騙不成功的!
可以看出,動網論壇在各個地方考慮都是很周到的,雖然cookie驗證的**增加了好多,但為了安全性的提高降低了程式的效率,也是有必要的,這樣一來,動網的安全性才能在磨練中不斷提公升!
通過這次分析,初學者應該學會對程式的跟蹤和分析,其實也是每個學程式設計的必須掌握的知識。在碰到這類問題的時候,拿出程式的**仔細分析,你肯定會有新的發現,可能下乙個首發漏洞的發現者就是你!
動網三部曲(一)dvbbs7 0sp2前台提權
可是最近還是有很多朋友問我怎麼操作。為了避免麻煩。我把我知道的都寫出來 以後大家不要在qq裡問我了。先說一下關於dvbbs7.0sp2的前台提權方法。工具 http 61.232.173.243 83 soft xiumu dvbb70ssp2.exe 1 先開啟需要測試的論壇,版本號必須是dvbb...
Access ,Oracle , 動網論壇v7 0
新人新氣象,流水一篇.最近應主管的要求,要把動網論壇放到內部網站上來,並且要把for access 改成 for oracle.我原來到是沒接觸過oracle,但是一想,無非就是修改一下sql而已,也沒甚麼太難得.結果一改,問題來了,oracle的中沒有自增id這個概念,只能用sequences 或...
動網論壇7 1sp1,部落格存在安全漏洞及解決
我們在boke.asp檔案後邊的引數加入 如 boke.asp?lantian.index.html 加個 變成boke.asp?lantian.index.html,發現報錯。這一下為sql注入開了方便之門。分析boke.asp等檔案得知,讀取查詢引數的語句在boke cls main.asp中,...