本文最后更新于 2018年12月21日 8:41 可能会因为没有更新而失效。如已失效或需要修正,请留言!

前言

2018年12月7日,phpmyadmin官方发布公告修复了一个由Transformation特性引起的任意文件包含漏洞

漏洞分析

Transformation是phpMyAdmin中的一个高级功能,通过Transformation可以对每个字段的内容使用不同的转换,每个字段中的内容将被预定义的规则所转换。比如我们有一个存有文件名的字段Filename,正常情况下 phpMyAdmin 只会将路径显示出来。但是通过Transformation我们可以将该字段转换成超链接,我们就能直接在 phpMyAdmin 中点击并在浏览器的新窗口中看到这个文件。

通常情况下Transformation的规则存储在每个数据库的pma__column_info表中,而在phpMyAdmin 4.8.0~4.8.3版本中,由于对转换参数处理不当,导致了任意文件包含漏洞的出现。

这些转换在phpMyAdmin的column_info表中定义,他通常已经存在于phpMyAdmin的系统表中。但是每个数据库都可以生成自己的版本。要为特定数据库生成phpmyadmin系统表,可以这样生成

它将会创建一个pma__*表的集合到你数据库中。

说了这么多,我们来看下具体产生漏洞的代码tbl_replace.php

拼接到$filename的变量$mime_map[$column_name]['input_transformation']来自于数据表pma__column_info中的input_transformation字段,因为数据库中的内容用户可控,从而产生了任意文件包含漏洞。

漏洞利用

  1. 创建一个新的数据库foo和一个随机的bar表,在表中创建一个baz字段,然后把我们的php代码写入session
  2. 创建phpmyadmin系统表在你的foo数据库中
  3. 将篡改后的Transformation数据插入表pma__columninfo中:将yourSessionId替换成你的会话ID,即COOKIE中phpMyAdmin的值
  4. 然后访问

    如果利用成功,则会返回phpinfo();
喜欢这篇文章的话就点一点喜欢吧!