首页 网络安全 安全学院 查看内容

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

2009-5-20 11:35 829 0

摘要: Bug.Center.Team Bitrac个人博客系统后台权限提升漏洞 影响版本:Bitrac内部测试版 程序介绍:Bitrac 内部测试版发布,Bitrac 是基于 ASP.NET 2.0...
关键词: nbsp oAuthor Response item base SiteFun return Request Grade UserName

Bug.Center.Team 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     Bitrac个人博客系统后台权限越权漏洞漏洞分析: 在下载数据库那里没有对用户权限进行判断,如果已知备份数据库名的前提下,可以下载备份数据库。        case "Downbak":            if (SiteLoad.Author.ID == 0)            {                break;            }            _AdmStat.DbResDown(SiteFun.ParseStr(context.Request.QueryString["dat"]));            return;string path = Path.Combine(Path.GetDirectoryName(dbFilePath), strBak + ".cab");            if (File.Exists(path))            {                HttpResponse response = HttpContext.Current.Response;                response.Clear();                response.Buffer = false;                response.ContentType = "application/octet-stream";                response.AppendHeader("Content-Disposition", "attachment;filename=" + SiteFun.UrlEncode(strBak + ".cab"));                response.WriteFile(path);                response.Flush();                response.End();            }  解决方案:厂商补丁:Bitrac-----------目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:http://www.loveyuki.com/Article/Bitrac_Alpha_Update_List.aspx  
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部