普通网友 2025-09-02 23:00 采纳率: 98.6%
浏览 3
已采纳

PHP文件包含CTF绕过中,如何利用伪协议绕过过滤?

在PHP文件包含漏洞利用中,常通过伪协议绕过过滤机制。常见的技术问题是:如何利用`php://filter`伪协议读取敏感文件,如`/etc/passwd`,在存在白名单或路径限制的情况下实现本地文件包含(LFI)到远程代码执行(RCE)的跨越?
  • 写回答

1条回答 默认 最新

  • 舜祎魂 2025-10-22 03:30
    关注

    PHP文件包含漏洞中伪协议利用技术详解

    1. PHP文件包含漏洞基础

    PHP中的文件包含函数(如include()require())在处理用户输入时若未正确过滤,可能导致本地文件包含(LFI)或远程文件包含(RFI)漏洞。攻击者可借此读取敏感文件、执行任意代码。

    2. 伪协议在PHP中的作用

    PHP支持多种伪协议,如php://filterphp://inputdata://等,用于数据流处理。其中,php://filter常用于在读取或写入流时进行编码转换,攻击者可利用其绕过路径限制。

    • php://filter/read=convert.base64-encode/resource=:读取文件并进行Base64编码。
    • 配合LFI漏洞可读取系统敏感文件如/etc/passwd

    3. 利用php://filter读取敏感文件

    假设存在LFI漏洞的代码如下:

    
    include($_GET['page'] . ".php");
        

    若过滤机制限制了路径(如不允许包含/etc/passwd),攻击者可尝试:

    
    ?page=php://filter/read=convert.base64-encode/resource=/etc/passwd
        

    服务器响应将返回Base64编码的文件内容,解码后即可获取明文。

    4. 从LFI到RCE的跨越

    若仅能读取文件而不能执行代码,则攻击者需寻找其他方式实现RCE。常见方法包括:

    1. 利用日志文件写入PHP代码(如访问日志/var/log/apache/access.log)。
    2. 通过php://input伪协议直接执行代码(需允许远程文件包含)。
    3. 结合会话文件(/var/lib/php/session/sess_*)注入恶意代码。

    5. 绕过白名单限制的技巧

    部分系统使用白名单机制限制包含路径,例如:

    
    if (in_array($_GET['page'], ['home', 'about', 'contact'])) {
        include($_GET['page'] . ".php");
    }
        

    攻击者可通过以下方式绕过:

    • 使用路径穿越技巧:?page=../../etc/passwd(需未过滤../)。
    • 利用PHP封装器:?page=php://filter/...

    6. 防御与加固建议

    为防止文件包含漏洞被利用,应采取以下措施:

    防御措施说明
    避免动态包含用户输入尽量使用静态文件或白名单机制控制包含内容。
    过滤特殊字符../://等字符进行严格过滤。
    关闭远程文件包含设置allow_url_include=Off

    7. 攻击流程示意图

    graph TD
        A[用户输入可控参数] --> B{存在文件包含漏洞?}
        B -->|是| C[尝试读取敏感文件]
        C --> D[使用php://filter伪协议]
        D --> E[获取Base64编码内容]
        E --> F[解码获取明文文件]
        F --> G{是否可写入PHP代码?}
        G -->|是| H[注入恶意代码]
        H --> I[实现远程代码执行]
            
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 9月2日