文件包含漏洞原理

什么是文件包含

为了更好使用代码的重用性 , 引入了文件包含函数 , 可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。

文件包含漏洞的成因是什么

在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,
用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

<?php
	$file= $_GET['file'];
	include($file);
?>

PHP 文件包含函数

Include    
				include语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中

Include_once 
				include_once() 语句是指在脚本执行期间包含并运行指定文件

require   
				运行指定文件, 文件只处理一次(实际上,文件内容替换 require() 语句)

require_once
        运行指定文件, 文件只处理一次 ,会检查该文件是否已经被包含过,如果是则不会再次包含。

highlight_file 
      highlight_file() 函数对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮。
      提示:用于高亮的颜色可通过 php.ini 文件进行设置或者通过调用 ini_set() 函数进行设置。
      注释:当使用该函数时,整个文件都将被显示,包括密码和其他敏感信息!

show_source
			show_source() 函数对文件进行语法高亮显示
    	 语法  show_source(filename,return)
          filename	必需。要进行高亮处理的 PHP 文件的路径。
          return	可选。如果设置 true,则本函数返回高亮处理的代码。

readfile
    	readfile() 函数读取一个文件,并写入到输出缓冲。
			如果成功,该函数返回从文件中读入的字节数。如果失败,该函数返回 FALSE 并附带错误信息。
			您可以通过在函数名前面添加一个 '@' 来隐藏错误输出。
    	语法 readfile(filename,include_path,context)

file_get_contents
    	把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
    	file_get_contents(path,include_path,context,start,max_length)
fopen
    	函数打开一个文件或 URL。
  	
file
    	file() 函数把整个文件读入一个数组中。
    	file(path,include_path,context)

本地文件包含

本地文件包含漏洞利用(也称为 LFI)是通过利用应用程序中实施的易受攻击的包含过程来包含服务器本地已经存在的文件的过程。例如,当页面接收到必须包含的文件的路径作为输入,并且此输入未正确清理时,就会发生此漏洞,从而允许注入目录遍历字符(例如点-点-斜线) . 尽管大多数示例都指向易受攻击的 PHP 脚本,但我们应该记住,它在 JSP、ASP 等其他技术中也很常见

远程文件包含

远程文件包含(也称为 RFI)是通过利用应用程序中实施的易受攻击的包含程序来包含远程文件的过程。例如,当页面接收到必须包含的文件的路径作为输入,并且此输入未正确清理,从而允许注入外部 URL 时,就会发生此漏洞。

  • allow_url_fopen: 为ON时,能读取远程文件 ,例如file_get_contents()就能读取远程文件
  • allow_url_include : 为ON时,就可以使用include和requrire 等方式包含远程文件

常见的敏感信息路径:

Windows系统

c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息

Linux/Unix系统

/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/my.conf // mysql 配置文件

日志文件路径

(1) apache+Linux日志默认路径
    /etc/httpd/logs/access_log   或   /var/log/httpd/access_log
(2) apache+win2003日志默认路径
    D:xampp apachelogsaccess.log
    D:xampp apachelogserror.log
(3) IIS6.0+win2003默认日志文件
    C:WINDOWSsystem32Logfiles
(4) IIS7.0+win2003 默认日志文件
    %SystemDrive%inetpublogsLogFiles
(5) nginx 日志文件z
    日志文件在用户安装目录logs目录下
        如安装路径为/usr/local/nginx,
        则日志目录在/usr/local/nginx/logs

伪协议

image.png

  • php://filter 是一种元封装器 , 设计用于数据流打开时的筛选过滤应用
  • data:// 同样类似与php://input 可以让用户来控制输入流
  • php://input 可以访问请求的原始数据的只读流 ,将post请求的数据当作php代码执行
  • phar://xxx.png/shell.php 解压缩包的一个函数 ,不管后缀是什么 ,都会当作压缩包来解压
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值