漏洞分析-CVE-2019-12922_phpMyAdmin小于等于4.9.0.1CSRF漏洞分析

最近安全圈曝光了很多漏洞,之前审计了泛微 OA
RCE 漏洞,今天审计分析phpMyAdmin_CSRF漏洞

#事件背景

2019年9月16日,网络上曝光phpMyAdmin4.9.0.1版本中存在跨站请求伪造漏洞,攻击者可利用该漏洞通过受影响客户端向服务器发送非预期的请求。这个漏洞影响phpMyAdmin的版本最高到4.9.0.1,这是phpMyAdmin目前最新的发行版本。因为这个漏洞危及的范围比较小,仅允许攻击者删除目标服务器里的,phpMyAdmin控制面板中关于setup页面中的服务器配置。攻击者所需要做的仅仅是发送一个精心设计的URL给网页的管理员,这个管理员需要在他的浏览器登录到phpMyAdmin控制面板,然后在同一个浏览器点击这个URL,就会不知不觉地删除了配置里的服务器。

#漏洞信息

漏洞名称 phpMyAdmin_CSRF漏洞
CVE编号 CVE-2019-12922
CNVD编号 CNVD-2019-31657
影响版本 phpMyAdmin <=4.9.0.1(据说phpMyAdmin 5.0.0-alpha1版也存在)
威胁等级 中危
公开时间 2019年9月16日

#漏洞分析

1.什么是CSRF?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为One Click
Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

上图为CSRF攻击的一个简单模型:用户访问恶意网站B,恶意网站B返回给用户的HTTP信息中要求用户访问网站A,而由于用户和网站A之间可能已经有信任关系导致这个请求就像用户真实发送的一样会被执行。

2.静态审计

漏洞存在于phpmyadmin/setup/index.php文件,该文件为安装phpmyadmin的脚本,可以在此脚本中创建连接新的Mysql数据库服务器

允许get请求参数为page,

再跟进到/setup/frames/$page.inc.php 也就是 /setup/frames/server.inc.php文件

这个php从Get请求获取了 mode和id这两个参数的值,

mode有三种(’edit’、’remove’、’revert’)

当mode=remove且Servers/$id不为null时,使用removeServer方法删除server然后Location跳转到/phpmyadmin/setup/index.php首页

我们再跟进看下phpMyAdmin/libraries/config/ConfigFile.class.php的removeServer方法

unset这句是关键 unset函数是销毁指定变量,在这里就是删掉$server

```unset($_SESSION[$this->id][‘Servers’][$last_server]);```

导致CSRF的根据原因为phpmyamdin,没有全局token,只有在登录/phpmyadmin/index.php后,才会创建token

所以在设置服务器页面phpmyadmin/setup/index.php是没有token的,故此无法防御跨站请求伪造攻击,这样$server就通过CSRF漏洞被删除了。

但是这个漏洞不能执行Sql语句拖库,故此危害等级不高,但是利用起来很简单,攻击者只需要知道服务器的URL,就能利用CSRF漏洞删除phpmyamdi配置中的服务器。

#漏洞复现

在浏览器打开

http://192.168.21.56/phpmyadmin/setup/index.php

为了方便后面CSRF漏洞能够成功删除服务器成功先New一个服务器

点击New server就跳转到服务器创建页面

save之后跳转到之前setup/index.php页面

可以看到这里Delete按钮就是 Poc中的地址,点击这个delete就能删除这个server

开始复现CSRF漏洞,构造Poc,新建一个CSRF.html文件写入以下代码

1
2
3
<p>Deleting Server 1</p>
<img src="
http://192.168.31.56/phpmyadmin/setup/index.php?page=servers&mode=remove&id=1";style="display:none;"/>

在同一个浏览器中执行

通过抓包设置断点可以看到该请求

该请求删除了id为1的server

再返回/setup/index.php 查看发现之前新建的 id为1 ,name为11111的server被删除

本次分析复现的代码及POC会在本人的Github上分享https://github.com/securitycn/

#修复建议

厂商尚未提供漏洞修复方案,请关注厂商主页更新: https://www.phpmyadmin.net/

#免责声明

本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。

#版权

本文为作者原创禁止一切非授权转载和抄袭行为,如需转载请联系在公众号后台留言(留言请说明来意),转载请注明出处及下方二维码。

#求关注

欢迎大家留言,喜欢文章的朋友可以关注本公众号

微信公众号:securitycn

博客:https://securitycn.github.io

Github: https://github.com/securitycn

扫码关注公众号(SecurityCN) wechat
欢迎您扫码关注SecurityCN(微信公众号:securitycn),本号会发布一些个人学习及研究文章,包括但不限于漏洞分析、漏洞挖掘、代码审计、IOT安全、比赛、培训认证等
坚持原创技术分享,您的支持将鼓励我继续创作!