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
同样是在此路径下