题目链接
http://ctf.tidesec.com/challenges#%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1-112
点击查看代码
<?php
error_reporting(0);
include("flag.php");
highlight_file(__FILE__);
if (isset($_GET['username']) and isset($_GET['password'])) {
if ($_GET['username'] == $_GET['password'])
print 'Your password can not be your username.';
else if (md5($_GET['username']) === md5($_GET['password']))
die('Flag: '.$flag);
else
print 'Invalid password';
}
?>
题目分析
根据代码可知,打印出 flag 的条件是:
参数 username 和 password 的值不能相等,但它们的 MD5 需要相等
而 URL 是可以传递数组参数,如下所示,相当于提交一个 a[] = {1,2,3} 的数组:
点击查看代码
http://localhost/index.php?a[]=1&a[]=2&a[]=3
PHP 中的 MD5 是不能处理数组的,即 md5(a[]) == md5(b[]) == null,所以可构造如下链接得到结果:
点击查看代码
http://localhost/index.php?username[]=1&password[]=2