一天一道CTF 第五天(filter协议文件包含)

本文介绍了解决ACTF2020新生赛中Include挑战的方法。通过利用php://filter协议进行文件包含攻击,成功获取并解码了base64加密的flag。文章还提供了一个用于参考的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[ACTF2020 新生赛]Include
网页里有个tips,点进去很容易发现就是在引导我们用文件包含
在这里插入图片描述
我们可以用php://filter协议来实施文件包含,payload为?file=php://filter/read=convert.base64-encode/resource=flag.php(或者把read=去掉也可以)
convert.base64-encode把读的内容进行base64-encode编码,resource=flag.php说明读取的文件。最后得到base64加密过的flag,网上找解码器即可。
在这里插入图片描述
文件包含漏洞可以参考https://www.smi1e.top

### CTF 文件包含漏洞利用技巧与解题思路 #### 背景介绍 文件包含漏洞是一种常见的Web安全漏洞,通常发生在开发者未对输入参数进行严格校验的情况下。在CTF竞赛中,这种类型的题目经常涉及本地文件包含(Local File Inclusion, LFI)和远程文件包含(Remote File Inclusion, RFI)。通过这些漏洞,攻击者可以读取服务器上的敏感文件或执行恶意代码。 #### 常见易受攻击的PHP函数 在PHP开发中,`require`, `require_once`, `include`, 和 `include_once` 是最容易引发文件包含漏洞的函数[^2]。当这些函数中的文件路径来源于用户可控的输入时,就可能被用来加载任意文件。 #### 利用技巧 1. **本地文件包含 (LFI)** 攻击者可以通过构造特定的URL来尝试读取系统上存在的文件。例如,在Linux系统下,可以尝试访问 `/etc/passwd` 或其他配置文件。如果目标站点存在过滤机制,则需要绕过这些限制。一种常见方法是使用NULL字节 (`%00`) 来截断字符串验证逻辑[^3]。 2. **伪协议的应用** PHP支持多种内置流封装器(stream wrappers),比如 `file://`, `php://filter`, `zip://` 等。其中特别需要注意的是 `php://input` 和 `php://filter` 的组合使用,它们允许动态生成数据并将其作为虚拟文件供程序调用[^4]。 3. **环境变量注入** Linux系统的特殊文件如 `/proc/self/environ` 可记录当前进程启动时所携带的所有环境变量信息。由于HTTP请求头字段会被映射至某些内部变量表项之中,因此我们能够借助篡改 User-Agent 字段的方式向上述位置嵌入自定义脚本片段,并最终实现反序列化或其他形式的危害行为。 #### 示例代码 以下是基于以上原理的一个简单演示案例: ```php <?php // 模拟脆弱点:直接将GET参数传给 include 函数 $file = $_GET['page']; include($file); ?> ``` 假设此页面地址为 http://example.com/vuln.php?page=home.txt ,那么只要替换掉 page 参数值即可触发相应操作。例如: - 访问http://example.com/vuln.php?page=/etc/passwd 尝试泄露操作系统账户列表; - 如果服务端开启了allow_url_include选项的话甚至可以直接指定外部链接完成更复杂的交互过程。 #### 防护措施建议 为了防止此类问题的发生,应当采取如下策略之一或者综合运用多项手段加强防护力度: - 对所有来自客户端的数据都应实施严格的白名单匹配检查。 - 使用框架自带的安全组件替代原始语法结构编写业务逻辑部分。 - 定期审查源码质量以及部署后的运行状态是否存在异常情况发生。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值