[NPUCTF2020]ReadlezPHP1怎么回事?

简介: NPUCTF2020的ReadlezPHP1题目展示了文件包含漏洞的利用和防御。通过对PHP代码的审计,可以发现并利用文件包含漏洞来读取敏感文件或执行恶意代码。然而,通过严格限制用户输入、使用绝对路径、禁用URL包含和避免动态包含,可以有效地防御文件包含漏洞,从而提高Web应用的安全性。在实际开发中,应时刻保持安全意识,定期进行代码审计和安全测试,以防范潜在的安全风险。

NPUCTF2020 ReadlezPHP1 题目分析

在CTF(Capture The Flag)比赛中,ReadlezPHP1是一个非常典型的Web安全题目。本文将详细分析这道题目,包括其漏洞点、利用方式和防御措施。具体内容如下:

一、题目背景

ReadlezPHP1是NPUCTF2020比赛中的一道Web题目,主要考察选手对PHP代码审计和文件包含漏洞(File Inclusion Vulnerability)的理解和利用能力。

二、代码审计

通过对题目提供的PHP代码进行审计,可以发现其中存在文件包含漏洞。以下是典型的漏洞代码片段:

<?php
    $file = $_GET['file'];
    include($file);
?>
​

解释:
上述代码直接通过用户输入的 file参数包含文件,没有进行任何过滤或验证,导致可以包含任意文件,从而引发文件包含漏洞。

三、漏洞分析

文件包含漏洞分为两类:本地文件包含(LFI)和远程文件包含(RFI)。在本题中,由于服务器配置限制,通常只允许本地文件包含(LFI)。

利用方式:

  1. 读取敏感文件:攻击者可以通过包含系统文件来读取敏感信息,例如 /etc/passwd文件。

    http://example.com/index.php?file=/etc/passwd
    ​
    
  2. 代码注入:攻击者可以通过包含特定文件进行代码注入。如果可以控制被包含的文件内容,则可以执行任意代码。

    http://example.com/index.php?file=php://input
    ​
    

    然后通过POST请求发送恶意代码。

    POST /index.php?file=php://input HTTP/1.1
    Host: example.com
    Content-Type: application/x-www-form-urlencoded
    
    <?php system('id'); ?>
    ​
    
  3. 日志文件包含:如果服务器将用户请求记录到日志文件中,攻击者可以在User-Agent等头信息中插入恶意代码,然后包含日志文件。

    User-Agent: <?php system('id'); ?>
    http://example.com/index.php?file=/var/log/apache2/access.log
    ​
    

四、防御措施

为了防止文件包含漏洞,开发者应采取以下防御措施:

  1. 严格限制用户输入:对用户输入的文件名进行严格验证和过滤,确保只包含合法文件。

    $whitelist = ['safe1.php', 'safe2.php'];
    if (in_array($file, $whitelist)) {
        include($file);
    } else {
        echo "Invalid file.";
    }
    ​
    
  2. 使用绝对路径:避免直接使用用户输入的路径,使用预定义的绝对路径。

    $file = basename($_GET['file']);
    include("/var/www/html/" . $file);
    ​
    
  3. 禁用URL包含:在 php.ini中禁用 allow_url_include设置。

    allow_url_include = Off
    ​
    
  4. 避免动态包含:尽量避免使用动态包含的方式,使用静态包含文件。

    include('safe1.php');
    include('safe2.php');
    ​
    

思维导图

graph TD;
    A[开始] --> B[代码审计];
    B --> C[漏洞分析];
    C --> D[读取敏感文件];
    C --> E[代码注入];
    C --> F[日志文件包含];
    A --> G[防御措施];
    G --> H[严格限制用户输入];
    G --> I[使用绝对路径];
    G --> J[禁用URL包含];
    G --> K[避免动态包含];
​

分析说明表

步骤 描述 命令/代码
代码审计 检查代码中存在的漏洞 <?php include($_GET['file']); ?>
读取敏感文件 通过文件包含读取系统敏感文件 http://example.com/index.php?file=/etc/passwd
代码注入 通过包含恶意代码文件实现代码执行 http://example.com/index.php?file=php://input
日志文件包含 通过包含日志文件实现代码执行 http://example.com/index.php?file=/var/log/apache2/access.log
严格限制用户输入 验证用户输入的文件名是否在白名单中 if (in_array($file, $whitelist)) { include($file); }
使用绝对路径 使用预定义的绝对路径来包含文件 include("/var/www/html/" . basename($_GET['file']));
禁用URL包含 在php.ini中禁用URL包含 allow_url_include = Off
避免动态包含 使用静态包含文件 include('safe1.php');

总结

NPUCTF2020的ReadlezPHP1题目展示了文件包含漏洞的利用和防御。通过对PHP代码的审计,可以发现并利用文件包含漏洞来读取敏感文件或执行恶意代码。然而,通过严格限制用户输入、使用绝对路径、禁用URL包含和避免动态包含,可以有效地防御文件包含漏洞,从而提高Web应用的安全性。在实际开发中,应时刻保持安全意识,定期进行代码审计和安全测试,以防范潜在的安全风险。

目录
相关文章
|
6月前
|
人工智能 Cloud Native 安全
DeepSeek 给 API 网关上了一波热度
API 网关并不是一个新的概念,但 DeepSeek 的全民化趋势给 API 网关上了一波热度。本文将围绕 API 网关的上下游概念、演进历程和分类、核心能力、DeepSeek 如何接入 API 网关等方面,和大家一起更加立体的重新认识下 API 网关。
471 135
|
8月前
|
JavaScript 前端开发 Shell
Flow-CLI 全新升级,轻松对接 Sonar 实现代码扫描和红线卡点
Flow-CLI 使用的典型场景如:自定义开发一个 Sonar 扫描步骤,以在流水中触发 Sonar 扫描,并以扫描结果作为红线卡点,以保证代码质量;对接三方自有审批平台,在发布前进行检查审批,审批通过才允许发布。接下来,我们就以对接 Sonar 服务为例,手把手教你开发一个带红线功能的 Sonar 扫描步骤。
601 124
|
6月前
|
自然语言处理 搜索推荐 安全
满血上阵,DeepSeek x 低代码创造专属知识空间
本文介绍了如何结合阿里云百炼和魔笔平台,快速构建一个智能化的专属知识空间。通过利用DeepSeek R1等先进推理模型,实现高效的知识管理和智能问答系统。 5. **未来扩展**:探讨多租户隔离、终端用户接入等高级功能,以适应更大规模的应用场景。 通过这些步骤,用户可以轻松创建一个功能全面、性能卓越的知识管理系统,极大提升工作效率和创新能力。
1001 182
满血上阵,DeepSeek x 低代码创造专属知识空间
|
6月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
311 73
|
SQL Python
[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解
[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解
[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解
|
11月前
|
自然语言处理 Serverless API
基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力
本文将演示如何使用事件总线(EventBridge),向量检索服务(DashVector),函数计算(FunctionCompute)结合灵积模型服务[1]上的 Embedding API[2],来从 0 到 1 构建基于文本索引的构建+向量检索基础上的语义搜索能力。具体来说,我们将基于 OSS 文本文档动态插入数据,进行实时的文本语义搜索,查询最相似的相关内容。
450 160
|
6月前
|
内存技术
Synaptics旗下主流WIFI方案选型参考
WIFI行业经过最近十来年的飞速发展,已经显得含金量不高,遍地都是,但是稳定性是检验WIFI品质的唯一标准,潮起潮落,时间会告诉你最终谁是最可靠! WIFI方案方案选型最主要考虑以下三点:WIFI/BT通信标准、通信接口、吞吐量!接下来析下Synaptics旗下对应的方案! 从WIFI/BT通信标准来看: Wi-Fi 6E有:SYN43756E、SYN43711、SYN4382S、SYN4383; Wi-Fi 6有:SYN43752; Wi-Fi 5有:SYN43598、SYN43456; Wi-Fi 4有:SYN43436、SYN43012、BCM430132;
|
Linux
BUU [安洵杯 2019]easy_web
BUU [安洵杯 2019]easy_web
223 0
20基础解决-buuctf-1.RSA1
20基础解决-buuctf-1.RSA1