暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

phpMyAdmin-4.8.1文件包含漏洞

是恒恒呐 2021-04-14
936

什么是文件包含漏洞:

1.  PHP文件是可以直接执行包含的文件的代码,包含的文件格式是不受限制的,只要能正常执行即可。

2.  文件包含不是漏洞但是能被攻击人员控制就是漏洞了

文件包含分为本地文件包含(local file include,LFI)是只能包含本地文件,大多出现在模块加载,模板加载,cache调用的地方。远程文件包含(remote file include,RFI)是指可以包含远程文件的漏洞但是需要设置allow_url_include=On,php5.2之后此选项可修改范围是PHP_INI_ALL

文件包含函数:

1.  include 在包含文件出错时依然往下执行

2.  require 在包含文件出错时直接报错退出执行

3.  include_once()和require_once如果文件被包含过一次,就不在重复包含

本地复现:

  

  


发现包含函数中存在变量

 

跟进发现4个条件


要想执行到61行则要满足这4个条件(1,传入的target变量是字符串 2,传参中不能以index开头 3,传参非$target_blacklist数组中的 4,满足Core类中的checkPageValidity函数)

 

跟进$target_blacklist

发现数组中有import.phpexport.php

定位 checkPageValidity函数


发现$_page在$whitelist中时返回true

我们不会传入第二个形参,所以$whitelist=self::$goto_whitelist

跟进$goto_whitelist


发现白名单。

假设我们用db_sql.php?/../../../aaa.txt来绕过白名单限制进行包含文件但这种格式并不能跨路径包含,因为php程序把?号后面的东西当成是传入db_sql.php文件的参数

但是



第三个和第二个对比多出了个  urldecode()函数,我们可以利用 双重编码绕过,将?经过两次编码  %253f就可以绕过白名单验证,当  %253f传入时,首先会被自动解码一次,变成%3f。然后urldecode()再解码一次,就变成了 ?。成功绕过了白名单限制。

因为在mysql文件夹中有对应数据库的目录,里面有frm文件
frm关于表字段文件,所以我们可以进入phpmyadmin中修改或添加带有一句话木马的字段



所以我们构建poc:http://10.101.41.38/phpMyAdmin/phpMyAdmin-4.8.1-all-languages/index.php?target=db_sql.php%253f/../../../../MySQL/data/zkaq/login.frm&8=phpinfo();


防御策略

1、无需情况下设置allow_url_include和allow_url_fopen为关闭

2、对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如open_basedir

3、建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。

4、严格检查include类的文件包含函数中的参数是否外界可控。

 

 


文章转载自是恒恒呐,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论