ereg正则截断

<?php 

$flag = "flag";

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) //strpos — 查找字符串首次出现的位置
      {
      die('Flag: ' . $flag);
      }
      else
      {
        echo('<p>*-* have not been found</p>'); 
       }
      }
     else 
     {
        echo '<p>Invalid password</p>'; 
      }
   } 
?>

审计上面代码可以发现
要想的到flag必须满足一下3个条件
1、必须是数字、字母组成的密码
2、密码的长度小于8,却必须要大于9999999
3、密码必须包含

对于第二个条件,使用科学计数法绕过
对于第三个条件,由于ereg()函数存在NULL截断漏洞,所以可以用%00(空字符)来截断正则匹配。那么我们就可以绕过第3个条件了
那么我们就可以构造出payload为1e8%00*—*

0%