欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PJBlog安全性分析

 更新時間:2006年09月27日 00:00:00   作者:  

PJBlog2是PuterJam開發(fā)的一款免費的ASP + Access的個人blog系統(tǒng),這幾天偶想弄個blog來玩玩,經(jīng)過比較選中了功能、界面都相對較好的PJBlog2。經(jīng)過試用,感覺這blog還不錯,也發(fā)現(xiàn)幾個安全方面的小問題,就把我的一點點見解發(fā)出來。我分析的版本是05年12月11日發(fā)布的PJBlog2 v2.4.1211版本。

一、 密碼加密算法
PJBlog2沒有采用常用的MD5算法對用戶密碼加密,而是使用的SHA1算法。SHA1算法跟MD5類似,也是單向散列函數(shù),不過它對任意長度的數(shù)據(jù)進行處理輸出160位的數(shù)值。
PJBlog2在創(chuàng)建新用戶的時候會隨機生成一個6位的字符串Salt,用戶的明文密碼加上這個Salt值再進行hash才得到加密后的密碼。即:Password = SHA1(user_pwd & Salt)。這樣子做的好處是即使兩個一樣的密碼hash后的結(jié)果也完全不同。這個稍微“另類”的算法給破解密碼帶來了點難度。
呵呵,有難度不等于不能破解,網(wǎng)上沒有現(xiàn)成的程序,需要自己動手寫個才是。因為.NET提供了SHA1的類所以最初用VB.Net寫的,由于狂耗資源的問題一直解決不了,只好換C了。用C實現(xiàn)SHA1的源代碼我找了好久才在一個老外的站找到,還不錯,呵呵,有興趣的可以看下老外的SHA1類:http://www.codeproject.com/cpp/csha1.asp
程序可以在這里( http://www.0x54.org/lake2/program/PJBlogCracker.exe )下載,是命令行下的,功能比較弱,單線程速度超級慢,可能還有bug,諸多問題以后再改咯。

二、 登陸認證
PJBlog2的認證方式是用的Cookies加IP。當用戶登陸成功,系統(tǒng)隨機產(chǎn)生一個Hashkey寫入Cookies并記錄到數(shù)據(jù)庫中,然后通過Cookies里的Hashkey、Username還有IP來判斷用戶。Cookies好辦,可以用跨站、下數(shù)據(jù)庫等方式拿,可以這IP就難辦了,看來進行Cookies欺騙的可能性很小啊。呵呵,那就不看這個咯。

三、 幾個地方過濾不嚴
第一個就是統(tǒng)計訪問的referer過濾不嚴??矗?
 

復(fù)制代碼 代碼如下:

       Guest_Refer=Trim(Request.ServerVariables("HTTP_REFERER"))
         Conn.ExeCute("INSERT INTO blog_Counter(coun_IP,coun_OS,coun_Browser,coun_Referer) VALUES ('"&Guest_IP&"','"&Guest_Browser(1)&"','"&Guest_Browser(0)&"','"&CheckStr(Guest_Refer)&"')")
 


呵呵,只是把referer過濾后用CheckStr檢查之,看CheckStr代碼:
 
復(fù)制代碼 代碼如下:

'*************************************
'過濾特殊字符
'*************************************
Function CheckStr(byVal ChkStr) 
         Dim Str:Str=ChkStr
         Str=Trim(Str)
         If IsNull(Str) Then
                   CheckStr = ""
                   Exit Function 
         End If
    Str = Replace(Str, "&", "&")
    Str = Replace(Str,"'","'")
    Str = Replace(Str,"""",""")
         Dim re
         Set re=new RegExp
         re.IgnoreCase =True
         re.Global=True
         re.Pattern="(w)(here)"
    Str = re.replace(Str,"$1here")
         re.Pattern="(s)(elect)"
    Str = re.replace(Str,"$1elect")
         re.Pattern="(i)(nsert)"
    Str = re.replace(Str,"$1nsert")
         re.Pattern="(c)(reate)"
    Str = re.replace(Str,"$1reate")
         re.Pattern="(d)(rop)"
    Str = re.replace(Str,"$1rop")
         re.Pattern="(a)(lter)"
    Str = re.replace(Str,"$1lter")
         re.Pattern="(d)(elete)"
    Str = re.replace(Str,"$1elete")
         re.Pattern="(u)(pdate)"
    Str = re.replace(Str,"$1pdate")
         re.Pattern="(\s)(or)"
    Str = re.replace(Str,"$1or")
         Set re=Nothing
         CheckStr=Str
End Function
 


過濾了單引號、雙引號、連接符等,不過最重要的“<”和“>”卻沒有過濾。呵呵,跨站腳本攻擊又有用武之地了。注意只顯示前面40個字符在頁面,要好好構(gòu)造哦。
第二就是游客評論輸入用戶名也是用的CheckStr過濾,用戶名數(shù)據(jù)庫有限制,24個字符,這里構(gòu)造CSS就更有難度了,不過可以有別的用處,具體的嘛,呵呵,后文詳述。
有些blog主人禁止了游客評論,所以就只好注冊后再評論了,但是注冊后評論的名字文本框被設(shè)成了注冊名而且只讀,怎么辦?呵呵,沒關(guān)系,可以外部提交數(shù)據(jù)的。
再一個就是blog的留言板插件,還是用戶名沒過濾好,這個更難利用,只有20個字符哦。

四、 數(shù)據(jù)庫的問題
PJBlog2的默認數(shù)據(jù)庫名為pblog.asp,雖然數(shù)據(jù)庫里面有個貌似防下載的blog_Notdownload表,呵呵,訪問數(shù)據(jù)庫試試,可以下載的哦。
既然可以下載,當然可以插入asp代碼運行咯。有些地方(比如游客評論內(nèi)容)插入asp代碼會被扯開,不知道原因,郁悶。
經(jīng)測試評論的姓名里是可以插ASP代碼的。前面說了這里過濾不嚴,這樣插入數(shù)據(jù)庫的asp不會被顯示出來的,看到的只是個沒名字的家伙在唧唧歪歪,呵呵。這個可要好好構(gòu)造哦,24個字符而且"被過濾了,想了一下,正好找到一個最短的,恰好24個字符:<%eval request(chr(9))%>
留言版的內(nèi)容也可以插入asp代碼,不過管理員看留言時看得到的哦。
呵呵,當然大多數(shù)站長應(yīng)該都是改了數(shù)據(jù)庫名稱的,但是測試時還是發(fā)現(xiàn)少數(shù)人不改……

五、 上傳文件
出于安全的考慮,PJBlog2限制了上傳文件類型,包括asp、asa、aspx、cer、cdx、htr。其實現(xiàn)在很多虛擬主機不僅支持asp,還會支持aspx、php、perl的,而且也可以上傳shtml等格式,所以如果既然要限制最好是把所有服務(wù)器執(zhí)行文件的類型一起限制才是。
上傳文件這里還有點問題,看attachment.asp里的代碼:
 
復(fù)制代碼 代碼如下:

Dim F_File,F_Type
Set F_File=FileUP.File("File")
F_Name=randomStr(1)&Year(now)&Month(now)&Day(now)&Hour(now)&Minute(now)&Second(now)&"."&F_File.FileExt
F_Type=FixName(F_File.FileExt)
IF F_File.FileSize > Int(UP_FileSize) Then
         Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件大小超出,請返回重新上傳</a></div>")
ElseIF IsvalidFile(UCase(F_Type)) = False Then
         Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件格式非法,請返回重新上傳</a></div>" )
Else
         F_File.SaveAs Server.MapPath("attachments/"&D_Name&"/"&F_Name)
         response.write "<script>addUploadItem('"&F_Type&"','attachments/"&D_Name&"/"&F_Name&"',"&Request.QueryString("MSave")&")</script>"
         Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件上傳成功,請返回繼續(xù)上傳</a></div>")
End IF

 

保存文件的后綴是F_File.FileExt,而檢查的是經(jīng)過FixName()函數(shù)處理的后綴,那就看看fixname函數(shù)定義,在function.asp中:
 
復(fù)制代碼 代碼如下:

'*************************************
'過濾文件名字
'*************************************
Function FixName(UpFileExt)
         If IsEmpty(UpFileExt) Then Exit Function
         FixName = Ucase(UpFileExt)
         FixName = Replace(FixName,Chr(0),"")
         FixName = Replace(FixName,".","")
         FixName = Replace(FixName,"ASP","")
         FixName = Replace(FixName,"ASA","")
         FixName = Replace(FixName,"ASPX","")
         FixName = Replace(FixName,"CER","")
         FixName = Replace(FixName,"CDX","")
         FixName = Replace(FixName,"HTR","")
End Function
 


呵呵,它把危險后綴過濾了的,如果我的文件后綴是asp(0x00)gif,那么檢查的時候過濾chr(0)和asp,后綴就成了gif,通過,保存的時候就是asp(0x00)gif。從理論上來說是對的啊,我搞了半天也不行,郁悶。有知道的大俠告訴我啊。
不過我們可以利用這個上傳aspx格式。呵呵,我們上傳aspx文件,fixname函數(shù)過濾asp,于是后綴就成了x。只要把x設(shè)為可以上傳的格式,就可以傳aspx文件了。

六、 附件管理問題
管理員登陸后有個附件管理功能,看他參數(shù)類似于http://localhost/blog/ConContent.asp?Fmenu=SQLFile&Smenu=Attachments&AttPath=attachments/month_0512,可以通過指定AttPath瀏覽web目錄的哦。
但是系統(tǒng)限制了站外提交數(shù)據(jù),所以不能直接改url,那就“曲線救國”吧。找到友情鏈接添加功能,url就填上我們構(gòu)造的url,保存,然后點查看,就繞過站外的限制了。注意構(gòu)造的AttPath的第一個字符不能是“.”和“/”哦,程序有檢查的。我們這樣構(gòu)造就可以跳到blog根目錄:http://localhost/blog/ConContent.asp?Fmenu=SQLFile&Smenu=Attachments&AttPath=attachments/..

 
呵呵,最后還是希望大家支持PJBlog2,真的是很好用的啊。希望作者再接再厲,把這套blog系統(tǒng)做得更好,造福眾多網(wǎng)民J
PS:作者真是勤快啊,補丁已經(jīng)出來了,呵呵

相關(guān)文章

最新評論