文件包含
- 文件包含漏洞
web应用对用户输入没有进行严格过滤就带入文件包含函数中执行,在代码引入其他文件作为PHP文件执行时,未对文件进行严格过滤,导致用户指定任意文件,都作为php文件解析执行。
文件包含漏洞也是一种注入型漏洞,输入一段用户能够控制的脚本或代码,并让服务端执行。
包含:PHP中,把重复使用的函数写入单个文件中,在使用该函数时,直接调用此文件,无需再次编写函数,这个过程叫包含。
1、本地文件包含:读取和打开本地文件
2、远程文件包含:通过HTTP、HTTPS、PHP伪协议等加载远程文件,在php.ini中开启allow_url_include、allow_url_fopen选项。 开启后可以直接执行任意代码。 - PHP文件包含函数
1、include():使用此函数,只有代码执行到此函数时才将文件包含进来,发成错误时之警告并继续执行。
2、include_once():功能与前者一样,区别在于当重复调用同一文件时,程序只调用一次。
3、require():使用此函数,只要程序执行,立即调用此函数包含文件,发生错误时,会输出错误信息并立即终止程序。
4、require_once():功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。 - 文件包含利用
1、读取任意敏感文件
2、远程包含shell
3、图片上传并包含图片shell
4、使用为协议
5、包含日志文件GetShell
6、截断包含 - 文件包含修复方案
1、禁止远程文件包含allow_url_include=off
2、配置open_basedir=指定目录,限制访问区域,防止目录遍历。
3、过滤../等特殊符号
4、修改Apache日志文件的存放地点
5、开启魔术引号magic_quotes_qpc=on
6、尽量不使用动态变量调用文件,直接写要包含的文件或动态包含文件设置白名单,只允许读取白名单文件
7、php版本升级,防止%00截断 - 本地文件包含LFI
1、配合文件上传使用
当找不到文件上传漏洞,无法上传webshell,可以先上传一个图片格式的webshell到服务器,再利用本地文件包含进行解析。
2、包含apache日志文件
对日志文件可读,知道日志文件存储目录,一般情况下日志存储目录会被修改,需要读取服务器配置文件(httpd.conf,nginx.conf)或者根据phpinfo()中的信息来得知
日志记录的信息都可以被调整,比如记录报错的等级,或者内容格式。在用户发起请求时,服务器会将请求写入access.log,当发生错误时将错误写入error.log。
3、包含session文件
找到session内的可控变量,session文件可读写,并且知道存储路径
4、包含临时文件 - 远程文件包含RFI
如果PHP的配置选项allow_url_include、allow_url_fopen状态为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含(RFI) - 文件包含绕过
1、%00截断:php小于5.3.4允许使用%00截断
指定前缀绕过
2、目录遍历:../../../
3、编码绕过:url编码、二次编码、容器/服务器编码
指定后缀绕过
4、利用协议绕过
5、数据溢出,超过目录最大长度字节后面数据被丢弃。 - PHP伪协议
1、file://协议
file://[文件的绝对路径和文件名]用于访问本地文件系统,在CTF中通常用来读取本地文件且不受allow_url_include的影响。
2、php://协议
php://访问各个输入/输出流(I/O streams),
php://filter/convert.base64-encode/resource=文件路径 。用于读取源码,并进行base64编码输出allow_url_fopen :off/on allow_url_include:off/on
php://input用于执行php代码 allow_url_fopen :off/on allow_url_include:on
3、ZIP://协议
zip://绝对路径。zlib://、bzip://
可以访问压缩包里面的文件,当它与包含函数结合时,zip://流会被当作php文件执行。
要用#分割压缩包和压缩包里面的内容,并且#要用url编码成%23。只需要时zip压缩包即可,后缀名可以任意更改。
4、data://协议
5、伪协议利用
本文作者:予遂计划
本文链接:https://www.cnblogs.com/ysjh/p/18719869
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步