文件包含常见php函数
- include
- require
- include_once
- require_once
- highlight_file
- show_source
- readfile
- file_get_contents
- fopen
- file
关于文件包含是否支持%00截断
- PHP版本<=5.2 可以使用%00进行截断。
- 对于特定类型文件上传可使用%00截断绕过 如 :1.php%00.jpg => 1.php
php.ini
- allow_url_fopen :on 默认开启 该选项为on便是激活了 URL 形式的fopen 封装协议使得可以访问URL对象文件等;
- allow_url_include:off 默认关闭,该选项为on便是允许包含URL对象文件等。
php支持的伪协议
PHP伪协议事实上就是支持的协议与封装协议
- php:// — 访问各个输入/输出流(I/O streams)
- file:// — 访问本地文件系统
- phar:// — PHP 归档
- zlib:// — 压缩流
- data:// — 数据(RFC 2397)
- http:// — 访问 HTTP(s) 网址
- ftp:// — 访问 FTP(s) URLs
- glob:// — 查找匹配的文件路径模式
- ssh2:// — Secure Shell 2
- rar:// — RAR
- ogg:// — 音频流
- expect:// — 处理交互式的流
常用php伪协议
- php://协议
- php://filter php://filter是我们常常使用的一个伪协议,在任意文件读取,甚至getshell的时候都有利用的机会。在include函数的使用上,经常会造成任意文件读取漏洞file_get_contents()和file_put_contents()这样函数下,常常会构成getshell等更严重的漏洞。在allow_url_fopen、allow_url_include都关闭的情况下可以正常使用,主要用于读取源代码并进行base64编码输出。 使用:传入参数php://filter/read=convert.base64-encode/resource=xxx.php
- php://input php://input 是个可以访问请求的原始数据的只读流。因为它不依赖于特定的 php.ini 指令。但是enctype=”multipart/form-data” 的时候 php://input 是无效的。
- file://协议
- file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与 allow_url_include的影响 使用:file:// [文件的绝对路径和文件名]
- phar://协议
- PHP 归档,常常跟文件包含,文件上传结合着考察。说通俗点就是php解压缩包的一个函数,解压的压缩包与后缀无关,文件上传仅仅校验mime类型与文件后缀有关时可使用。
- 包含方法:include.php?f=phar://./images/1.jpg/1.php (1.jpg是一个里面含有1.php的压缩包,改了后缀名)
- zlib://协议 、zip://协议、bzip2://协议
- zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。在allow_url_fopen,allow_url_include都关闭的情况下可以正常使用。
file.php?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
注:get请求#需进行url编码为%23
- file.php?file=compress.bzip2://file.bz2
- file.php?file=compress.zlib://file.gz
- data://协议
- 在allow_url_fopen、allow_url_include都开启的情况下才可以正常使用。
- file.php?file=data://text/plain,[php代码]
- file.php?file=data://text/plain,base64,[php代码base64编码]
1 条评论
《疯狂熊孩子2》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/45553.html