文件包含漏洞总结及工具分享

article/2025/10/9 19:19:50

PHP文件包含漏洞检测利用总结及神器字典工具分享

漏洞原理

像PHP、JSP、ASP、.NET等脚本语言,都提供了一种包含文件的功能,通过这种方式可以达到复用代码的目的。如果包含的文件路径可控,那么就可能存在文件包含漏洞,攻击者可通过控制文件路径,达到信息泄露和代码执行的效果。

文件包含漏洞分类

文件包含漏洞可分为本地文件包含和远程文件包含。

常见漏洞函数

以下函数在进行文件包含时,包含的内容将直接当做php代码执行。可通过伪协议、相对路径、绝对路径方式进行包含。

include
require
include_once
require_once

以下函数在进行读取文件时,内容只被当做文本读取,可造成任意文件读取漏洞。支持伪协议、相对路径、绝对路径方式进行包含。通过http伪协议进行包含时,等同于服务器通过http方式访问,因此可将文件内容当做php代码执行。php://input、data://伪协议在这里不能执行命令。

highlight_file 
show_source 
readfile 
file_get_contents 
fopen 		//测试发现只有file和compress伪协议可用
file

相对路径访问

./表示当前路径
. ./表示上级路径
我想说的是(.之间没有空格,我输入的有空格):
xxx. ./这样也可以当做当前路径,xxx被解析成了一个目录,xxx目录的上级路径就是当前路径
xxx/xx. ./. ./也是当前路径。

常见伪协议及利用姿势

file://

可用于访问本地文件系统

格式file://绝对路径

限制条件:

绝对路径

allow_url_fopen:off/on

allow_url_include:off/on

利用姿势:

1.读取文件

2.在使用include、require、include_once、require_once时,可将文件当做php脚本执行(一般配合上传文件、写日志等方式getshell)。

php://filter

php://filter:是一种元封装器, 设计用于数据流打开时的筛选过滤应用。

格式:php://filter/参数/参数

image-20210716200457797

  • 字符串过滤器(通过管道符/连接,从左往右执行)

    ​ string.rot13 对字符串执行ROT13转换

    ​ string.toupper转换为大写

    ​ string.tolower 转换为小写

    ​ string.strip_tags去除html和php标记(可以用于绕过死亡EXIT)

  • 转换过滤器

    ​ convert.base64-encode & convert.base64-decode :base64编码/解码 (通过管道符/连接,从左往右执行)

    ​ convert.quoted-printable-encode & convert.quoted-printable-decode:将 quoted-printable 字符串转换为 8-bit 字符串

  • 压缩过滤器(通过管道符/连接,从左往右执行)

    ​ mcrypt.tripledes和mdecrypt.tripledes等

限制条件:

allow_url_fopen:off/on

allow_url_include:off/on

相对路径/绝对路径

利用姿势:

1.读取文件

#resource为需要请求的资源:
php://filter/read=zlib.deflate/convert.base64-encode/string.toupper/resource=../index.php    将../index.php进行zlib压缩再base64再转为大写。php://filter/read=convert.base64-encode/resource=xxx			将xxx进行base64显示	

2.在使用include、require、include_once、require_once时,可将文件当做php脚本执行(一般配合上传文件、写日志等方式getshell)。

php://filter/resource=xxx	

php://input

POST 请求的情况下,可以访问请求的原始数据的只读流。

格式: php://input,POST请求中写入脚本

限制条件:

allow_url_fopen :off/on

allow_url_include:on

防坑指南:

hackbar中发送的POST请求进行了url编码的不行,需要直接使用burp来发送未url编码的脚本内容。

image-20210716202755145

image-20210716202836172

利用姿势:

直接的命令执行漏洞,可写入木马、执行系统命令等,可参考命令执行漏洞的利用和绕过方式。

#在当前路径写入一句话木马
<?fputs(fopen("shell.php","w"),"<?php eval($_post['xxx'];?>")?>	
#执行phpinfo
<?php phpinfo();?>
#执行系统命令
<?php system('whoami');?>

zip://

zip://, bzip2://, zlib:// 均属于压缩流

zip可以访问压缩文件中的子文件,更重要的是不需要指定后缀名

格式:zip://压缩包绝对路径%23压缩包内文件

限制条件:

绝对路径

allow_url_fopen :off/on

allow_url_include:off/on

防坑指南:

#在url中代表页面中的一个位置,#后面的内容不会发送到服务器,所以必须将#编码为%23

image-20210716204944035

利用姿势:

1.结合文件上传功能,可以将任意后缀的文件打包成压缩包,然后修改压缩包名为任意后缀上传。当使用include、require、include_once、require_once时,可将压缩包内的文件当做脚本执行。

compres.bzip2://

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

compress.bzip2和compress.zlib访问的对象可以是任意后缀的文件。

格式compress.bzip2://相对路径或绝对路径

限制条件:

allow_url_fopen :on/off

allow_url_include:on/off

相对路径/绝对路径

利用姿势:

1.读取文件

2.在使用include、require、include_once、require_once时,可将文件当做php脚本执行(一般配合上传文件getshell)。

compress.zlib://

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

compress.bzip2和compress.zlib访问的对象可以是任意后缀的文件。

格式:compress.zlib://相对路径或绝对路径

限制条件:

allow_url_fopen :on/off

allow_url_include:on/off

相对路径/绝对路径

利用姿势:

1.读取文件

2.在使用include、require、include_once、require_once时,可将文件当做php脚本执行(一般配合上传文件、写日志等方式getshell)。

data://

格式:data://text/plain;base64

限制条件:

allow_url_fopen :on

allow_url_include:on

php>=5.2

利用姿势:

#省略text/plain
data://,<?php phpinfo();
data://,<?phpinfo();data://text/plain,<?php phpinfo();
data://text/plain,<?phpinfo();#PD9waHAgcGhwaW5mbygpPz4=是<?php phpinfo()?>进行base64编码
data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=#省略//
data:text/plain,<?php phpinfo();
data:text/plain,<?phpinfo();
data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

http://

http://可以用于本地文件包含和远程文件包含。

格式:http://xxx

限制条件:

allow_url_fopen :on

allow_url_include:on

利用姿势:

通过http伪协议进行本地包含的文件,除了include、require、include_once、require_once函数能够将内容当做命令执行以外,highlight_file、show_source、readfile、file_get_contents、file函数在使用http伪协议时,等同于让服务器自己去访问了这个请求,所以可以通过http伪协议来达到执行php脚本的效果,可参考我的另一篇CTF文章https://blog.csdn.net/u013797594/article/details/118463622

通过http进行远程文件包含时,如果使用include、require、include_once、require_once则可以直接包含php脚本内容让服务器执行。

phar://

phar类似于JAR,主要用来给文件打包,phar://伪协议可以读打包后的文件。

格式:phar://归档文件/归档内的文件名

限制条件:

php>=5.3

phar.readonly = Off

相对路径/绝对路径

利用姿势

1.读取zip压缩包内容

phar支持zip的归档方式,可通过phar://伪协议读取zip中的内容,这里和zip的区别就是zip访问通过%23访问子文件,phar直接通过/访问子文件(一般配合文件上传getshell)。

php.xxx文件后缀任意,在里面写入php脚本语言将phpinfo.xxx压缩成.zip文件,然后可以修改zip为任意后缀。在文件包含漏洞处通过phar://相对路径或绝对路径zip压缩包名/压缩包中任意文件

2.phar反序列化漏洞

利用条件:

文件上传(不受后缀名限制)+文件包含(可用phar://伪协议,且使用了受影响函数会进行反序列化操作)+反序列化利用条件

其中反序列化的利用条件有2个:

1.上下文存在类的成员变量可控,存在魔术方法被自动调用,当魔术方法被调用时通过修改成员变量达到我们想要的目的。

2.反序列化生成的对象调用了对象的方法,如果存在内置类的方法和这个同名,那么就可以控制反序列化结果生成内置类对象,这样就能调用内置类的方法达到我们想要的目的了,可参考我的一篇CTF文章。https://blog.csdn.net/u013797594/article/details/118726467

绕过方式

%00截断

%00表示字符串结束,所以当url中出现%00时就会认为读取已结束

利用条件:

PHP<5.3.4

GPC off

当GPC开启后,%00会被转义。

大小写

利用条件:

代码正则匹配对大小写敏感,导致通过大小/小写绕过匹配规则。

绕过后缀

测试环境为windows,phpstudy,php5.2。

根据我的测试结果,文件名后面添加 空格 + . “ < > ::$DATA 这几个符号后也是可以正常进行包含的,可以用于绕过正则掉后缀名的限制。(其中&和#在url中有特殊意义,分别用于分割参数和表示页面位置,即使我通过Burp发送了这2个字符php好像也并没有当做文件名接收;+号被转义成了空格)

image-20210717212010816

顺便又发现几个奇怪的姿势:

flag<.php、flag>.php、flag.<php 这样也能被成功包含。

image-20210717211029023

image-20210717211103078

双写

…/./被…/后会剩下…/

利用条件:

绕过过滤…/的情况

长度截断

这个我没测试出来,用的应该不多

去掉后缀

如flag,会自动拼接上后缀 flag.php

利用条件:

代码上去掉了文件后缀,自行拼接了固定文件后缀

php文件包含漏洞检测神器,字典生成器

根据漏洞原理,写了个字典生成工具,已经发布到github上:
https://github.com/StormEyePro/lfi-dic-creater

在这里插入图片描述


http://chatgpt.dhexx.cn/article/CPvFUBVn.shtml

相关文章

漏洞修复-- Linux kernel 资源管理错误漏洞(CVE-2022-32250)

1. 漏洞描述: Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel 5.18.1版本及之前版本存在安全漏洞&#xff0c;该漏洞源于net/netfilter/nf_tables_api.c允许本地用户将权限升级为root用户&#xff0c;攻击者利用该漏洞可导致释放后重用。 2. …

【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell

文件包含漏洞的利用 读取敏感文件 我们可以利用文件包含漏洞读取任意文件&#xff0c;读取文件的时候有利用条件 目标主机文件存在(目标文件的路径、绝对路径、相对路径) 具有文件可读权限 提交参数http://localhost/include/include.php?pathC:\windows\system32\drivers\etc…

渗透测试-文件包含漏洞

文件包含漏洞 文章目录 文件包含漏洞前言一、什么是文件包含漏洞二、文件包含漏洞获取shell1.文件包含漏洞的分类2.利用漏洞获取shell 总结 前言 一、什么是文件包含漏洞 服务器通过php的特性&#xff08;函数&#xff09;去包含任意文件时&#xff0c;由于要包含的这个文件来…

Fvuln-自动化web漏洞检测工具

F-vuln介绍: F-vuln&#xff08;全称&#xff1a;Find-Vulnerability&#xff09;是为了自己工作方便专门编写的一款自动化工具&#xff0c;主要适用于日常安全服务、渗透测试人员和RedTeam红队人员&#xff0c;它集合的功能包括&#xff1a;存活IP探测、开放端口探测、web服务…

Log4j2 漏洞检测工具清单

距离Log4j2漏洞公开已经过去一个月了,它所造成的严重影响已经不需要我们重复提及了。随着时间的推移,新的漏洞会不断出现,旧的漏洞会不断消失,而这个Log4j2中的RCE漏洞可能需要好几年的时间才能得到解决。所以,在接下来的一段时间里,这个漏洞依然是我们需要去关注的重点。…

文件包含漏洞——配合日志文件

此实验中用的是phpstudy2018 靶机IP地址&#xff1a;192.168.212.131 一、前提条件 phpstudy中日志功能默认关闭&#xff0c;得手动修改配置文件开启apache日志功能 重启phpstudy&#xff0c;访问日志文件存在 二、文件包含漏洞测试 第一步&#xff1a;输入<?php php…

【文件包含漏洞】

目录 一、前言 二、文件包含漏洞原理 三、利用条件 四、文件包含漏洞利用 实验一&#xff1a;本地包含和远程包含 实验二&#xff1a;利用文件包含漏洞读取Windows系统敏感信息 实验三&#xff1a;本地包含配合文件上传木马图片 实验四&#xff1a;包含apache日志文…

开源组件漏洞检查工具实践分析

文章目录 Murphysec开源组件漏洞检查工具介绍检测原理JetBrains IDE插件MurphySec Code Scan工具使用介绍支持功能插件安装插件配置一键扫描一键修复功能实践测试命令行工具CLI MurphySec功能特性整理MurphySec Code Scan工具集成JenkinsGitLab 代码库检测工具每周报告推送情报…

文件包含漏洞

【文件包含】文件包含漏洞知识总结 一、什么是文件包含漏洞&#xff1f; 1、文件包含概述 和SQL注入等攻击方式一样&#xff0c;文件包含漏洞也是一种“注入型漏洞”&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务器端执行。 什么叫包含呢…

Vector关于Apache Log4Shell CVE-2021-45105,CVE-2021-45046,CVE-2021-44228 的安全漏洞配合与修复全面详解

Apache Log4j2 是一个基于 Java 的日志记录开源组件。近日&#xff0c;Log4j2 被爆出现安全漏洞&#xff0c;攻击者可以通过向易受攻击的服务器或应用程序发送操纵请求来利用安全漏洞。Vector 德国PREEvison产品团队已经通过官网和客户管理系统及时通知客户&#xff0c;有关PRE…

Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

摘要&#xff1a;二进制SCA工具要想更好的辅助安全人员实现安全审计、降低漏洞检测的误报率&#xff0c;必须向更细颗粒度的检测维度发展&#xff0c;而不仅仅停留在开源软件的层面&#xff0c;同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战。 本文分享自华为云社区…

kali linux渗透测试之漏洞扫描

主题内容就是进行漏洞扫描 文章目录 前言一、Nikto1.Nikto漏洞扫描介绍2.Nikto使用 二、Nessus1.Nessus介绍2.安装nessus3.nessus的简单使用3.nessus扫描之advanced scan 三、 skipfish扫描工具1.介绍2.skipfish的使用3.批量处理4.使用字典5.命令选项6.打开文件 四、 AWVS漏洞扫…

【CVE-2022-0185】Linux kernel [文件系统挂载API] 堆溢出漏洞分析与利用

0x00.一切开始之前 CVE-2022-0185 是 2022 年初爆出来的一个位于 filesystem context 系统中的 fsconfig 系统调用中的一个堆溢出漏洞&#xff0c;对于有着 CAP_SYS_ADMIN 权限&#xff08;或是开启了 unprivileged namespace&#xff09;的攻击者而言其可以利用该漏洞完成本地…

Spring 新版本修复远程命令执行漏洞(CVE-2022-22965),墨菲安全开源工具可应急排查

漏洞简述 3月31日&#xff0c;spring 官方通报了 Spring 相关框架存在远程代码执行漏洞&#xff0c;并在 5.3.18 和 5.2.20.RELEASE 中修复了该漏洞。 漏洞评级&#xff1a;严重 影响组件&#xff1a;org.springframework:spring-beans 影响版本&#xff1a;< 5.3.18 和…

❤️❤️爆肝3万字整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)❤️❤️

小白快速快入门Git 什么是GitSVN VS Git什么是版本控制安装Git谁在操作&#xff1f;Git本地仓库本地仓库构造重点 Git常用基本操作git addgit commitgit diffgit loggit resetgit mvcheckoutgit tagclear Github使用教程什么是Github安装Github添加远程仓库找到key打开Github官…

代码版本管理软件评比

转载的&#xff0c;回头在翻译一下 If you spend time talking to software developers about tools, one of the biggest topics I hear about are version control tools. Once youve got to the point of using version control tools, and any competent developers does,…

Git(代码版本管理软件、工具 详细)

Git 使用步骤 在创建的文件夹里面 。。。 &#xff08;不要用中文名字&#xff09;右键Git Bash Here 小黑框在小黑框里写&#xff1a;git init (意思是初始化一个仓库)&#xff0c;//一个项目一次就可以 会出现一个隐藏的.git文件夹&#xff0c;不要动在里面敲代码就可以了 小…

Git版本管理软件使用

Git是目前世界上最先进的分布式版本控制系统&#xff0c;下面介绍如何使用Git管理项目。 一、下载Window Git工具 https://pan.baidu.com/s/1EF_KybTb32VACzXniFBDdw 下载安装 设置Window环境变量path&#xff0c;包括Git的bin目录 启动CMD窗口&#xff0c;输入git,出现如…

cad图纸版本号管理软件-彩虹EDM图纸管理软件

cad图纸版本号管理软件-彩虹EDM图纸管理软件-由南宁市二零二五科技有限公司 自主研发。 通过安装对应软件接口&#xff0c;彩虹EDM能够与CAD/EDA软件集成通讯&#xff1b;可以读取CAD/EDA图纸信息创建装配关系&#xff0c;在这些软件提供在线菜单&#xff0c;在编辑文件的时候…

03-代码版本管理软件推荐

http://www.gitkraken.com/ GitKraken也同时支持其他的代码托管服务&#xff0c;&#xff08;非GitHub仅有&#xff09;&#xff0c;但是确实并不是所有功能都是完全免费的&#xff08;大家可以搜索GitCracken&#xff0c;但还是希望大家支持正版&#xff09;&#xff1b; 另外…