您现在的位置是:首页 >技术教程 >ctfshow——web入门——php特性——89~95网站首页技术教程
ctfshow——web入门——php特性——89~95
简介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编码后的)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。