亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PJBlog安全性分析

 更新時(shí)間:2006年09月27日 00:00:00   作者:  

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

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

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

三、 幾個(gè)地方過濾不嚴(yán)
第一個(gè)就是統(tǒng)計(jì)訪問的referer過濾不嚴(yán)??矗?
 

復(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
 


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

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

五、 上傳文件
出于安全的考慮,PJBlog2限制了上傳文件類型,包括asp、asa、aspx、cer、cdx、htr。其實(shí)現(xiàn)在很多虛擬主機(jī)不僅支持asp,還會(huì)支持aspx、php、perl的,而且也可以上傳shtml等格式,所以如果既然要限制最好是把所有服務(wù)器執(zhí)行文件的類型一起限制才是。
上傳文件這里還有點(diǎn)問題,看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'>文件大小超出,請(qǐng)返回重新上傳</a></div>")
ElseIF IsvalidFile(UCase(F_Type)) = False Then
         Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件格式非法,請(qǐng)返回重新上傳</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'>文件上傳成功,請(qǐng)返回繼續(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
 


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

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

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

相關(guān)文章

最新評(píng)論