@索马里的海贼
@Map
向前辈致敬。:)
-----------------------------------------------------------------------------------------
回顾前两个漏洞,
WooYun: PHPCMS V9 一个为所欲为的漏洞
WooYun: phpcms最新版绕过全局防御暴力注入(官网演示)
皆是由于 密钥 的泄露所造成的。 第一个漏洞 直接输出了phpsso_auth_key。第二个则是 输出了加密了的auth_key ,然后根据算法弱IV的缺陷进行了还原。
这次的漏洞则是 泄露了 加密了的phpsso_auth_key。
----------------------------------------------------------------------------------------
/phpcms/modules/member/index.php
继续跟到auth_data
/phpcms/modules/member/classes/client.class.php
将 uid=x&ps_auth_key=phpsso_auth_key 这串数据 加密后 通过模板输出了。
访问 http://localhost/index.php?m=member&c=index&a=account_manage_avatar&t=1
base64解码后
data=后面的字符串即为
通过$this->sys_auth所加密后的数据。而在 /phpcms/modules/member/classes/client.class.php 中的sys_auth 其默认key 为 phpsso_auth_key。
我们再找一处 已知明文的用 phpsso_auth_key 这个密钥所加密的数据。由于弱iv可碰撞,我们就可以得到 phpsso_auth_key 的值。
在前台登入时,phpcms会向 api/phpsso.php 发送会员数据 用以支持 单点登录。而这个数据正是由phpsso_auth_key 这个密钥所加密的。
在登入时抓包
code 后面的 密文所对应的明文格式为
time() 就在 我们抓的包里的 time参数所对应的值 ,uid 在我们的会员头像的路径中可以看到
与 WooYun: phpcms最新版绕过全局防御暴力注入(官网演示) 的原理一样,多登入几次,获取足够的code。
需注意的是 User-Agent 和 cookie 不要填错了。
找到 code为7499开头的
填入poc(注意time 和 uid)
得到 ce8e83e7d1g15d1b01f46d<fa492cdefce8e83e7d157ae10c7ff468a4792cdefce8e83e7d157ae10c7f
分段得
中间那个即为 keyd了,接下来就是解密 phpsso_auth_key 了
去掉后四位就是 phpsso_auth_key 了。
拿到phpsso_auth_key 后能做的事情太多了,在api/phpsso.php这个文件里面 我们控制 action的值 就能操作全站的会员数据。
当然 也可以注入。修改cookie并访问。