ctf文件包含+伪协议总结

基本原理

后端编程人员一般会把重复使用的函数写到单个文件中,需要使用时再直接调用此文件即可,该过程也就被称为文件包含。文件包含的存在使得开发变得更加灵活和方便,但同时也带了安全问题,导致客户端可以远程调用文件,造成文件包含漏洞。这个漏洞在php中十分常见,其他语言也有。

几个常见的文件包含函数

  • include()
  • require()
  • include_once()
  • require_once()

include和require的区别只在于是否会在报错后继续执行脚本

php伪协议

1.常用伪协议

file://访问本地文件系统

http://

访问https网站
php://访问各个数据流
phar://php归档
zip://压缩流

举个例子

?file=php://filter/read=convert.base64-encode/resource=index.php

这就是将index文件用base64翻译出来后打印,至于为什么要用base64,因为直接执行就会直接执行index.php就无法看到文件中的内容。

2.file://详解

用法:

file:// [文件的绝对路径和文件名]

 比如

file:///var/www/html/index.php

file://一般不会单独使用,极有可能附带一些php://这类伪协议。

比如常见构造

?file=php://filter/read=convert.base64-encode/resource=index.php

以上用来以base64输出index.php的源码。

3.php://详解

1.php://filter

用来读取源码的伪协议,在题目中经常用到,一般不作为难点,但是还是防止背刺,在这里贴一个链接。

探索php://filter在实战当中的奇技淫巧 - linuxsec - 博客园

这里提到一题 比较经典的题目 [羊城杯 2020]easyphp2

它过滤了base64导致无法使用base64加密输出源码。所以需要用到其他过滤器。比如

convert.quoted-printable-encode & convert.quoted-printable-decode

最后出来的是可打印字符引用编码,但有点乱,这里贴上转换工具

 在线 Quoted-printable 解码编码 - 在线工具网

还有一种思路是通过对base64二次url编码(可以只对b进行编码二次后是%25%36%32)

?file=php://filter/read=convert.%25%36%32ase64-encode/resource=GWHT.php 

 

 结果也可以出来。

看了大佬wp后还发现另外一种方法

?file=php://filter/read=convert.iconv.utf-8.utf-16be/resource=GWHT.php

确实是不知道这种过滤器 

 

2.php://input 

一个非常有用的伪协议,可以用来执行post的语句。

在这里插入图片描述

源码如下

<?php
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    echo "you are not admin ! ";
}
?>

4.总结

还有一些技巧下一次总结,以上基本包含了常用的协议,当然现在的题目感觉越出越怪,基础的知识可能用来解前几步,后面还是得看一些比较新的思路了。

希望自己不要这么菜吧   _(:з」∠)_   ----L1men2 

### CTF Web 安全中 PHP 伪协议的利用与防护 #### PHP 伪协议概述 PHP 提供了一系列特殊的伪协议,如 `php://input`、`php://filter` 和 `data://` 等。这些伪协议可以用于读取、写入或执行代码,但在某些情况下也可能成为安全隐患[^1]。 #### 常见的伪协议及其用途 - **`php://input`**: 可以用来读取原始 POST 数据。 - **`php://filter`**: 支持对流进行过滤操作,常用于编码转换或数据处理。 - **`data://`**: 允许直接嵌入数据作为输入源。 在 CTF 中,攻击者可能会利用这些特性来绕过文件包含限制或其他安全机制。例如,通过构造特定 URL 或参数传递给存在漏洞的应用程序,从而触发未预期的行为。 #### 防护措施 为了避免因使用上述伪协议而导致的安全风险,可以从以下几个方面着手: ##### 修改配置文件 最直接的方法是在服务器端全局禁用潜在危险的功能。这可以通过编辑 `php.ini` 文件并调整相应选项完成。具体来说,关闭不必要的模块和服务能够显著降低受攻击面。 ```ini allow_url_fopen = Off allow_url_include = Off ``` ##### 动态设置运行时指令 对于无法更改全局配置的情况,则可以在应用程序内部采用编程方式临时改变环境变量。借助于内置函数 `ini_set()` 实现这一点同样有效。 ```php <?php // 关闭远程文件包含功能 ini_set('allow_url_include', '0'); ?> ``` ##### 输入验证与清理 无论何时接收外部输入都应保持警惕心,尤其是当涉及到路径名解析的时候更需谨慎对待。确保所有传入的数据经过严格校验后再进一步处理;必要时还可以考虑引入黑名单/白名单策略加以辅助控制[^3]。 ##### 使用现代框架和库 许多流行的开发工具包已经内置了针对此类威胁的有效防范手段。积极选用那些具有良好口碑且持续更新维护的产品有助于减轻开发者负担的同时提高整体安全性水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值