狂雨cms前台cookie伪造漏洞

不知道有没有大佬发过,水一篇

漏洞分析

首先看到 application/common/controller/UserBase.php这个文件,UserBase类initialize()方法对UID的定义

20211007155721-33507c06-2744-1

跟进is_login()方法,在application/common.php文件中

20211007155855-6b7cf0dc-2744-1


默认参数$type=’user’,此时从cookie中获取$user和$user_sign变量的值,否则的话从session中获取这两个变量的值。如果$user变量不为空的话,就会进行$user_sign和data_auth_sign($user)的比较,相等的话就会返回$user[‘uid’]

继续跟进data_auth_sign()方法

20211007161053-1768ff2a-2746-1


这里对传入的参数进行了数组转换、键名排序、url编码,然后直接通过sha1()加密生成了签名并返回,也就是说这里的签名我们是完全可以伪造的

梳理一下:

  1. $user和$user_sign变量通过cookie传参完全可控
  2. $user变量可控导致data_auth_sign()方法返回的$sign间接可控
  3. 令$user_sign和$sign相等,is_login()返回$user[‘uid’]作为UID的值

漏洞复现

首先在前台注册任意一个用户并登录,看到返回包set-cookie了两个值,分别对应上文的$user变量和$user_sign变量,此时的uid=1

20211007162444-06f5685c-2748-1


直接把data_auth_sign()函数复制出来,传入我们自定义的数组 array(“uid” => “2”,”username” => “test”,)生成签名值(主要是uid的值,username的值无所谓,和cookie中传入的保持一致即可)

20211007163401-52a8741e-2749-1

再次登录,拦截返回包,将lf_user_auth的uid参数改为2,user_auth_sign改为我们刚刚生成的签名值,即可实现对uid=2的用户的账户接管

20211007163852-ffde0694-2749-1


转载自

https://xz.aliyun.com/t/10349

本文转载自https://xz.aliyun.com/t/10349,只做本站测试使用,本文观点不代表安强科技社区立场。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月17日 下午4:12
下一篇 2022年3月17日 下午4:48

相关推荐

发表回复

您的电子邮箱地址不会被公开。