CVE-2016-5734分析
针对phpMyAdmin 4.6.2 - Authenticated Remote Code Execution进行漏洞复现并分析。
漏洞简述
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。在4.6.2版本中preg_replace /触发的callback导致命令执行。
漏洞分析
复现过程
下载POC并执行即可。
漏洞分析
这个漏洞出现在TableSearchController.php中的getRegexReplaceRows函数。
跟进/libraries/controllers/table/TableSearchController.php,第708行定义getRegexReplaceRows函数,在第731行处$find存在任意一个范围符号的时候,在$find前面加上/。
在661行getReplacePreview函数调用了getRegexReplaceRows。
在613行findAction函数调用了getReplacePreview。
在175行indexAction函数调用了findAction,当searchType为replace调用findAction。
在/tbl_find_replace.php第33行调用indexAction。
根据以上可得知,调用getRegexReplaceRows函数的流程为:
1 | /tbl_find_replace.ph → |
当row[0]成功匹配$find即可执行命令,在716,717行存在db、table两个成员。
在/libraries/controllers/TableController.php第20、25行分别定义了$db、$table。
回溯Controller类,跟进/libraries/di/Container.php,在51行定义get函数。
当$find构造为0/e0,preg_replace将$find变成/0/e0/,在php5.5以下发生截断,变成preg_replace(/0/e, command,0/e)。由此代码执行产生。
修复建议
升级phpMyAdmin。