# 文件包含 - 原理 & 分类 & 利用 & 修复
1 、原理
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,
直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。
在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞
1.1 、分类
本地包含 -Local File Include-LFI
远程包含 -Remote File Include-RFI
差异原因:代码过滤和环境配置文件开关决定

2 、白盒审计:( CTFSHOW )
- 白盒发现:
1 、可通过应用功能追踪代码定位审计
2 、可通过脚本特定函数搜索定位审计
3 、可通过伪协议玩法绕过相关修复等
PHP : include 、 require 、 include_once 、 require_once 等
include 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require 函数出现错误的时候,会直接报错并退出程序的执行
Java : java.io.File 、 java.io.FileReader 等
ASP.NET : System.IO.FileStream 、 System.IO.StreamReader 等
3 、黑盒分析:
- 黑盒发现:主要观察参数传递的数据和文件名是否对应
URL 中有 path 、 dir 、 file 、 pag 、 page 、 archive 、 p 、 eng 、语言文件等相关字眼
4 、利用
本地利用思路:
1 、配合文件上传
2 、无文件包含日志
3 、无文件包含 SESSION
4 、无文件支持伪协议利用
参考:
https://blog.csdn.net/unexpectedthing/article/details/121276653



自定义session文件 条件竞争访问session文件 触发创建新文件
session文件一般在linux中var/lib/php/session windows中是C://windows/Temp

