[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP弱比较-MD5 | 1 |
[题目考点]:
PHP是弱类型语言,不需要明确的定义变量的类型,变量的类型根据使用时的上下文所决定,也就是变量会根据不同表达式所需要的类型自动转换,比如求和,PHP会将两个相加的值转为long、double再进行加和。每种类型转为另外一种类型都有固定的规则,当某个操作发现类型不符时就会按照这个规则进行转换,这个规则正是弱类型实现的基础。
[Flag格式]:
SangFor{XlR0R_Aixi9e0toz}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2005
[题目writeup]:
访问题目后没有源代码信息,进行扫描目录。得到web.rar文件
打开压缩包后得到源代码
<?php
if (isset($_POST['name']) and isset($_POST['password'])) {
if ($_POST['name'] == $_POST['password']) echo '用户名和密码不能相同'; else if (md5($_POST['name']) == md5($_POST['password'])) die('Flag: '.$flag); else echo '密码错误'; } else{ echo '请登录'; } ?>
分析代码逻辑,首先通过isset函数确认变量是否设置,且变量$_POST[‘name’]和$_POST[‘password’]的原值不能相同。但若$_POST[‘name’]和$_POST[‘password’]的MD5值相同则可得到flag。
由于php代码在作比较时使用了弱比较,则可以使用MD5函数无法处理数组的特性来进行绕过
POST:
name[]=1&password[]=2