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
配置文件,设置要连接的数据库和账户密码
同时建立phplistdb
数据库。
访问http://127.0.0.1/phplist/admin/
漏洞利用
初始化安装,设置管理员的账号密码:
image这里的密码要设置成 sha256 后以0e
开头的字符串,如 TyNOQHUS
我们再次访问后台,以密码 34250003024812
进行登录,其sha256后也是以0e
开头
登录成功:
image漏洞分析
找到验证管理员登录的php文件phpListAdminAuthentication.php
关键代码:
image可以看到$encryptedPass
(密码sha256后的值)是使用==
来判断和数据库中的值是否一样。PHP弱类型比较,就会造成0exxxxx == 0eyyyyy
(会把每一个以”0e”开头的哈希值都解释为0)
漏洞修复
使用===
强类型比较:
if (//Password validation.
!empty($passwordDB) && $encryptedPass === $passwordDB
)
总结
这种偶然现象可能不是很常见,但是还是借助fofa等工具搜集下使用phplist的网站,批量打一下。
网友评论