<?php
if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$",$_GET['password']) === FALSE)
{
echo '<p>You password must be alphanumeric</p>';
}
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
{
if (strpos ($_GET['password'], '*-*') !== FALSE)
{
die('Flag: ' . $flag);
}
else
{
echo('<p>*-* have not been found</p>');
}
}
else
{
echo '<p>Invalid password</p>';
}
}
?>
可以看到有三个限制条件:
(1)password必须为字母或数字
(2)password长度小于8且值大于9999999
(3)password含有 "-"
比9999999大的数可以选择10000000,长度小于8所以用科学计数法表示为1e8.
考虑(1)(3),构建password=1e8%00- (使用%00截断erag()对password的检查,使password能包含"-")
传入之后显示*-* have not been found再修改password=1e8%00*-*,成功得到flag。这里这个* *我是不太理解是什么意思。
再介绍方法二:
把password构建为数组,password[]=1 成功得到flag。