php 
 中的文件包含函数:  
 
 
 
 incude 
 :  
 
 
 
 require  
 
 
 
 incude_once  
 
 
 
 require_once  
 
 
 
 为了减少重复性代码的编写;  
 
 
 
 任意后缀的文件当中只要存在 
 php 
 代码就会被当作 
 php 
 执行;  
 
 
 
 本质:由于包含的文件不可控,导致文件包含漏洞的产生  
 
 
 
 文件包含漏洞常见于 
 CTF  
 
 
 
  分类:  
 
 
  
  ①本地文件包含 
  LFI 
  ( 
  local file include 
  )  
 
 
  
  包含的代码需要满足 
  php 
  的语法规范,无配置文件要求  
 
 
  
  
  ②远程文件包含 
  RFI(remote file include)  
 
 
  
  php 
  是否开启远程文件包含,受 
  allow_url_include=off 
  (默认配置),在 
  php.ini 
  文件中  
 
 
  
  该漏洞的前提条件 
  allow_url_include=on  
 
 
  
  
  windows 
  中路径位置 
 
 
  
  
 
  
 
  
   linux 
   中  
  
 
   
   文件位置 
  
 
   
   
 
   
    文件内容可通过 
    vim 
    配和 
    / 
    快速搜索  
   
 
    
    改完之后需重启 
    apache 
    服务 
   
 
    
    
 
    
     当靶机没有红色证明修改配置成功,既 
     fi_remote.php 
     不报红  
    
 
     
     
 
     
      实验:  
     
 
      
      在物理机中设置一个 
      1.txt 
      文件  
     
 
      
      文件内容如下:  
     
 
      
      
       <?php  
      
 
       
       phpinfo();  
      
 
       
       ?> 
      
 
       
       
        通过虚拟机中的 
        pikachu 
        容器去访问该文件  
       
 
        
        
         访问成功之后,结果如下, 
        
 
         
         
 
         
          也可将命令替换为任意文件操作,此时打开虚拟机检测目录是否存在  
         
 
          
          
           <?php  
          
 
           
           system( 
           'mkdir 666' 
           );  
          
 
           
           //phpinfo();  
          
 
           
           ?>  
          
 
           
           
            如果本机访问正常,容器无法访问物理机 
            web 
            服务可选择关闭防火墙(最方便)  
           
 
            
            
             或修改网络状态为专用网络 
            
 
             
             
              目录穿越 
              & 
              文件包含  
             
 
              
              由于用户输入可控,且后端代码未限制访问文件的路径,可拼接任意路径访问任意文件  
             
 
              
              
               ../../../../../../../../../../../../../../../../../../../etc/passwd 
              
 
               
               
                伪协议在文件包含中的应用  
               
 
                
                如果后台代码中存在指定路径的情况,协议的使用会受限  
               
 
                
                file:// 
                文件路径  
               
 
                
                php://fliter/  
               
 
                
                常用  
               
 
                
                ① 
                convert.base64-encode/resource 
                (读取 
                php 
                代码, 
                php 
                文件通过包含会直接加载执行)  
               
 
                
                ② 
                read=string.rot13/resource 
                ()  
               
 
                
                等等。。。。。 
               
 
                
                编码转换较好用,可最大限度规避检测 
               
 
                
                 php://input  
                 接收 
                 post 
                 传参数据  
                
 
                 
                 受配置  
                
 
                 
                 allow_url_open  
                
 
                 
                 allow_url_include  
                
 
                 
                 影响 
                
 
                 
                 
 
                 
                  data://text/plain, 
                  数据  
                 
 
                  
                  data://text/plain;base64, 
                  编码后的数据( 
                  base64 
                  编码后)  
                 
 
                  
                  注: 
                  get 
                  请求中 
                  + 
                  会变成空格,故需要使用 
                  url 
                  编码处理 
                  + 
                  ; 
                 
 
                  
                  
 
                 


















