前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2020-8547 phpList 3.5.0 - Authentication Bypass 漏洞复现

CVE-2020-8547 phpList 3.5.0 - Authentication Bypass 漏洞复现

作者头像
用户1631416
发布2020-02-17 16:20:51
1.1K0
发布2020-02-17 16:20:51
举报
文章被收录于专栏:玄魂工作室

0X1 漏洞概述

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

2月4日,有安全研究人员发布phplist3.5.0允许对管理员登录绕过进行类型转换,因为对于密码散列使用了==而不是===,这会错误地处理以0e开头、后跟唯一数字字符的散列。

0X2 环境搭建

环境源码可以从sourceforge下载

代码语言:javascript
复制
https://sourceforge.net/projects/phplist/files/phplist-development/3.5.0-RC1/

下载完成之后,解压找到phplist-3.5.0-RC1\phplist-3.5.0\public_html的lists文件夹,如下图所示:

将其复制到在本地Web目录中,重命名,如下如所示:

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

开启lampp

浏览器访问环境

代码语言:javascript
复制
http://127.0.0.1/phplists/admin

点击初始化环境,设置账户密码

注意,这里的密码要设置成哈希值(sha256)以0e开头的字符串,然后保存。

设置完成之后,访问正常显示即可:

0X3 漏洞分析

漏洞原因是由于后台管理员账户认证的比较不当导致的,源码如下:

代码语言:javascript
复制
if(empty($login)||($password=="")){
            return array(0, s('Please enter your credentials.'));
        }
        if ($admindata['disabled']) {
            return array(0, s('your account has been disabled'));
        }
        if (//Password validation.
            !empty($passwordDB) && $encryptedPass == $passwordDB
        )
            return array($admindata['id'], 'OK');
         else {
            if (!empty($GLOBALS['admin_auth_module'])) {
                Error(s('Admin authentication has changed, please update your admin module'),
                    'https://resources.phplist.com/documentation/errors/adminauthchange');
                return;
                }
        return array(0, s('incorrect password'));

        }

这里使用了==进行比较,使得PHP会把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

代码语言:javascript
复制
<?php
 var_dump(hash('sha256', 'TyNOQHUS') == '0e66298694359207596086558843543959518835691168370379069085300385');
 var_dump(hash('sha256', '34250003024812') == '0e66298694359207596086558843543959518835691168370379069085300385');
 ?>

OUTPUT:
bool(true)
bool(true)

0X4 漏洞利用

上一步骤的简单分析之后,所以我们使用其他密码值只要其哈希值是以0e开头即可,相信很多小伙伴做过CTF中Web题目关于PHP代码审计的题目的话,一定不会陌生。

我们使用密码值34250003024812也可以代替TyNOQHUS登录,过程如视频所示:

0X5 加固修复

修改关键核心代码中的==为===即可

代码语言:javascript
复制
if (//Password validation.
     !empty($passwordDB) && $encryptedPass === $passwordDB // Fixed by using strict comparison '==='.
 )

0X6 参考链接

代码语言:javascript
复制
https://www.exploit-db.com/exploits/47989
https://www.owasp.org/images/6/6b/PHPMagicTricks-TypeJuggling.pdf

--------------------------------

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玄魂工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档