PHPWind Auth-Key 获取
来自Orange的议题《A Journey Combining Web Hacking and Binary Exploitation in Real World!》
哔哩哔哩视频:https://www.bilibili.com/video/BV1wX4y1K7W4
发现 site_hash
在phpwind的系统设计中,对于一些重要数据的传输都会进行加密。
加密代码如图
可以看到加密使用的key是site_hash
,site_hash
是如何产生的?
site_hash是phpwind安装时自动产生的,在文件upload/src/applications/install/controller/IndexController.php
site_hash是在安装时就固定的8位随机数,跟进到随机数生成函数generateRandStr
通过php内置函数mt_rand
从长度为62位的字符串中取值。
恢复site_hash
由上述分析,我们至少可以找到两种攻击手法
- 通过暴力循环,因为只有8位字符,每个字符有62种可能,总共有62的8次方种可能
- 通过破解php的
mt_rand
,php的mt_rand
种子只有2的32次方大小,加上php随机数的624种状态,即2^32624 约等于 2^41次方 (xxTea of time)
更快的方式
在phpwind的加密板块上
将使用者输入的密码和系统存储的密码做比较,但如果在php中,md5 一个array会导致结果是null, 而在公开的帖子中,密码肯定也是null,于是可绕过该判断。
继续往流程走,会设置加密md5的cookie
由于$pwd是null,我们得到的cookie其实就是site_hash的md5加密的数值。
通过发包
返回包
接着我们可以使用md5解密网站或者使用hashcat,指定字典为大写字母,小写字母,数字
使用RTX 2080 TI
可以在一小时得到结果。
site_hash的利用
得到site_hash,可以伪造admin或者重置admin的密码。