BUGKU-WEB 矛盾

题目描述

BUGKU-WEB 矛盾_第1张图片
进入场景看看:
BUGKU-WEB 矛盾_第2张图片
代码如下:

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

解题思路

  • 需要读懂一下这段PHP代码的意思
  • 明显是一道get相关的题目,需要提供一个num的参数,然后需要传入一个不是数字但等于1的值,也就是PHP的弱比较,见最后的//【新知识点】
  • 熟悉is_numeric函数:函数用于检测变量是否为数字或数字字符串。见最后的//【新知识点】

相关工具

解题步骤

  1. 解读代码的意思

定义一个num参数,
ps:【不是数字又要等于1,可真矛盾!】。

  1. 直接测试一下在1后面随便加一个不是数字的字符:
/?num=1

BUGKU-WEB 矛盾_第3张图片
得到了flag。

此外,还可以使用%00截断【新知识点】,来处理这个函数is_numeric():

/?num=1%00

BUGKU-WEB 矛盾_第4张图片

得到Flag

flag{2cdfe6ebc7440d87eefc859989455fca}

BUGKU-WEB 矛盾_第5张图片

新知识点

  • PHP is_numeric() 函数

关于PHP is_numeric()函数:
bool is_numeric ( mixed $var )
如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。

  • php弱比较

弱比较(相等比较符==):只要求比较的两个值在转换类型后相等即可。如果两个值的类型不同,会尝试将其中一个值转换为另一个值的类型。

将字符串转换成数字的机制如下:

1==“1admin” //true

1==“admin”  //false

1==“admin1” //false

所以,本题中直接在数字后面加上字母就会被转换成数字。

  • %00截断原理分析

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束

你可能感兴趣的:(#,BUGKU,BUGKU)