你真的会PHP吗?(实验吧)
根据题目感觉应该是一道php代码审计的题目,进入题目后f12在响应头中得到hint。
访问地址得到
我们可以知道需要以post方式传入变量number,foreach当中会对会对vlaue进行trim()和addslashes(),trim()函数会移除换行和空格符。addslashes()函数会将语句当中的 ‘ 换成 /’ 可以防止sql注入,但我们可以用宽字节注入的方式进行绕过。
is_palindrome_number函数,判断number是否为一个回文数,即一个数正序和倒序一样的数字。
is_numeric()函数判断是否为一个数字,可以用%00截断进行绕过。
题目要求number不能是一个数字,但需要是不一个“回文数”可strrev()函数的要求需要其正序和倒序的值相同,便出现了可矛盾的地方。题目的漏洞存在于处理strrev()函数的语句当中
intval函数获取变量的整数值,但intval最大的取值取决于操作系统,32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval(‘1000000000000’) 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。(可以满足倒序后不是回文数但值相等的条件)。
payload:number=2147483647%00