首页 > 网络安全 > PJblog 170版本安全漏洞补丁

PJblog 170版本安全漏洞补丁

      今天早上到Pj的官方论坛一看,看到置顶主题赫然写着pjblog170重要安全补丁发布,到网上转了转找到了漏洞利用工具,实际上是一个XSS,可以获得管理员的sha1密码。有人给出了php和VBS的利用脚本,因为本地没有装php,就用VBS跑了一下自己的博客,果然爆出了sha1密码~~
      然后就是按照论坛上的方法打补丁,因为之前我的代码自己改过,没有完全按照官方的来,所以不能直接覆盖文件升级,而要手动修改代码升级。共计4个文件,虽然不懂一点asp,但以前也依葫芦画瓢的改过代码,有些信心的。因为论坛上有很多人都出错,所以很小心,一口气把9页回复都看完,综合了一下意见才用Ultracompare对比新旧文件改的。不想还是出问题了,先是检测防xss的函数放错了地方,我说在emeditor里面怎么不能自动高亮呢;改好之后以为OK了,前后台都没有问题,试着发表日志时来了问题。日志发表完毕之后内容并不能写入数据库,因此返回文章时得不到文章ID,当时想着真崩溃,检查了好多地方也没找出原因,后来看了blogpost.asp里包括的文件,确定文件是出在class/cls_logAction.asp上,因为里面改的地方很多,就从服务器上把原来没改过的拉到本地覆盖再改。这一次不跟新的补丁文件对比修改了,直接按照论坛上的要求改了一个地方,保存,然后OK,将更改文件全部再传到服务器上,也没有问题,再用那个VBS利用脚本一检测,本地和服务器都没有漏洞了,这才松了口气。这前后大约用了3个小时。
      附上从官网copy过来的补丁修补方法(注:适用于157-170版本的Pj):
      需修改文件:根目录Action.asp
      将 request("cname") 改成 Checkxss(request.QueryString("cname"))
      将 request("mainurl") 改成 Checkxss(request.QueryString("mainurl"))
      将 request("main") 改成 Checkxss(request.QueryString("main"))

      需修改文件:common/function.asp,在文件中增加一个函数:

复制内容到剪贴板程序代码程序代码
'*************************************
'防XSS注入函数 更新于2009-04-21 by evio
'与checkstr()相比, checkxss更加安全
'*************************************
Function Checkxss(byVal ChkStr)
    Dim Str
    Str = ChkStr
    If IsNull(Str) Then
        CheckStr = ""
        Exit Function
    End If
    Str = Replace(Str, "&", "&")
    Str = Replace(Str, "'", "´")
    Str = Replace(Str, """", """)
        Str = Replace(Str, "<", "<")
        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)"
 &
nbsp;  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")
        re.Pattern = "(\n)"
    Str = re.Replace(Str, "$1or")
        '———————————-
        re.Pattern = "(java)(script)"
    Str = re.Replace(Str, "$1script")
        re.Pattern = "(j)(script)"
    Str = re.Replace(Str, "$1script")
        re.Pattern = "(vb)(script)"
    Str = re.Replace(Str, "$1script")
        '———————————-
        If Instr(Str, "e­xpression") > 0 Then
                Str = Replace(Str, "e­xpression", "e", 1, 1, 0) '防止xss注入
        End If
    Set re = Nothing
    Checkxss = Str
End Function

      修改文件:class/cls_logAction.asp
      找到:

复制内容到剪贴板程序代码程序代码
oldcname = request.form("oldcname")
                oldcate = request.form("oldcate")
                oldctype = request.form("oldtype")

      替换为:

复制内容到剪贴板程序代码程序代码
oldcname = Checkxss(request.form("oldcname"))
                oldcate = Checkxss(request.form("o
ldcate"
))
                oldctype = Checkxss(request.form("oldtype"))

      修改文件:GetArticle.asp
      找到:

复制内容到剪贴板程序代码程序代码
blog_postFile = request("blog_postFile")

      替换为:

复制内容到剪贴板程序代码程序代码
blog_postFile = Cint(Checkxss(request.QueryString("blog_postFile")))

转载请尊重版权,出处:秋天博客
本文链接: https://www.cfresh.net/web-security/243

  1. 还没有评论
评论提交中, 请稍候...

留言



注意: 您给他人的评论回复将通过邮件通知到对方。

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 1 )
  1. 1月 1st, 2022 @ 23:25 | #1
    Trackback: steel stockholders somerset