欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

关于phpMyAdmin 4.8.x LFI to RCE的一些分享

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿

一、前言
这篇文章的出发点是在做渗透的过程中,如果遇到phpMyAdmin4.8.x,不需要再像常规那样有file权限才能RCE,这里只要结合后台本地文件包含和insert权限或select权限就可以RCE。虽然这是一个需要后台登陆才能利用的漏洞,但是这个漏洞的绕过方式可以作为一个经典的代码审计案例来学习。本文先介绍了如何绕过白名单实现本地文件包含,然后又介绍了如何结合insert权限或select权限获取到RCE。
二、漏洞介绍
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。
2.1漏洞描述
在phpMyadmin 4.8.x版本中,程序没有严格控制用户的输入,攻击者可以利用双重编码绕过程序的白名单限制,造成LFI漏洞。
2.2受影响的系统版本
phpMyadmin 4.8.0
phpMyadmin 4.8.1
2.3.漏洞编号
CVE-2018-12613
三、漏洞细节
在/index.php     56行:

这里的target 可以直接传值输入。我们可以传入一个本地文件路径去让其包含,就会造成LFI漏洞。
首先,我们满足4个条件:
1.传入的target 需要是一个字符串。
2.不能以/index/ 开头。
3.不能在$target_blacklist数组内。

4.满足checkPageValidity函数要求。
跟踪一下checkPageValidity函数
在/libraries/classes/Core.php  443行:

该函数内,有三处返回ture的地方,只要有任意一处返回ture就可以。观察这三处,有一个共同点,都是需要$page在$whitelist数组中内才会返回true。

我们先看第一个返回true的地方。

这里的$page在in_array之前没有经过任何的修饰,直接就与$whitelist作比较。没有办法绕过,传入的target值只能为白名单里的文件名才行。很明显,第一个并不能利用。
再来看第二个

先介绍下这些函数的作用:
mb_strpos()函数的意思是查找字符串在另一个字符串中首次出现的位置。
mb_substr()函数的意思是:
string mb_substr ( string $str, int $start [, int $length = NULL [, string $encoding = mb_internal_encoding()]] )
从$str字符串中,提取从$start位置开始,长度为$length的字符串。
可以看出,第二个可以返回ture,我们利用db_sql.php?/../../格式就可以达到目的,绕过白名单限制。那是不是这样就可以造成漏洞了呢?
假设我们用db_sql.php?/../../../aaa.txt来绕过白名单限制进行包含文件。

那这里就是 include ‘db_sql.php?/../../../aaa.txt’。
这种格式并不能跨路径包含,因为php程序把?号后面的东西当成是传入db_sql.php文件的参数。
再来看第三个:

第三个和第二个对比多出了个urldecode()函数。
而问题恰恰出在了这个urldecode()函数。
我们可以利用双重编码绕过,将?经过两次编码%253f就可以绕过白名单验证。
原因是:
%253f 传入时,首先会被自动解码一次,变成%3f。然后urldecode()再解码一次,就变成了 ?。 成功绕过了白名单限制。
这种情况下include的包含情况就是这样的,也就可以任意包含本地文件了。
include  db_sql.php%3f/../../../aaa.txt
四、漏洞利用
4.1包含本地系统文件
Payload:
/index.php?target=db_sql.php%253f/../../../../../../windows/system.ini

4.2命令执行
这里有两种姿势可以造成RCE。
4.2.1利用mysql的data文件:
创建一个名为abc的表,并且字段设置为。

保存,然后会在\MySQL\data\test目录下生成三个以数据表名命名的文件。(test为数据库名称)。
如果你不知道data文件路径,可以用sql查询来获取到它的绝对路径。
show variables like '%datadir%';

[1] [2]  下一页

(责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。