web(89)【preg_match】
https://blog.51cto.com/lxw1844912514/3107686 函数intval如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。
preg_match函数表示运用正则来使用匹配函数。
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer(整数) 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
因为这里的主要是因为preg_match函数无法处理数组【这是他的一个漏洞,所以我们构建一个数组,num[ ]=后面可以随便填一些数字也可以不填,就可以直接出来。】
web(90)【intval函数】
这一题使用到了intval函数的用法我们可以查看这个来判断,而这里的进制我们是可以控制的所以我们可以直接构建payload为 ?num=4476a,由上题中的intval函数的特性我们知道是看字母之前的数字的所以我们构建这个可以避开第一个if然后是十进制我们完成第二个要求直接出来了flag
web(91)【正则理解】
这个题目中需要用到正则的使用其中
^表示匹配行头
$表示匹配行尾而当两者遇到一起的时候表示精准匹配需要行首行尾都有php,【并且还能将/n表示为分隔符去除其换行的作用。】
之后的i表示大小写都匹配,m表示多行匹配。然后我们可以构建 ?cmd=php%0a1或者?cmd=%0aphp来表示因为缺少了多行的读取的能力就表示了他可以看成一行【便于理解】。
web(92)【弱比较】
这个题目中涉及了弱比较就是两个等号 ,===是先比较他们的类型然后在比较,==是先把他们转化成相同类型然后在进行比较。所以我们需要第一步不等于4476【字符串形式】.这个简单之后就是我们需要在intval函数的限制下运用弱比较匹配4476,所以我们可以使用十六进制的或八进制字符串来进行匹配数字。构建?num=0x117c【十六进制】或者?num=010574【八进制】
web(93)【字母正则】
首先是弱比较(不能等于4476)然后是正则比较不能出现大小写的字母最后就是等于4476;
直接使用上一题的八进制即可。本来想试用一下数组发现intval函数发生错误返回一。
web(94)【strops函数】
这里新出现一个函数strops
strpos() 函数查找字符串在另一字符串中第一次出现的位置 strops(string,find,start) | |
string必需 | 规定要搜索的字符串 |
find必需 | 规定要查找的字符串 |
start可选 | 规定在何处开始搜索 |
返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回false | 字符串位置是从0开始的。 |
所以我们可以在上一题中的前面加一个空格来使返回的值变为一。因为前面有感叹号所以他想要的使
当if函数为真时会执行die但当我们将其后移一位返回的便变成1然后!1为零。得到flag。