Bitrac 正式版本,Bitrac 是基于 ASP.NET 2.0 + SQLite 的单用户博客程序,内置 URLRewrite 和页面压缩功能,支持 MetaWeblogAPI,自写的 HTML 模板引擎,方便修改风格,完全的可视化编辑环境。
首先说一下Bitrac在线升级顺序。
在后台请求 升级
Control.ashx
Automat
string sCode = SiteFun.RandomStr(9);
_AdmStat.SetLockFile(sCode);
在网站Errors目录随机生成一个*.lock 文件,同时文件名记录在
Autoset.Cookie + "_Lock" Cookie里。
再转到升级处理页面。
Automat.ashx
处理页面根据读取Cookie值,再当前网站的*.lock文件对比,不相同的为没有权限,相同的进行升级,升级完成后删除*.lock 文件和Cookie。
但这里就存在一个问题,就是Cookie我们可以伪造,而*.lock默认和正常升级都是不会存在的。因此,我们可以伪造 Autoset.Cookie + "_Lock"为空,即可进行正常升级,再结合他的手动升级功能,我们可以伪造升级包进行上传任意文件或执行数据库操作。
相关代码:
Automat.ashx.cs
//权限验证
if (!Autoexe.ChkSiteLockCookie())
{
response.Write("你没有权限访问此页面");
}
///检查Cookie
public static bool ChkSiteLockCookie()
{
bool flag = false;
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(GetSiteLockFileName());
HttpCookie cookie = HttpContext.Current.Request.Cookies[Autoset.Cookie + "_Lock"];
if (cookie != null)
{
flag = cookie.Value == fileNameWithoutExtension;
}
return flag;
}
//手动升级
if (str7 == "Hado")
{
response.Write("<p style=\"color:blue;\"><b>博客手动升级程序</b></p><p>当前版本:" + Autoexe.GetCurVersion() + "</p>");
if (request.Files["hdFile"] == null)
{
response.Write("<br /><br /><br /><p><a href=\"Automat.ashx?act=Hand\">上传文件不能为空,点击返回手动升级程序</a></p& gt;");
}
else
{
response.Write("<p><textarea id=\"autoInfo\" cols=\"59\" rows=\"10\" wrap=\"virtual\" readonly=\"readonly\" style=\"font-size: 12px; font-family: Tahoma;\"></textarea></p>");
response.Write("<script>function insAutoInfo(txt) { document.getElementById('autoInfo').value += txt; }</script>");
request.Files["hdFile"].SaveAs(Path.Combine(Path.Combine(Autoset.Router, "Errors"), "HandAutomat.cab"));
response.Write("<script>insAutoInfo(' ............... 升级包上传完成')</script>");
response.Write(@"<script>insAutoInfo('\r\n')</script>");
if (Autoexe.AutoInstallFile("HandAutomat"))
{
response.Write("<script>insAutoInfo(' ............... 升级包安装完成')</script>");
response.Write(@"<script>insAutoInfo('\r\n')</script>");
}
else
{
response.Write("<script>insAutoInfo(' ......... 升级包安装安装失败')</script>");
}
response.Write("<p><a href=\"Automat.ashx?act=Hand\">点击返回手动升级程序,继续升级</a></p>");
response.Write("<p><a href=\"Automat.ashx?act=Exit\">关闭手动升级程序并重新开启站点</a></p>");
}
goto Label_048C;
}
还要说明一点,他提供的手动升级包是使用 GZipStream 进行压缩同解压
Bitrac 1.25.0.2500
厂商补丁:
Bitrac
-----------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://blog.loveyuki.com/Article/Bitrac-Pub-Download.aspx
暂无评论