PHPWind Auth-Key 获取

来自Orange的议题《A Journey Combining Web Hacking and Binary Exploitation in Real World!》

哔哩哔哩视频:https://www.bilibili.com/video/BV1wX4y1K7W4

发现 site_hash

在phpwind的系统设计中,对于一些重要数据的传输都会进行加密。

加密代码如图

image-20210125165125286

可以看到加密使用的key是site_hash,site_hash是如何产生的?

site_hash是phpwind安装时自动产生的,在文件upload/src/applications/install/controller/IndexController.php

image-20210125165352005

site_hash是在安装时就固定的8位随机数,跟进到随机数生成函数generateRandStr

image-20210125165557486

通过php内置函数mt_rand从长度为62位的字符串中取值。

恢复site_hash

由上述分析,我们至少可以找到两种攻击手法

  1. 通过暴力循环,因为只有8位字符,每个字符有62种可能,总共有62的8次方种可能
  2. 通过破解php的mt_rand,php的mt_rand种子只有2的32次方大小,加上php随机数的624种状态,即2^32624 约等于 2^41次方 (xxTea of time)

更快的方式

在phpwind的加密板块上

image-20210125172638236

将使用者输入的密码和系统存储的密码做比较,但如果在php中,md5 一个array会导致结果是null, 而在公开的帖子中,密码肯定也是null,于是可绕过该判断。

继续往流程走,会设置加密md5的cookie

image-20210125173054587

由于$pwd是null,我们得到的cookie其实就是site_hash的md5加密的数值。

通过发包

image-20210125182227824

返回包

image-20210125182255965

接着我们可以使用md5解密网站或者使用hashcat,指定字典为大写字母,小写字母,数字

image-20210125182356283

使用RTX 2080 TI可以在一小时得到结果。

site_hash的利用

得到site_hash,可以伪造admin或者重置admin的密码。