[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP弱比较-字符数字比较 | 1 |
[题目考点]:
PHP是弱类型语言,不需要明确的定义变量的类型,变量的类型根据使用时的上下文所决定,也就是变量会根据不同表达式所需要的类型自动转换,比如求和,PHP会将两个相加的值转为long、double再进行加和。每种类型转为另外一种类型都有固定的规则,当某个操作发现类型不符时就会按照这个规则进行转换,这个规则正是弱类型实现的基础。
[Flag格式]:
SangFor{0wZbCzvIJO6DVXeF}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2001
[题目writeup]:
<?php
if(is_numeric($_GET['1']) && $_GET['1']=="255"){
if(strstr($_GET['1'],"255")==False){
$flag;
}
}
show_source(__FILE__);
首先分析代码,代码开始对 GET 方式传递进来的参数1的值进行判断,当满足值为数字以及值与255相等时才执行到 if 中的代码,第二个 if 中判断参数1的值中是否有“255”这个字符串,如果没有就返回 flag 。
其中需要对函数 is_numeric() 进行解释,此函数会将数字,数字字符串,科学计数法的数字,十六进制的数字都认为是数字。而后面的数值比较是使用的弱比较,就是说会将不同类型的两个值转换成一个类型再进行比较,如果1的值是十六进制,则会将十六进制的值转换成十进制再进行比较。
所以此题可以用十六进制的方式绕过
http://localhost/?1=0xff