影响版本:
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 条评论。