1.web89
代码审计
看到这里过滤了0-9数字可以使用数组绕过
payload
/?num[]=1
拿到flag
web90
代码审计
intval(num,0) 将尝试将 num 转换为整数类型。当 num 的值为 “4476a” 时,无论是否加上前缀 0(表示八进制)或其他特殊前缀,intval() 都会将其转换为整数 4476。所以,intval($num,0) 的返回值是整数类型的 4476
payload
?num=4476a
3.web91
代码审计
知识点
preg_match() 函数用于在字符串中搜索匹配指定模式的内容。而 /^php/i 和 /^php$/im 是正则表达式模式,其中 /i 和 /m 是修饰符,具有不同的含义。
对于正则表达式模式 /^php/i 来说:
/^ 表示开始匹配字符串的开头。
php 表示要匹配的内容,即字符串 “php”。
$/ 表示结束匹配字符串的结尾。
/i 是一个修饰符,表示进行不区分大小写的匹配。
这意味着,当 $a 的值是 “php”、“Php”、“PHP” 或其他任何形式的 “php”(不区分大小写)时,preg_match(‘/^php/i’, a) 将返回 1,表示匹配成功。否则,返回 0,表示匹配失败。
对于正则表达式模式 /^php/im 来说:
/^ 表示开始匹配字符串的开头。
php 表示要匹配的内容,即字符串 “php”。
$/ 表示结束匹配字符串的结尾。
/i 是一个修饰符,表示进行不区分大小写的匹配。
/m 是另一个修饰符,表示多行模式匹配,即使字符串包含换行符,也可以匹配多行文本。
这意味着,preg_match(‘/^php/im’, a) 在匹配时会考虑到多行文本的情况。例如,如果 $a 的值是 “php\nPHP”(换行符分隔的两行),则此正则表达式也会返回 1,表示匹配成功。而如果 $a 的值是 “php PHP”(空格分隔的两个单词在同一行),则返回 0,表示匹配失败。
所以,区别在于 /^php/im 的正则表达式模式还能匹配多行文本,而 /^php/i 只匹配单行文本。
加一个%0a换行拿到flag
4.web92
代码审计
这个需要满足num!=4476且取整之后==4476
因为intval可以将八进制转换所以本题可以使用八进制绕过
payload
?num=010574
5.web93
这个题审计完代码后发现依旧可以使用上题的payload
6.web94
代码审计发现可以直接使用浮点型数字进行绕过