phpList 3.5.0 - Authentication B

2020-04-12  本文已影响0人  君行路

phpList是用于管理邮件列表的开源软件。它设计用于向订户列表传播信息,例如新闻通讯,新闻,广告。它用PHP编写,并使用MySQL数据库存储信息。phpList是免费的开源软件。

https://www.exploit-db.com/exploits/47989

管理员后台登录的密码散列使用了==而不是===验证

环境搭建

源码下载(sourceforge):

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

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

image

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

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

image

同时建立phplistdb数据库。

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

漏洞利用

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

image

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

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

image

登录成功:

image

漏洞分析

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

关键代码:

image

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

漏洞修复

使用===强类型比较:

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

总结

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

上一篇下一篇

猜你喜欢

热点阅读