PHP伪协议

PHP伪协议

文章目录

  • PHP伪协议
    • file://
    • php://filter
    • php://input
    • zip://
    • bzip2://
    • zlib://
    • data://
    • 其他协议
      • dict://
      • 端口探测案例
      • gopher 协议

file://

作用:

用于访问本地文件系统

语法:

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

举例:

http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

php://filter

作用:

是php中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

语法:

php://filter/过滤器|过滤器/resource=待过滤的数据流

①读取文件内容:php://filter/read=convert.base64-encode/resource=文件名

②写入文件内容: php://filter/write=convert.base64-decode/resource=文件名

举例:

http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php

PHP伪协议_第1张图片

php://input

作用:

可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

语法:

php://input		`[POST DATA]`你想写入的字符串

举例:PHP伪协议_第2张图片

一般遇见 file_get_contents() 考虑使用php://input

zip://

作用:

属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

语法:

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

举例:

zip://archive.zip#dir/file.txt

PHP伪协议_第3张图片

先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

bzip2://

作用:

属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

语法:

compress.bzip2://file.bz2

举例:

http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg
http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

PHP伪协议_第4张图片

zlib://

作用:

属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

语法:

compress.zlib://file.gz

举例:

http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg
http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

PHP伪协议_第5张图片

data://

作用:数据流封装器。

语法

http://127.0.0.1/cmd.php?file=data://text/plain,
http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
http://127.0.0.1/cmd.php?file=data:text/plain,
http://127.0.0.1/cmd.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

举例:

PHP伪协议_第6张图片

总结:

PHP伪协议_第7张图片

:::

其他协议

dict://

介绍:

dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。不过貌似用的比较少,所以网上基本没啥资料(包括谷歌上)。可以看到用这个协议架设的服务可以用 telnet 来登陆,说明这个协议应该是基于 tcp 协议开发的。像 mysql 的服务,因为也是基于 tcp 协议开发,所以用 dict 协议的方式打开也能强行读取一些 mysql 服务的返回内容

注意:该协议往往与ssrf漏洞像结合,用来探测内网端口

dict协议功能:

1、探测内网主机
2、探测端口的开放情况和指纹信息
3、执行命令

端口探测案例

以ctfhub的ssrf漏洞–端口扫描为例
PHP伪协议_第8张图片

先输入下面的payload,然后抓包进行端口探测

/?url=dict://127.0.0.1:8000

PHP伪协议_第9张图片
PHP伪协议_第10张图片
PHP伪协议_第11张图片

gopher 协议

介绍:

  • Gopher协议是 HTTP 协议出现之前,在 Internet 上是常见且常用的一个协议,不过现在gopher协议用得已经越来越少了Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。

说明:

  • gopher协议是一种信息查找系统,他将Internet上的文件组织成某种索引,方便用户从Internet的一处带到另一处。在WWW出现之前,GopherInternet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它。
  • 它只支持文本,不支持图像
  • 常用在ssrf中打redis shell、读mysql数据

gopher协议格式:

gopher://IP:port/_{TCP/IP数据流}

如果你知道某个地方存在SSRF漏洞,使用Gopherus将帮助你生成Gopher有效负载,以利用SSRF(服务器端请求伪造)和获得RCE(远程代码执行)。它还将帮助您在受害者服务器上获取反向shell。

使用方法:

Gopherus: 该工具生成gopher链接,用于开发SSRF和在不同服务器上获得RCE - 我爱学习网 (5axxw.com)

工具地址:

https://github.com/tarunkant/Gopherus

你可能感兴趣的:(网络,渗透测试,php,服务器,apache)