Bitrac 1.25.0.2500个人博客系统上传漏洞
影响版本:
Bitrac 1.25.0.2500
程序介绍:
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>"); } 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('rn')</script>"); if (Autoexe.AutoInstallFile("HandAutomat")) { response.Write("<script>insAutoInfo(' ............... 升级包安装完成')</script>"); response.Write(@"<script>insAutoInfo('rn')</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
-----------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://blog.loveyuki.com/Article/Bitrac-Pub-Download.aspx