Bitrac个人博客系统后台权限提升漏洞

影响版本:
Bitrac内部测试版

程序介绍:

Bitrac 内部测试版发布,Bitrac 是基于 ASP.NET 2.0 + SQLite 的单用户博客程序,内置 URLRewrite 和页面压缩功能,支持 MetaWeblogAPI,自写的 HTML 模板引擎,方便修改风格,完全的可视化编辑环境。目前是内测版本

漏洞分析:

 

在 Control.ashx 中,



        case "Auttab":
            new AdmAuttab().OutWrite();
            return;
转到函数
switch (SiteFun.ParseInt(base.Request.QueryString["exe"]))
    {
        case 1: //添加
        {
            …..
AuthorItem oAuthor = new AuthorItem();
            oAuthor.UserName = SiteFun.ParseStr(base.Request.Form["auName"]);
            oAuthor.PassWord = SiteFun.ParseStr(base.Request.Form["auPass"]);
            oAuthor.UserMail = SiteFun.ParseStr(base.Request.Form["auMail"]);
            if ((!string.IsNullOrEmpty(oAuthor.UserName) && !string.IsNullOrEmpty(oAuthor.PassWord)) && !string.IsNullOrEmpty(oAuthor.UserMail))
            {
                if (data.ExistUsername(oAuthor.UserName))
                {
                    base.Response.Write("0用户名已经存在");
                    return;
                }
                if (data.ExistUsermail(oAuthor.UserMail))
                {
                    base.Response.Write("0邮件地址已经存在");
                    return;
                }
                oAuthor.PassWord = SiteFun.SHAEncode(oAuthor.PassWord);
                oAuthor.Publish = DateTime.Now;
                oAuthor.Address = SiteLoad.Author.Address;
                oAuthor.Grade = SiteFun.ParseBte(base.Request.Form["auKind"]);
                if (oAuthor.Grade > 2)
                {
                    oAuthor.Grade = 0;
                }
                oAuthor.ID = data.InsertAuthor(oAuthor);
                base.Response.Write(string.Format("1<tbody id=\"autV_{3}\"><tr id=\"autS_{3}\"><td><a href=\"javascript:$.Run(12,2,0,{3});\">{0}</a></td><td>{1}</td><td>{7}</td><td>{2}</td><td>{8}</td></tr><tr id=\"autE_{3}\" class=\"hide\"><td colspan=\"5\"><p><label>名称:</label><input type=\"text\" cdata=\"{0}\" id=\"autE_{3}_Name\" name=\"autE_{3}_Name\" value=\"{0}\" size=\"20\" /></p><p><label>权限:</label><select id=\"autE_{3}_Kind\" name=\"autE_{3}_Kind\">{9}</select></p><p><label>密码:</label><input type=\"password\" id=\"autE_{3}_Pass\" name=\"autE_{3}_Pass\" value=\"\" size=\"20\" /></p><p><label>邮件:</label><input type=\"text\" cdata=\"{7}\" id=\"autE_{3}_Mail\" name=\"autE_{3}_Mail\" value=\"{7}\" size=\"20\" /></p><div><a class=\"sav\" href=\"javascript:$.Run(12,2,1,{3});\">保存</a><a class=\"can\" href=\"javascript:$.Run(12,2,3,{3});\">取消</a><a class=\"del\" href=\"javascript:$.Run(12,2,2,{3});\">删除</a><span id=\"autE_{3}_Info\" class=\"info\"></span></div></td></tr></tbody>", new object[] { oAuthor.UserName, this.listAuGrade[oAuthor.Grade], oAuthor.Publish.ToString(SiteLoad.Scheme.FormatsDT), oAuthor.ID, SiteDat.GetLan("Edit"), SiteDat.GetLan("Delete"), SiteDat.GetLan("ConfirmDelAuthor"), oAuthor.UserMail, 0, this.BuildSelect(oAuthor.Grade) }));
                return;
            }
            base.Response.Write("0必须的字段必须填写");
            return;
 
…………
          }
          case 2: //修改
        {
                AuthorItem item2 = new AuthorItem();
            item2.ID = SiteFun.ParseInt(base.Request.Form["auID"]);
            if (item2.ID != 0)
            {
                if ((data.SelectAuthorGrade(item2.ID) >= base.Author.Grade) && (item2.ID != base.Author.ID))
                {
                    base.Response.Write("0你没有权限修改这个用户");
                    return;
                }
                item2.UserName = SiteFun.ParseStr(base.Request.Form["auName"]);
                item2.PassWord = SiteFun.ParseStr(base.Request.Form["auPass"]);
                item2.UserMail = SiteFun.ParseStr(base.Request.Form["auMail"]);
                if ((string.IsNullOrEmpty(item2.UserName) || string.IsNullOrEmpty(item2.PassWord)) || string.IsNullOrEmpty(item2.UserMail))
                {
                    base.Response.Write("0必须的字段必须填写");
                    return;
                }
                if (data.ExistUsername(item2.UserName, item2.ID))
                {
                    base.Response.Write("0用户名已经存在");
                    return;
                }
                if (data.ExistUsermail(item2.UserMail, item2.ID))
                {
                    base.Response.Write("0邮件地址已经存在");
                    return;
                }
                item2.PassWord = SiteFun.SHAEncode(item2.PassWord);
                item2.Grade = SiteFun.ParseBte(base.Request.Form["auKind"]);
                if (item2.Grade > 2)
                {
                    item2.Grade = 0;
                }
                data.UpdateAuthor(item2);
                item2.Publish = DateTime.Now;
                item2.Address = SiteLoad.Author.Address;
                base.Response.Write(string.Format("1<tr id=\"autS_{3}\"><td><a href=\"javascript:$.Run(12,2,0,{3});\">{0}</a></td><td>{1}</td><td>{7}</td><td>{2}</td><td>{8}</td></tr><tr id=\"autE_{3}\" class=\"hide\"><td colspan=\"5\"><p><label>名称:</label><input type=\"text\" cdata=\"{0}\" id=\"autE_{3}_Name\" name=\"autE_{3}_Name\" value=\"{0}\" size=\"20\" /></p><p><label>权限:</label><select id=\"autE_{3}_Kind\" name=\"autE_{3}_Kind\">{9}</select></p><p><label>密码:</label><input type=\"password\" id=\"autE_{3}_Pass\" name=\"autE_{3}_Pass\" value=\"\" size=\"20\" /></p><p><label>邮件:</label><input type=\"text\" cdata=\"{7}\" id=\"autE_{3}_Mail\" name=\"autE_{3}_Mail\" value=\"{7}\" size=\"20\" /></p><div><a class=\"sav\" href=\"javascript:$.Run(12,2,1,{3});\">保存</a><a class=\"can\" href=\"javascript:$.Run(12,2,3,{3});\">取消</a><a class=\"del\" href=\"javascript:$.Run(12,2,2,{3});\">删除</a><span id=\"autE_{3}_Info\" class=\"info\"></span></div></td></tr>", new object[] { item2.UserName, this.listAuGrade[item2.Grade], item2.Publish.ToString(SiteLoad.Scheme.FormatsDT), item2.ID, SiteDat.GetLan("Edit"), SiteDat.GetLan("Delete"), SiteDat.GetLan("ConfirmDelAuthor"), item2.UserMail, 0, this.BuildSelect(item2.Grade) }));
                return;
            }
            base.Response.Write("0参数错误");
            return;                }
 
  }
     case 3:  //删除
        {
}

可以从上面看出, 在添加管理员时没有作权限判断。在修改管理员时,用户可以修改自身为管理员。

解决方案:
厂商补丁:
Bitrac
———–
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.loveyuki.com/Article/Bitrac_Alpha_Update_List.aspx

发表评论?

0 条评论。

发表评论