来源:自学PHP网 时间:2021-09-07 21:04 作者: 阅读:次
[导读] 原来是有一个验证的,但是不小心就想到办法绕过去了详细说明:先大概说一下流程:前台:初步身份伪造--获取某项信息--程序计算--伪造最终cookie登录成功后台(特别注意!):先成...
原来是有一个验证的,但是不小心就想到办法绕过去了 先大概说一下流程:
text = Member_Valicate.aC7c4DsFNKxcZ9Ao2KU(Member_Valicate.KfvFKOso9G8UQWWkflb(HttpContext.Current) .Cookies["Member"].Values, "UID");
b =Member_Valicate.KfvFKOso9G8UQWWkflb(HttpContext.Current).Cookies["Member"].Values["Valicate"].ToString(); this.U8VWxh9WtC = ((DateTime)oleDbDataReader["lastdate"]).ToString("yyyyMMddHHmmss"); flag = !(md.Get_Md5(this.U8VWxh9WtC) != b); //把两个货比较,很悲剧啊 if (!flag) { this.tfYWhhmueR(); Member_Valicate.sVS2ySs4W4iMlcmVLhA(HttpContext.Current.Response, "<script type='text/javascript'>alert('invalid verification!');location.href='" + str + "';</script>"); arg_2A4_0 = 10; continue; }
public string Get_Md5(string s) { MD5 mD = new MD5CryptoServiceProvider(); Encoding encoding = Encoding.GetEncoding("UTF-8"); string s2 = "pageadmin cms"; byte[] array = mD.ComputeHash(encoding.GetBytes(s)); byte[] array2 = mD.ComputeHash(encoding.GetBytes(s2)); StringBuilder stringBuilder = new StringBuilder(32); for (int i = 0; i < array.Length; i++) { stringBuilder.Append(((int)(array[i] + array2[i])).ToString("x").PadLeft(2, '0')); } return stringBuilder.ToString(); }
后台
this.TclWJqMrlI = ((DateTime)oleDbDataReader["lastdate"]).ToString("yyyyMMddHHmmss"); string text2 = HttpContext.Current.Request.Cookies["Master"].Values["Valicate"].ToString(); flag = !Master_Valicate.e51WJWsgAgH9BDJaION(md.Get_Md5(this.TclWJqMrlI), text2);
修复方案:这套程序太经典了,居然可以发现那么多有代表性的漏洞……身份验证应该严格一点啊,这也太松散了 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com