VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动

宝塔 panel phpMyAdmin未授权访问安全漏洞是低级错误吗?(宝塔面板部署php项目)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

周日晚上,一条消息突然在一个群里发布。宝塔面板上的phpmyadmin出现了未经授权访问漏洞的紧急漏洞警告,并给出了大量存在漏洞的URL:

8ab94b0361e4ccb558061222e3e6cf6.png

只需点击其中一个,就会出现一个大大的phpmyadmin后台管理页面,无需任何身份验证和登录。当然,各种神奇的事情也刷爆了社交网络。作为一名冷静的安全研究人员,我当然一笑置之,但我仍然对这个漏洞的原因相当感兴趣,因此我们将在本文中检查整个事情的原因。

1.我们的问题是什么?

首先,让我给出一个结论:这件事绝对不是简单的一个pma目录被忘记删除,或者宝塔面板被疏忽配置错误,也不是一些阴谋论中所说的政府故意留下的后门。

我为什么这么说?首先,根据官方声明,该漏洞仅影响以下版本:

Linux官方版本7.4.2

Linux测试版7.5.13

Windows正式版6.8

此版本是最新版本(bug修复版本)的上一个版本。换句话说,此特定迭代之前的版本面板不受影响。我们试想一下,如果是“后门”或者官方忘记删除的目录,为什么只影响这个版本?而且宝塔面板发展了这么久,积累了400万用户,系统安全也相对成熟。如果有这么差的错误或“后门”,早就应该发现了。

在网上实际查看案例并询问使用宝塔面板的朋友后,我发现在7.4.2之前的版本中没有pma目录,并且默认情况下phpmyadmin的身份验证方法需要输入帐户密码。因此,当宝塔有这个漏洞时,它一定做了以下两件事:

添加了一个新的pma目录,其中包含phpmyadmin。

phpmyadmin的配置文件已在身份验证模式下修改。

那么,我们的问题就变成了,政府为什么要做出这两项改变,目的是什么?

为了研究这个问题,我们需要先安装一个宝塔7.4.2版本。然而,宝塔的安装是一个傻瓜式的单击脚本:

yum install-y wget & wget-oinstall . sh http://download . bt。cn/install/install _ 6.0。sh & shinstall.sh没有给用户提供选择版本号的选项,官方Git也很久没有更新了。如何安装合适的版本(7.4.2)?

其次,安装一个合适的版本

我当然不介意。首先,我安装了宝塔面板的最新版本,使用了上面提到的一键脚本。

安装过程没有任何问题。安装完成后,系统显示的版本号是最新的7.4.3版本,因为在发现这个漏洞后,官方迅速对其进行了修复和升级。不过没关系,我们还是可以找到离线升级包:

http://download.bt。cn/install/update/Linux panel-7 . 4 . 0 . zip http://download . bt。cn/install/update/Linux panel-7 . 4 . 2 . zip http://download . bt。cn/install/Update/Linux panel-7 . 4 . 3 . zip分别是7.4.0/7.4.2/7.4.3版本。我们分别下载并解压缩了它们,并尝试将我们的服务器版本恢复到漏洞版本7.4.2。

在恢复代码之前,让我们断开服务器或将宝塔设置为离线模式:

3cd084c23abeaaf41f95b9cb6cb799a.png

这样做的目的是防止宝塔自动更新版本,并避免难以恢复的代码再次自动升级。

默认情况下,宝塔系统代码安装在/www/server/panel中,然后我们将直接上传此处压缩包中的panel目录,覆盖现有文件。重启宝塔,你会发现系统版本号已经恢复到7.4.2:

83a03bae942e6f71c3617b9ba707c68.png

还没完呢。我们用beyond compare打开7.4.2和7.4.3的压缩包代码,先看看官方是如何修复漏洞的:

04828949f5f39eefbfba453db13b738.png

粗略的,直接判断目录/www/server/phpmyadmin/pma是否存在,如果存在直接删除。因此,尽管我们恢复了系统版本代码,但删除的pma已不在那里,我们需要恢复该目录。

方法也很简单。/www/server/phpmyadmin下有一个phpmyadmin目录,因此我们可以直接复制这个目录:

d7ea051444f1b50c20197487b52fb0e.png

第三,漏洞是什么?

有了环境,我们仍然需要查看代码。

首先,由于7.4.2是一个引入bug的版本,我们来看看7.4.2的官方更新日志:

617af739919d57fd7d13e9cf12f6297.png

用beyond compare打开7.4.0和7.4.2的压缩包代码,并查看添加了哪些代码:

c9a67dd190c79960118bf7cc1a4d5e0.png

可以看到在7.4.2版本中增加了两个视图,分别对应phpmyadmin和adminer。视图中使用了PanelPHP#start方法,这实际上是新添加的:

def start(self,puri,document_root,last _ path = & # 39'): '''@name开始处理PHP请求@ authorhwliang @ param Puri string(uri地址)@return socket或Response & # 39''...#如果是PHP文件,如果是puri

为了修复这个漏洞,7.4.3版本回滚了一些代码,所以这种方式实际上是phpmyadmin在7.4.2版本之前的访问方式:通过端口888下以phpmyadmin_开头的文件夹直接访问phpmyadmin。

在这种旧的访问方法中,888端口是一个单独的Nginx或Apache服务器,整个事情是安全的,您需要输入帐户密码才能访问。

但是这种访问方式有点麻烦,需要额外的888端口,并且每次登录时都必须重新输入密码。因此,官方开发人员提出了一种新的方法,在宝塔后端的python级别上将用户对phpmyadmin的请求转发给php-fpm。这有三个优点:

用户认证直接在python级别完成,与宝塔用户认证统一,不需要多次输入mysql密码。

没有必要对外开放888端口。

使用phpmyadmin不再依赖Nginx/Apache等服务器中间件。

这就是为什么宝塔应该在7.4.2中添加一个与phpmyadmin相关的视图。这个视图是phpmyadmin的代理,它的作用是将用户的请求转发给php-fpm。

当用户第一次以这种方式登录时,系统会自动发送一个包含Mysql帐户密码的数据包,宝塔后端会捕获此时的帐户密码,填写phpmyadmin的配置文件,并将身份验证方法更改为config。对于用户来说,体验是不需要输入任何Mysql密码就可以使用phpmyadmin。

这确实给用户带来了更好的体验。

动词 (verb的缩写)漏洞重现

这时我们应该还有一个疑问:既然官方的目的是“在python级别直接认证用户,并与宝塔用户认证统一”,那么还有认证吗?为什么会有未授权访问漏洞?

我们可以复制这个漏洞。首先,我们以系统管理员身份登录宝塔后台,来到数据库页面,点击“phpMyAdmin”按钮,会弹出如下模态框:

7fa30bdf20eab63dd56755d61cee440.png

本模块中有两种访问模式。“通过Nginx/Apache/OIs访问”是旧版本,“通过面板安全访问”是7.4.2中新添加的代理模式。

我们单击“通过面板安全访问”并抓取数据包,我们将捕获这样一个数据包:

6914eecff6f59abcea46f1c3a8522f0.png

宝塔前端将填写我们的Mysql帐户密码并将其直接发送到phpmyadmin。由于我们前面分析的代码,后台直接将帐户密码写入phpmyadmin配置文件中,以实现免身份验证的逻辑。

如果未经身份验证的用户直接访问http://IP:8888/phpmyadmin/index . PHP怎么办?将被直接重定向到登录页面:

4598a34ea51d0c500b02406b886a589.png

如果是这样的话,这个过程就没有漏洞。然而,官方开发者犯了一个错误。他将pma应用程序放在/www/server/phpmyadmin目录中,该目录最初是phpmyadmin的旧访问方法使用的Web根目录。

这意味着我可以通过旧的888端口+pma目录访问新的phpmyadmin,并且新phpmyadmin的配置文件已被官方修改,这最终导致了未经授权的访问漏洞:

0a30c32ee0fbdf5336685701172e2ac.png

那么,如何解决这个问题呢?这也很简单,只需将pma移动到另一个目录。

不及物动词摘要

我们来做个总结。

首先,宝塔面板绝对不弱智。此漏洞不仅仅是将未经授权的pma放在外面并忘记删除它。这实际上会打很多脸,因为大多数人认为这只是phpmyadmin的一个简单的未授权访问漏洞,他们diss 宝塔,但他们没想到这实际上是一个复杂的逻辑错误。

其次,用户体验和安全性绝对不冲突。我真的不喜欢为了确保安全性而牺牲用户体验的做法。所以希望宝塔官方不要因为这个漏洞而彻底回滚代码(据说7.4.3的更新只是权宜之计),该改进的还是要改进。

我已经好几年没有使用Linux面板了,这次我重温了2020年的Linux面板。个人感觉宝塔其实是一个比较注重安全性的系统,比如自动生成用户密码、用户名和密码策略、默认Php安全配置、自动版本更新等。和国内很多其他商业系统相比,肯定是差一些的。但是,在查看代码时仍有许多需要改进的地方。我们以后再谈这个。

本文来自https://mp.weixin.qq.com/s/3ZjwFo5gWlJACSkeYWQLXA,微信官方账号。

以上就是宝塔面板phpMyAdmin未授权访问的安全漏洞。是低级错误吗?更多详情请关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:宝塔 panel phpMyAdmin未授权访问安全漏洞是低级错误吗?(宝塔面板部署php项目) https://zhujicankao.com/100378.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 宝塔 panel phpMyAdmin未授权访问安全漏洞是低级错误吗?(宝塔面板部署php项目)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!