2020-02-08 | 漏洞复现 | UNLOCK

phpList 3.5.0 - Authentication Bypass 漏洞复现

环境搭建

源码下载(sourceforge):

1
https://sourceforge.net/projects/phplist/files/phplist-development/3.5.0-RC1/

解压后直接找到这个目录:

将这个lists拷贝到网站目录下并且重命名。

修改config/config.php配置文件,设置要连接的数据库和账户密码

同时建立phplistdb数据库。

访问http://127.0.0.1/phplist/admin/

漏洞利用

初始化安装,设置管理员的账号密码:

这里的密码要设置成 sha256 后以0e开头的字符串,如 TyNOQHUS

我们再次访问后台,以密码 34250003024812进行登录,其sha256后也是以0e开头

登录成功:

漏洞分析

找到验证管理员登录的php文件phpListAdminAuthentication.php

关键代码:

可以看到$encryptedPass(密码sha256后的值)是使用==来判断和数据库中的值是否一样。PHP弱类型比较,就会造成0exxxxx == 0eyyyyy(会把每一个以”0e”开头的哈希值都解释为0)

漏洞修复

使用===强类型比较:

1
2
3
if (//Password validation.
!empty($passwordDB) && $encryptedPass === $passwordDB
)

总结

这种偶然现象可能不是很常见,但是还是借助fofa等工具搜集下使用phplist的网站,批量打一下。

评论加载中