您现在的位置是:首页 >技术教程 >ctfshow——web入门——php特性——89~95网站首页技术教程

ctfshow——web入门——php特性——89~95

uwvwko 2025-04-10 00:01:03
简介ctfshow——web入门——php特性——89~95
web入门89

1.preg_match函数传入的参数只能是字符串,如果传入数组这种会报错,返回FALSE,可以实现绕过

2.intval中输入数组,返回的值只看数组是否为空,为空返回0,否则返回1

PS:如果将num变为bool中的true,intval后也是1,但是好像没办法搞出来,如果直接num=true,是一个字符串,intval后是0

web入门90

先严格比较num是否=4476,然后将num intval后再进行严格比较

这里就有多种绕过方法:

num=4476.1(因为默认是0代表自动识别进制,默认是10进制)[直接舍去小数点后面的数]

num=+4476

num=4476+1-1

num=4476a

num=0x117c (进制转换)

web入门91

要求是cmd满足第一个正则表达式,不满足第二个

if (preg_match('/^php$/im', $a)) { ... }

$a 是否匹配正则表达式 /^php$/im

  • ^ 示字符串的开始。
  • m 表示多行模式。
  • i 表示不区分大小写。
  • $ 表示字符串的结束。
  • php 是要匹配的字符串。

所以可以?cmd=%0aphp

?cmd=123%0aphp

(回车符【%0d】不行)

web入门92

变成弱比较了

如果操作数的类型不同,PHP 会尝试将它们转换为相同的类型,然后进行比较

var_dump(0 == "a"); // true, 因为"a"被转换为数字0
var_dump("1" == "01"); // false, 字符串不相等
var_dump("1e3" == "1000"); // true, 科学计数法和普通数字表示形式的转换
var_dump("" == 0); // true, 空字符串转换为0
var_dump("0" == false); // true, 字符串"0"被视为false
var_dump(null == false); // true, null也被视为false

payload同90,如:?num=4476.1

web入门93

加了禁止字母大小写,使用进制or小数点

payload:num=4476.1

?num=010574

web入门94

有strpos函数,如果没有找到0,返回false ,如果找到,返回0的第一个位置

故: 开头不能为0,但是必须要有0

num=4476.0

num=+010574

web入门95

把小数点禁了

num=+010574

?num=%20010574(前面加的是url编码后的)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。