Loading ...
文件包含漏洞面试题

1. 文件包含具体指什么?

文件包含是编程语言中一种代码复用机制,允许在一个文件中引入另一个文件的内容并执行,常用于模块化开发(如引入公共函数、配置文件等)。

2. 文件包含分为哪两类?如何区分?

  • 本地文件包含(LFI):只能包含服务器本地存在的文件(如/etc/passwd./config.php)。

  • 远程文件包含(RFI):可以包含远程服务器上的文件(如http://attacker.com/evil.php)。

区分核心:是否能加载外部服务器的文件,取决于语言配置和漏洞场景。

3. 文件包含的函数有哪些?

函数名称功能描述执行特性错误处理典型应用场景
include()包含并执行指定文件若文件不存在或包含错误,发出警告(E_WARNING),脚本继续执行产生警告但不终止脚本加载可选文件(如用户自定义模板)
require()包含并执行指定文件若文件不存在或包含错误,触发致命错误(E_ERROR),脚本终止执行触发致命错误并终止脚本加载必需文件(如数据库配置文件)
include_once()包含并执行指定文件,确保文件仅包含一次功能与include()类似,但会检查文件是否已包含产生警告但不终止脚本避免重复包含相同文件
require_once()包含并执行指定文件,确保文件仅包含一次功能与require()类似,但会检查文件是否已包含触发致命错误并终止脚本避免重复包含必需文件

4. 文件包含漏洞的原理?

文件包含函数参数可控(如通过用户输入动态拼接文件路径),且未对参数进行严格过滤时,攻击者可构造恶意路径,导致包含非预期文件(如本地敏感文件、远程恶意脚本),从而执行恶意代码或读取敏感信息。

5. 文件包含的危害有哪些?

  • 读取服务器敏感文件(如配置文件、系统密码文件/etc/passwd)。

  • 执行恶意代码(如包含远程攻击脚本,获取服务器权限)。

  • 触发其他漏洞(如通过包含日志文件注入代码,间接利用漏洞)。

  • 绕过访问控制(如包含受保护的脚本,直接执行内部逻辑)。

6. 文件包含的利用思路是什么?

  1. 判断类型:通过构造本地 / 远程路径,确认是 LFI 还是 RFI。

  2. 寻找可包含文件

    • 本地:尝试包含敏感文件(/etc/passwd/proc/self/environ)、日志文件(Apache/Nginx 日志)、临时文件等。

    • 远程:构造恶意脚本(如 php 一句话木马),通过 URL 包含执行。

  3. 绕过过滤:若路径被过滤,使用编码(../ 编码为 %2e%2e%2f)、截断(%00 截断)、路径拼接等方式绕过。

7. 远程文件包含的必须条件是什么?(含 php 配置开启的两个条件)

  1. 编程语言支持远程文件包含(如 php 默认允许,Java 需特殊配置)。

  2. php 需开启以下两个配置:

    • allow_url_fopen = On:允许通过 URL 打开远程文件。

    • allow_url_include = On:允许通过 include 等函数包含远程文件(php 5.2.0 后默认关闭)。

8. 远程文件包含中,包含 php 文件和包含 txt 文件有什么区别?

  • 包含 php 文件:远程服务器的 php 文件解析后返回到当前服务器。

  • 包含 TXT 文件:若 TXT 文件中包含 php 代码,是否执行取决于语言配置:

    • php 中,TXT 文件的 php 代码默认会被解析执行(只要文件内容符合 php 语法)。

    • 区别在于文件后缀不影响解析,核心是内容是否包含可执行代码。

9. 网站只有本地包含可以怎么利用?

  1. 读取敏感文件:包含 /etc/passwd、数据库配置文件(config.php)、SSH 密钥等。

  2. 包含日志文件:向服务器日志(如访问日志)注入 php 代码(通过 User-Agent 或请求参数),再包含日志文件执行代码。

  3. 利用临时文件:若目标有文件上传功能(即使不上传恶意文件),可包含上传产生的临时文件(如 php 临时文件 phpXXXXXX)。

  4. Session 文件包含:若 Session 内容可控(如用户输入存入 Session),注入代码后包含 Session 文件(默认路径 (/var/lib/php/sessions/sess_<sessionid>))。

10. 若已知某网站仅存在本地文件包含漏洞,且没有文件上传漏洞及其他漏洞,如何 getshell?

核心思路:寻找可写入的文件并注入代码,再通过 LFI 包含执行:

  1. 利用日志注入

    • 向服务器日志(如 Apache 访问日志)注入 php 代码(如在 User-Agent 中添加 <?php eval($_POST['cmd']);?>)。

    • 包含该日志文件,执行注入的代码,获取 Shell。

  2. Session 注入

    • 若用户输入(如用户名)会存入 Session,在输入中注入 php 代码。

    • 找到 Session 文件路径(如通过报错获取),包含该文件执行代码。

11. 文件包含防御措施有哪些?

  1. 设置包含文件白名单:强制限制包含路径,仅允许包含指定目录下的文件,例如/var/www/include/

  2. 路径过滤与校验

    • 禁止目录穿越:使用realpath()basename()过滤参数,防止../../攻击。

    • 校验文件扩展名:确保包含文件为预期类型,如.php。

  3. 设置 PHP 包含的文件目录:利用 open_basedir 安全机制,限制 PHP 只能访问特定目录。

  4. 禁用危险配置:

    关闭远程包含:在php.ini中设置:
    ini
    allow_url_include = Off
    allow_url_fopen = Off (非必需时关闭)
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇