web89
开启容器
代码审计

注意事项
- 如果字符串中包含非数字字符,
intval会尽可能地转换开头的数字部分。若开头不是数字,则返回 0。 - 对于浮点数,
intval会直接舍去小数部分,不进行四舍五入。 - 在处理不同进制的数值时,合理设置
base参数可以实现正确的转换。
只要是num不为非数字开头即可

直接传入数组绕过即可
Warning: preg_match() expects parameter 2 to be string, array given in /var/www/html/index.php** on line 20
可以绕过preg_match()
且
1 | $num[] = 1; |
结果为1
web90
开启容器

代码审计
这里可以运用intval的函数特性


因此直接传入num为4476a即可

web91
开启容器
代码审计
过滤信息
- 外层正则表达式
/^php$/im的含义:^:表示字符串的开始。php:要匹配的字符序列。$:表示字符串的结束。i:修饰符,表示不区分大小写。m:修饰符,表示多行模式(^和$匹配每一行的开始和结束,而不仅仅是整个字符串的开始和结束)
- 内层正则表达式
/^php$/i的含义:^:表示字符串的开始。php:要匹配的字符序列。$:表示字符串的结束。i:修饰符,表示不区分大小写。
首先要符合外层,同时不符合内层
$a = "\nphp";:外层条件满足(某一行是 php),但内层条件不满足(多行字符串),因此不会输出 'hacker'。

/?cmd=%0aphp
web92
开启容器
代码审计

intval($num, 0):intval函数将变量$num转换为整数。- 第二个参数
0表示自动判断$num的数值类型(如十进制、十六进制等)。
- 条件判断:
- 检查转换后的整数值是否等于 4476。
- 输出结果:
- 如果条件满足,即
$num转换为整数后等于 4476,则输出变量$flag的值。
- 如果条件满足,即
/?num=0x117c

传入十六进制即可
/?num=4476e10

这里的4476e10与浮点数有关
1 | <?php |

web93
开启容器
代码审计

其实直接浮点数即可,intval函数可以得到flag

web94
开启容器
代码审计

多了一个strpos函数
这段 PHP 代码的作用是检查变量 $num 是否包含字符 “0”。如果不包含,则输出 “no no no!” 并终止脚本的执行。
那其实可以给出/?num=4476.01

web95
开启容器
代码审计

这次过滤不能有.
可以用八进制绕过
/?num=+010574

?num=+010574或者?num=%2b010574

web96
开启容器
代码审计

开始试了下通配符
其实也可以./flag.php
同样是在此路径下
