CTFShow-php特性(89-97)

ctfshow web入门 PHP特性前篇(web89-web104) 目录 web89 web90 web91 web92 web93 web94 web95 web90,92-95总结 web96 web97 拓展 web98 web99 web100 web101 web102 web103 web104 web89 <?php ​ /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-16 11:25:09 # @Last Modified by: 阅读详情

前置

遍历文件类

filesystemiterator

遍历目录类

directoryItrerator

reg_match函数介绍

  • preg_match()是 PHP 中的一个强大的正则表达式匹配函数。它用于在一个字符串中搜索匹配给定正则表达式模式的内容。如果找到匹配项,它可以返回匹配的次数(通常为 1,因为preg_match()在第一次匹配成功后就会停止),并可以通过可选的参数获取匹配的内容。

  • preg_match当检测的变量是数组的时候会报错并返回0。

intval函数介绍

  • intval()函数是 PHP 中的一个内置函数。它的主要作用是获取变量的整数值。例如,如果有一个包含数字的字符串或者一个浮点数,intval()函数可以将其转换为整数。

  • 基本语法是intval ( mixed $var, int $base = 10 ),其中$var是要转换的变量,$base是可选参数,用于指定转换的进制,默认是十进制。

  1. 参数解释

    • $var 参数

      • 这个参数可以是多种数据类型。如果是字符串,函数会从字符串的开头提取整数部分。例如,intval("123abc")会返回123。如果字符串是以非数字字符开头的,如intval("abc123"),则会返回0。

      • 当$var是浮点数时,intval()函数会将小数部分截断,只保留整数部分。比如intval(3.14)会返回3。

      • 如果$var是布尔值,true会被转换为1,false会被转换为0。

      • 对于数组或对象,intval()函数会先尝试将其转换为字符串,再按照字符串的规则进行转换。通常会返回0,除非数组或对象在转换为字符串时有特殊的规则可以生成以数字开头的字符串。

    • $base 参数

      • 当$var是一个字符串,并且这个字符串表示一个数字的时候,可以指定$base来转换进制。例如,intval("10", 2)会将二进制的10转换为十进制,结果是2。$base参数的取值范围是从2到36,其中2表示二进制,10表示十进制,36表示三十六进制。

Web89

preg_match 正则匹配函数

preg_match当检测的变量是数组的时候会报错并返回0。

intval 获取变量整数值

而intval函数当传入的变量也是数组的时候,会返回1

参数1 获取的值

参数2 获取整数的进制类型 2 8 10 16

Payload

?num[]=a

Web90

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:06:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
​
*/
​
​
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}

intval($num,0)

  • 当第二个参数(进制基数)为0时,intval()函数会根据$num的前缀自动判断进制。如果$num以0x或0X开头,那么它会被当作十六进制数进行转换;如果以0开头(但不是0x或0X),则会被当作八进制数进行转换;如果没有这些前缀,就会被当作十进制数进行转换。

绕过方法有多种:

  1. 字符串:4476 后面接入任意字符串 因为该函数只会截取字符串中数字。

  2. 其他进制:可以使用8进制 010574,16进制 0x117C

  3. 科学计数法:4476.0


Web91

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:16:09
# @link: https://ctfer.com
​
*/
​
show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}
第一个判断:if(preg_match('/^php$/im', $a))
  • 正则表达式模式:'/^php$/im'

    • ^:表示匹配字符串的开头。这意味着要匹配的内容必须从字符串的起始位置开始符合后续的模式要求。

    • php:就是要精确匹配的文本内容,这里希望在字符串中找到的就是 “php” 这三个字符。

    • $:表示匹配字符串的结尾。即匹配的内容必须到字符串的末尾位置都是符合前面模式要求的,也就是说整个字符串只能是 “php” 这三个字。

    • i:是一个正则表达式的修饰符(flag),它使得匹配过程忽略大小写。所以无论是 “php”、“PHp”、“PhP” 等各种大小写组合形式,只要是这三个字符组成的字符串,都能满足该模式在大小写方面的要求。

    • m:也是一个正则表达式的修饰符,它用于多行模式匹配。不过在这个具体的正则表达式中,由于我们只是要匹配整个字符串是否为 “php”,多行模式在这里实际上并没有起到特别的作用(如果是在匹配跨多行的文本内容且有相关匹配需求时,m 修饰符会更有用)。

而第二个判断却少了m参数,所以推测可能是换行绕过

整体逻辑如下:

  1. 第一个if判断字符串中有没有php字符,正则匹配的模式是 “从头到结尾不区分大小写同时匹配多行”

  2. 第二个if也是如上,但是没有参数m(匹配多行)

  3. 所以先输入随机字符串 xxxx然后输入换行符%0A最后输入PHP

  4. 这样第一个if会匹配到换行后的php,而第二个if却无法匹配到 导致绕过

URL换行符%0A

Payload

?cmd=xiao%0Aphp


Web92

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:29:30
# @link: https://ctfer.com
​
*/
​
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}

这一关与90关的唯一不同就是在等于号上!

90关的等于号是=== 代表必须一模一样(包括类型,内容)

而本关的等于号是== 代表不用必须一模一样(包括类型,内容)只要有就行

绕过方法:

  • 八进制、十六进制绕过

  • payload:?num=0x117C


Web93

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:32:58
# @link: https://ctfer.com
​
*/
​
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
} 

照比上一关多了一个,不能使用字母

不用就不用!(¬︿̫̿¬☆)

我用8进制绕过

payload:?num=010574

Web94

 <?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:46:19
# @link: https://ctfer.com
​
*/
​
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(!strpos($num, "0")){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
} 

呦呵!8进制和16进制都不能用了?

注意细节骚年:他这里等于号变成===全等于了,直接科学计数法绕过

payload:num=4476.0

Web95

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:53:59
# @link: https://ctfer.com
​
*/
​
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]|\./i", $num)){
        die("no no no!!");
    }
    if(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

在8进制前面加个+

Web96

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 19:21:24
# @link: https://ctfer.com
​
*/
​
​
highlight_file(__FILE__);
​
if(isset($_GET['u'])){
    if($_GET['u']=='flag.php'){
        die("no no no");
    }else{
        highlight_file($_GET['u']);
    }
​
​
}

路径绕过比较

./flag.php

以下是来自AI的解答:

  1. 绕过原理

    • 松散比较机制: 在 PHP 中,当使用 == 进行比较时,会进行自动的类型转换以尝试使比较能够成功。对于字符串的比较,它不仅仅看字符串的字面内容,还会在一定程度上对字符串进行 “规范化” 处理后再比较。

    • 文件路径处理与比较: 当比较 $_GET['u'](假设其值为 ./flag.php)和 flag.php 时,在松散比较的规则下,PHP 会忽略掉 ./ 这样的相对路径表示部分。因为它主要关注的是文件名部分(这里都是 flag.php),经过这种自动的处理和比较逻辑,就会认为 ./flag.php 和 flag.php 是 “相等” 的,从而绕过了原本预期的判断,使得后续的 highlight_file($_GET['u']); 被执行,而不是输出 "no no no" 并终止脚本执行

Web97

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 19:36:32
# @link: https://ctfer.com
​
*/
​
include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.';
}
?>

md5函数是无法处理数组的,如果传入了两个数组就会变成null,而null=null

a[]=1&b[]=2

ctfshow php特性系列 文章目录web89web90web91web92web93web94web95web96web97web98 web89 <?php include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num) 阅读详情

相关推荐

ctfshow—PHP特性

PHP特性 以ctfshow平台题目为例 web89 intval() 函数用于获取变量的整数值。 intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。 web 90 int intval ( mixed $var [, int $base = 10 ] ) 如果 base 是 0,通过检测 var 的格式来决定使用的进制: 如果字符串包括了 “0x

cosmoslin的博客 2818

php 正则英文名_PHP正则表达式 /i, /is, /s, /isU等介绍

PHP正则表达式 /i, /is, /s, /isU等 都是些什么东西呢?i 不区分大小写s 模式中的圆点元字符(.)匹配所有的字符,包括换行符x 模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两 头,也都被忽略A (PCRE_ANCHORED) 如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的...

weixin_39747399的博客 390

oracle rac 成本及架构,Oracle Extended RAC 架构实战

Extended-RAC,是RAC技术的一种扩展增强。Extended-RAC是通过专用光纤(或租用裸光纤)加DWDM(波分设备)设备将两个不同楼栋/同城甚至异地机房进行相连,将数据库主机、存储分别放置于不同机房,利用存储复制/ASM Mirror等技术进行数据复制进行搭建的一种远距离集群架构。Extended RAC需要将不同楼栋/同城甚至异地机房通过专用光纤(或租用裸光纤)加DWDM(光纤复用...

weixin_33812391的博客 2453

php preg_match正则函数的使用注意

1、长度大小的限定(最好限制匹配的长度pcre.backtrack_limit变量,手动在php.ini设置,程序使用ini_set设置 ) 2、使用正则的过程中会消耗堆栈资源(最好限制) 3、为了避免出现服务器崩溃的情况(最好限制内存的大小)

continue my dream 879

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 283

【STM32F042】使用NTC热敏电阻实现温度测量

1.NTC介绍 NTC是负温度系数的简写,全称是Negative temperature coefficient.意思是随着温度的升高,电阻值呈现下降趋势。常用作温度传感器。这里有一个式子表示负温度系数的电阻值: RT=R0*exp(B (1/T-1/T0)) RT为周围温度为T (K) 时的电阻值,R0是周围温度为T0(K) 时的电阻值,注意这里的温度是开...

BadBoyHolly的博客 3万+

PHP正则表达式

一、正则表达式语法(Perl风格) 1、模式规则   /php/ 字符串前后加上两条斜杠即可 2、匹配函数    preg_match(‘/php/’,php)   参数1 模式   参数2 字符串 二、正则表达式中的元素 介绍   1、正则表达式中包含三种元素分别为:量词、元字符、修饰符   2、前导字符串:就是符号前面的一个字符或字符串 量词 ...

无痕之意的博客 3万+

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 484

ctfshow web php特性 89~97

做点简单的。

yanxi3329的博客 979

分布式推理服务(策略:数据并行、张量并行、流水线并行、专家并行)技术分析

摘要:分布式推理突破单GPU内存和算力限制,支持大模型部署。四种核心策略包括: 数据并行:复制模型拆分数据,提升吞吐但内存效率低; 流水线并行:模型分阶段执行,支持超大模型但存在计算气泡; 张量并行:拆分层内矩阵运算,延迟低但通信开销大; 专家并行:动态激活MoE模型专家,计算高效但路由复杂。实际应用中常组合策略(如3D并行),需权衡模型规模、硬件条件与性能目标。

技术引领业务创新 940

检索生成(RAG) vs 长文本大模型:实际应用中如何选择?

大模型的上下文理解能力直接影响到 LLMs 在复杂任务和长对话中的表现。本期内容聚焦于两种主流技术:长上下文(Large Context Windows)和检索增强生成(RAG)。这两种技术各有何优势?在实际应用中,我们又该如何权衡选择?文章不仅详细阐述了这两种技术的工作原理,还深入分析了它们在效率、准确性和实施成本等方面的差异。文章特别提到了在执行重复性任务时使用 Context Caching 优化长上下文的优势,然而,缓存策略的效果很大程度上取决于提示词的可预测性。

2401_85782938的博客 1254

CtfShow web入门-php特性[89-97]

CtfShow web入门-php特性[89-97]

qq_54803507的博客 591

NSIS教程(8): 基于第三方界面库的安装包界面

前面的几篇文章介绍了NSIS的传统界面的安装包和现代界面的安装包的制作方法,也提到了NSIS支持自定义页面(即使用page custom)的特性,自定义页面需要用户自己创建对话框、控件、添加控件响应等等,虽然NSIS提供了nsDialogs.nsh来支持这些功能,但使用起来还是不太方便(需要专门了解这个插件诸多用法),而且不够灵活,所以本文介绍一种终极的自定义界面的安装包解决方案,即完全使用第三方

while(1) { smile(); } 9万+

ctfshow-web入门-89-115-php特性

要得到flag,传递一个num参数,这个参数不能包含数字字符,但经过intval转换后的值为真,用数组绕过,所以payload:?第二个if,使用intval($num,0)将$num转换为整数(以 0 为进制,意味着自动判断进制),如果转换后的整数严格等于4476,则输出flag;和上一题相比,将第一个===换成了==,变成了弱等于,并且过滤了 . 小数点,这里就不能用小数过滤了,用八进制,前面加个空格,空格在转换时会被自动去除。==比较的时候会进行类型转换,而===不进行类型转换,必须严格相等。

2402_86944075的博客 768

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

CTFshow_php特性_Web89~Web150

作为thinkphp,phpCVE的前置关卡,本章节还是比较重要的,师傅们冲冲冲~

dasdasdasvsdV的博客 1030

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[ctfshow]web入门php特性89-115

web89 if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } } num的值不能有数字,但又必须是数字。 在intval中数组也有正确的返回值,数组可以返回false绕过正则 payload: num[] web90、92、

L1ni01 1682

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

CTFSHOW PHP特性篇(上篇 89-110)

web89 if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } } 考察点:数组绕过正则表达式 官方文档中如下介绍 返回值 返回完整匹配次数(可能是0),或者如果发生错误返回FALSE。 也就是说如果我们不按规定传一个字符串,

羽的博客 6409

ctfshow web89-web98(php特性篇)

这里的特性主要是正则的修饰符/m,没有这歌修饰符就是^和$就会老老实实的匹配开头和结尾,有了之后就会识别行的出现,即在每个换行符前或后开始匹配,说白了就是多行模式!这里用火狐的hackbar打不了原因是火狐的hackbar的机制会对你上传的东西进行一次编码也就导致如果我上传的是已经编码了的数据就会再次编码导致不行!4476的8进制是10574然后再在前面添0即可!md5的强比较这里可以用数组绕过,机制是因为md遇到数值返回null,但是这里我想用md5的碰撞,这里我积累过一对可以打的碰撞!

2403_88003384的博客 558

ctfshow php特性 web89-web115 web123-150wp

皮爱吃皮特性

mumuzi的博客 5992

CTFShow-PHP特性篇(一) (web89-web115)

文章目录web89web90web91web92web93web94web95web96web97web98web99web100web 101 web89 数组绕过 原理: 且 preg_math()传入数组参数也会直接返回0 web90 ?num=0x117c 0x117c会转为4476 还是考察intval()函数 intval( mixed $var[, int $base = 10] ) : int var 要转换成 integer 的数量值 base 转化所使用的进制 Note: 如果

lonmar的博客 2620

ctfshow——PHP特性

另外,intval()函数如果$base为0,则$var中存在字母的话遇到字母就停止读取,传入4476a会将后面的a丢弃,比较前面的.

qq_55202378的博客 1708

ctfshow_web89-98_php特性

回归主题,这里学一下PHP特性,学习并记录,会把知识点穿插其中。

Takagiapa的博客 707

ctfshow web入门 php特性 web89--web107

for循环里面的意思是取随机数1到36之间一个数,1到37之间一个数,1到38一个数,直到1到877,然后把每次拿到的随机数追加到allow数组里面。//如果GET传参flag的值=flag则将cookie的值代替flag中的值。//如果使用GET传参,则使用POST传参来代替。//如果GET传参HTTP_FLAG的值为flag则输出$flag。=b,但是md5编码之后又要相等。

2301_81040377的博客 1939

CTFshow web入门——php特性

Web 89 <?php include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } }

小元砸的博客 7861

ctfshow web89-98

ctfshow web89-98

2302_77769584的博客 930
上一篇: 梅杰夫人(MrsMajor)3.0病毒修复过程
下一篇: 新手入门永恒之蓝从扫描->持久化
阿斯顿法国红酒快
博客等级 码龄5年 154粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值