PJBlog安全性分析_安全设置

PJBlog2是PuterJam开发的一款免费的ASP + Access的个人blog系统,这几天偶想弄个blog来玩玩,经过比较选中了功能、界面都相对较好的PJBlog2。经过试用,感觉这blog还不错,也发现几个安全方面的小问题,就把我的一点点见解发出来。我分析的版本是05年12月11日发布的PJBlog2 v2.4.1211版本。

一、 密码加密算法
PJBlog2没有采用常用的MD5算法对用户密码加密,而是使用的SHA1算法。SHA1算法跟MD5类似,也是单向散列函数,不过它对任意长度的数据进行处理输出160位的数值。
PJBlog2在创建新用户的时候会随机生成一个6位的字符串Salt,用户的明文密码加上这个Salt值再进行hash才得到加密后的密码。即:Password = SHA1(user_pwd & Salt)。这样子做的好处是即使两个一样的密码hash后的结果也完全不同。这个稍微“另类”的算法给破解密码带来了点难度。
呵呵,有难度不等于不能破解,网上没有现成的程序,需要自己动手写个才是。因为.NET提供了SHA1的类所以最初用VB.Net写的,由于狂耗资源的问题一直解决不了,只好换C了。用C实现SHA1的源代码我找了好久才在一个老外的站找到,还不错,呵呵,有兴趣的可以看下老外的SHA1类:http://www.codeproject.com/cpp/csha1.asp
程序可以在这里( http://www.0x54.org/lake2/program/PJBlogCracker.exe )下载,是命令行下的,功能比较弱,单线程速度超级慢,可能还有bug,诸多问题以后再改咯。

二、 登陆认证
PJBlog2的认证方式是用的Cookies加IP。当用户登陆成功,系统随机产生一个Hashkey写入Cookies并记录到数据库中,然后通过Cookies里的Hashkey、Username还有IP来判断用户。Cookies好办,可以用跨站、下数据库等方式拿,可以这IP就难办了,看来进行Cookies欺骗的可能性很小啊。呵呵,那就不看这个咯。

三、 几个地方过滤不严
第一个就是统计访问的referer过滤不严。看:
 

复制代码 代码如下:

       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代码:
 
复制代码 代码如下:

'*************************************
'过滤特殊字符
'*************************************
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个字符在页面,要好好构造哦。
第二就是游客评论输入用户名也是用的CheckStr过滤,用户名数据库有限制,24个字符,这里构造CSS就更有难度了,不过可以有别的用处,具体的嘛,呵呵,后文详述。
有些blog主人禁止了游客评论,所以就只好注册后再评论了,但是注册后评论的名字文本框被设成了注册名而且只读,怎么办?呵呵,没关系,可以外部提交数据的。
再一个就是blog的留言板插件,还是用户名没过滤好,这个更难利用,只有20个字符哦。

四、 数据库的问题
PJBlog2的默认数据库名为pblog.asp,虽然数据库里面有个貌似防下载的blog_Notdownload表,呵呵,访问数据库试试,可以下载的哦。
既然可以下载,当然可以插入asp代码运行咯。有些地方(比如游客评论内容)插入asp代码会被扯开,不知道原因,郁闷。
经测试评论的姓名里是可以插ASP代码的。前面说了这里过滤不严,这样插入数据库的asp不会被显示出来的,看到的只是个没名字的家伙在唧唧歪歪,呵呵。这个可要好好构造哦,24个字符而且"被过滤了,想了一下,正好找到一个最短的,恰好24个字符:<%eval request(chr(9))%>
留言版的内容也可以插入asp代码,不过管理员看留言时看得到的哦。
呵呵,当然大多数站长应该都是改了数据库名称的,但是测试时还是发现少数人不改……

五、 上传文件
出于安全的考虑,PJBlog2限制了上传文件类型,包括asp、asa、aspx、cer、cdx、htr。其实现在很多虚拟主机不仅支持asp,还会支持aspx、php、perl的,而且也可以上传shtml等格式,所以如果既然要限制最好是把所有服务器执行文件的类型一起限制才是。
上传文件这里还有点问题,看attachment.asp里的代码:
 
复制代码 代码如下:

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'>文件上传成功,请返回继续上传</a></div>")
End IF

 

保存文件的后缀是F_File.FileExt,而检查的是经过FixName()函数处理的后缀,那就看看fixname函数定义,在function.asp中:
 
复制代码 代码如下:

'*************************************
'过滤文件名字
'*************************************
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函数过滤asp,于是后缀就成了x。只要把x设为可以上传的格式,就可以传aspx文件了。

六、 附件管理问题
管理员登陆后有个附件管理功能,看他参数类似于http://localhost/blog/ConContent.asp?Fmenu=SQLFile&Smenu=Attachments&AttPath=attachments/month_0512,可以通过指定AttPath浏览web目录的哦。
但是系统限制了站外提交数据,所以不能直接改url,那就“曲线救国”吧。找到友情链接添加功能,url就填上我们构造的url,保存,然后点查看,就绕过站外的限制了。注意构造的AttPath的第一个字符不能是“.”和“/”哦,程序有检查的。我们这样构造就可以跳到blog根目录:http://localhost/blog/ConContent.asp?Fmenu=SQLFile&Smenu=Attachments&AttPath=attachments/..

 
呵呵,最后还是希望大家支持PJBlog2,真的是很好用的啊。希望作者再接再厉,把这套blog系统做得更好,造福众多网民J
PS:作者真是勤快啊,补丁已经出来了,呵呵

时间: 2024-11-03 11:38:28

PJBlog安全性分析_安全设置的相关文章

安全技术—RSA公钥密码体制安全性分析_漏洞研究

 引言   RSA密码系统是较早提出的一种公开钥密码系统.1978年,美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在题为<获得数字签名和公开钥密码系统的方法>的论文中提出了基于数论的非对称(公开钥)密码体制,称为RSA密码体制.RSA是建立在"大整数的素因子分解是困难问题"基础上的,是一种分组密码体制.   介绍公钥密码体制(背景)   1.对称密码体制   对称密码体制是一种传统密码体制,也称为私钥密码体制.在对称加密系统中,加密和解密采

使用Nmap为你的Windows网络找漏洞的图文分析_安全设置

可以这样说,如果你的网络存有漏洞,或者说你的防火墙有漏洞,或者说你的服务器开着不该开放的端口,那你的网络面临着被攻击.被损害的风险. 先下手为强.为防止别人毁掉自己的网络,先对自己"狠"一点.我们可以用黑客们采用的方法先测试一下自己的系统. 工欲善其事,必先利其器.应该选择什么工具呢?这里我们推荐Nmap.Nmap是一个免费的开源实用程序,它可以对网络进行探查和安全审核. 许多网络管理人员还发现它对于网络的设备调查.管理服务升级计划.监视主机或服务的正常运行时间.Nmap使用IP数据包

Mssql和Mysql的安全性分析

mysql|安全|安全性 数据库是电子商务.金融以及ERP系统的基础,通常都保存着重要的商业伙伴和 客户信息.大多数企业.组织以及政府部门的电子数据都保存在各种数据库中,他们 用这些数据库保存一些个人资料,还掌握着敏感的金融数据.但是数据库通常没有象 操作系统和网络这样在安全性上受到重视.数据是企业,组织的命脉所在,因此选择 一款安全的数据库是至关重要的.大型网站一般使用oracle或DB2,而中小型网站大 多数使用更加灵活小巧的mssql数据库或者mysql数据库.那么,在同样的条件下,微 软

PHP临时文件的安全性分析_php技巧

一.简介 临时文件,顾名思义是临时产生的文件,且文件的生命周期很短. 然而,很多应用的运行都离不开临时文件,临时文件在我们电脑上无处不在,主要有以下几种形式的临时文件: 1.文件或图形编辑程序,所生成的中间文件 2.数据库查询时,生成的临时缓存文件,提供之前的结果数据而,以减少再次访问数据库的代价:通常用于远程数据库或远程xml的服务 3.文件被上传后在服务端的临时储存,其文件名为php的全局变量$_FILES['userfile']['tmp_name']的值 4.在http请求中,用于存放s

您好!我最近要写一偏论文,是电子商务的环境安全性分析。不知道从哪些方面写,请大家帮帮我!

问题描述 您好!我最近要写一偏论文,是电子商务的环境安全性分析.不知道从哪些方面写,请大家帮帮我! 解决方案 解决方案二:ding!解决方案三:写完了么?

OpenStack安全性分析:开源云软件的利与弊

有人要求我对OpenStack开源云计算平台进行简要的安全性分析,并简要分析我们的企业是否应该把开源云计算平台作为云基础设施建设的基础去追求.我的初步评估是,像Apache和 Linux,平台的开放性让我们能迅速发现和修复安全漏洞,这可以降低溢出的可能性.你们同意吗?还有其他值得考虑的OpenStack安全点(利与弊)吗? OpenStack是一个倡导执行简便.功能丰富.扩展性强的基础设施即服务云计算平台.于2010年7月由托管供应商Rackspace有限公司和NASA发布,它由构建云基础设施解

云存储访问控制方案的安全性分析与改进

云存储访问控制方案的安全性分析与改进 王冠 范红 杜大海 对Tang等(TANG Y,LEE P,LUI J,et al. Secure overlay cloud storage with access control and assured deletion. IEEE Transactions on Dependable and Secure Computing,2012,9(6):903-916)提出的一种云存储的细粒度访问控制方案进行安全性分析,发现其存在不能抵抗合谋攻击的问题,并给出

云计算安全性分析

云计算安全性分析 李山   李娜 随着用户对云计算使用量的增多,这就对云计算的安全性提出了更多的要求,一旦云计算出现安全问题,将会给用户带来巨大的损失.本文基于此背景,首先分析了当前云计算中所应用的安全技术,然后详细的分析了云计算所面临的安全风险,最后再针对性的提出了几点对策建议,帮助解决云计算安全问题. 云计算安全性分析

[文档]基于P2P的云计算模型及其安全性分析

基于P2P的云计算模型及其安全性分析 沈静波  李金龙 文章通过将P2P技术和云计算相结合,提出了一种可靠的.可扩展的.低成本的文件共享模型PA-Cloud.该文介绍了PA-Cloud的文件下载和更新过程,并对系统的安全性进行了分析.通过对PA-Cloud进行对比实验表明,PA-Cloud可以有效提高系统的可扩展性,降低服务提供商的成本. 关键词: 对等网络 云计算 文件共享 可扩展性   temp_12060215109101.pdf