0x00.影响版本
Version 4.6.x (<4.6.3)
Version 4.4.x (<4.4.15.7)
phpMyAdmin是一个web端通用MySQL管理工具,上述版本在central_columns.lib.php文件里的db参数存在sql注入漏洞,攻击者利用此漏洞可以获取数据库中敏感信息,甚至可以执行任意命令
0x02.测试环境
Windows7(X64)+PHP5.5.12+Apache/2.4.9+phpMyAdmin4.6.2
0x03.漏洞详情
PMA_getColumnsList出现在大约135行
PMA_getCentralColumnsCount出现在大约94行
PMA_getCentralColumnsListRaw出现在大约49行
我们应该尽量选择不需要满足过多if条件语句以及位置尽量靠前的不危险函数分析,跟进PMA_getCentralColumnsCount函数:
该函数同样在central_columns.lib.php文件里大约17行
根据接下来的if语句,我们需要使得$cfgRelation['centralcolumnswork']不为false,才能使程序完整执行下去,那么$cfgRelation['centralcolumnswork']是个什么变量呢?
跟进函数PMA_getRelationsParam(在libraries/relation.lib.php大约61行)
我们知道,phpMyAdmin在没有自定义配置文件时会默认加载libraries/config.default.php中的配置;要自定义配置文件,我们只需要在phpMyAdmin根目录将config.sample.inc.php文件copy为config.inc.php,并将41~44/47~68行取消注释,43以及44行改为MySQL用户(需要与攻击时phpMyAdmin的登录用户一致):
接下来回到central_columns.lib.php文件PMA_centralColumnsGetParams函数中,
我们在与之前同样的位置打印一下$cfgCentralColumns变量,我们发现页面已经能让你能够dump出数据了,说明程序已经能够向下执行,$cfgRelation['centralcolumnswork']变量为True
我们知道之前我们创建的数据库phpmyadmin存在一个数据表pma_central_columns,而任意一个数据表的任何字段都可以添加进入pma_central_columns,在创建新的表或者添加字段时就能从此表中直接选取插入,所以我们能看出central_columns是作为储存一些关键字段,以方便添加外键时使用。
0x04.漏洞修复
1.使用Utils::sqlAddSlashes函数对libraries/central_columns.lib.php的$db参数转义,
或者升级phpMyAdmin Version4.6至4.6.3,Version4.4 升级至4.4.15.7以修复此漏洞
0x05.漏洞总结
phpMyAdmin本身作为数据库管理工具,登录后的注入显得相当鸡肋,最近的无需登录漏洞也是出在2.8.3左右版本。而从出现漏洞的文件来看,同一个文件仅仅部分函数进行了转义防护,这也可以看出开发人员在修复漏洞时“指哪修哪”,而最近以色列安全研究人员@e3amn2l提交的近20个漏洞中也出现了相似的未转义引起的漏洞,更加印证了这一点。
因此我认为安全从业人员在接收到安全漏洞时,应该首先构思最优的安全修复指南,而不是直接交给开发人员进行修复,多一个流程也可尽量避免在同一个地方重复跌倒。
0x06.参考资料
http://smita786.blogspot.com/2014/06/gsoc14-coding-week-3-using-central-list.html
2016年phpMyAdmin漏洞统计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论