php伪协议 配合 文件包含漏洞.md

0x00 起因

被问到了php的一伪协议

后发现自己对伪协议的认识还是太浅, 现在好好总结学习一番

又感觉自己学了半天不知道自己在干嘛。。。哎。。。

0x01 环境

PHP版本:5.4.45

PHP.ini:

allow_url_fopen :on 默认开启

allow_url_include:om 默认关闭

PHP版本<=5.2 可以使用%00进行截断,但是少有低版本的了。。。

先站在前人的大肩膀看看总结 ,主要是两个选项的开关,实验我默认都开了

freebuff上看到的

php伪协议 配合 文件包含漏洞.md_第1张图片

0x02 具体的协议

我的实验代码cmd.php


php:// 访问输入输出流

其中主要有两个协议:

php://filter 简介

PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。

在文件包含中常用到这个协议(因为文件包含的特性,只有包含php标签就会解析,就算是PHP后缀但是里面没有PHP标签也不会解析)

所以如果想要读取运行php文件的源码,可以先base64编码,再传入include函数,这样就不会被认为是php文件,不会执行,会输出文件的base64编码,再解码即可。

常用payload

php://filter/read=convert.base64-encode/resource=cmd.php

php伪协议 配合 文件包含漏洞.md_第2张图片

解码即可

php伪协议 配合 文件包含漏洞.md_第3张图片

php://input 协议

这个协议的利用方法是 :

将要执行的语法php代码写在post中提交,只写代码即可。

php伪协议 配合 文件包含漏洞.md_第4张图片

file:// 协议

file:// 用于访问本地文件系统,

不受allow_url_fopen与allow_url_include的影响

注意需要绝对路径

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

php伪协议 配合 文件包含漏洞.md_第5张图片

data://协议

data://协议需要满足双on条件

PHP.ini:

data://协议必须双在on才能正常使用;

allow_url_fopen :on

allow_url_include:on

利用payload

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

php伪协议 配合 文件包含漏洞.md_第6张图片

php伪协议 配合 文件包含漏洞.md_第7张图片

zip://压缩协议

条件:

需要绝对路径

allow_url_fopen :off/on 任意

allow_url_include:off/on 任意

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件

要点:不需要指定后缀名也可以利用

我只实验了zip协议

利用的时候:

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

只能传入绝对路径。

要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23

http://127.0.0.1/cmd.php?file=zip:///Applications/MAMP/htdocs/xieyi.zip%23sd.php

php伪协议 配合 文件包含漏洞.md_第8张图片

0x04 后记

留下了菜的泪水,发现学的有点杂,但是有些东西学的不到位吧。
纯自学有时候有点迷啊,学的乱七八糟的。
而且也是醉了,最近不过脑子,把二进制的坏字符串到web里面了。。。
还有几个协议没写完,先把常用的写了,后续补上

你可能感兴趣的:(WEB,漏洞复现和分析)