[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP弱比较-STRCMP | 1 |
[题目考点]:
PHP是弱类型语言,不需要明确的定义变量的类型,变量的类型根据使用时的上下文所决定,也就是变量会根据不同表达式所需要的类型自动转换,比如求和,PHP会将两个相加的值转为long、double再进行加和。每种类型转为另外一种类型都有固定的规则,当某个操作发现类型不符时就会按照这个规则进行转换,这个规则正是弱类型实现的基础。
[Flag格式]:
SangFor{2KLHFV6gu3ogGrHr}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2006
[题目writeup]:
<?php
error_reporting(0);
$password="***************";
if(isset($_POST['password'])) {
if (strcmp($_POST['password'], $password) == 0) {
$flag;
} else {
"Wrong password..";
}
}
highlight_file(__FILE__);
?>
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1>str2,则返回正数。
根据代码逻辑,需要比较$_POST[‘password’]和$password的值,而$password的值无从得知。但由于php代码在比较时使用了弱比较,并且strcmp传入的期望类型是字符串类型的数据,但是如果传入非字符串类型的数据的时候,这个函数将发生错误但却判定其相等
POST:
password[]1
[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP弱比较-STRCMP | 1 |
[题目考点]:
PHP是弱类型语言,不需要明确的定义变量的类型,变量的类型根据使用时的上下文所决定,也就是变量会根据不同表达式所需要的类型自动转换,比如求和,PHP会将两个相加的值转为long、double再进行加和。每种类型转为另外一种类型都有固定的规则,当某个操作发现类型不符时就会按照这个规则进行转换,这个规则正是弱类型实现的基础。
[Flag格式]:
SangFor{In6iB20tArCXxl-xjdxdPVRlolJE_8jU}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2095
[题目writeup]:
1、实验主页
2、源码分析
<?php
error_reporting(0);
include('flag.php');
if (!isset($_GET['flag'])){
show_source(__FILE__);
exit();
}
if (strcmp($_GET['flag'], $flag) == 0) {
echo "success, flag:" . $flag;
}
?>
?flag[]=1