环境搭建
源码下载(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 | if (//Password validation. |
总结
这种偶然现象可能不是很常见,但是还是借助fofa等工具搜集下使用phplist的网站,批量打一下。
评论加载中