[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP弱比较-SHA1 | 1 |
[题目考点]:
PHP是弱类型语言,不需要明确的定义变量的类型,变量的类型根据使用时的上下文所决定,也就是变量会根据不同表达式所需要的类型自动转换,比如求和,PHP会将两个相加的值转为long、double再进行加和。每种类型转为另外一种类型都有固定的规则,当某个操作发现类型不符时就会按照这个规则进行转换,这个规则正是弱类型实现的基础。
[Flag格式]:
SangFor{Q_qMtRF4bFfk3wHY}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2004
[题目writeup]:
<?php
error_reporting(0);
if (isset($_GET['name']) and isset($_GET['password'])) {
sha1($_GET['name']) . "</br>";
sha1($_GET['password']) . "</br>";
if ($_GET['name'] == $_GET['password']) '<p>Your password can not be your name!</p>'; else if (sha1($_GET['name']) == sha1($_GET['password'])) $flag;
}
highlight_file(FILE);
?>
分析代码逻辑,首先通过isset()函数检查变量是否设置。如果已经设置,则使用sha1函数分别计算$_GET[‘name’]和$_GET[‘password’]。且二者不能原值相等,sha1值相等时可得到flag。
由于代码在比较时使用了弱比较,则可以通过sha1无法计算数组的特性来进行绕过
?name[]=1&password[]=2