初探审计-ereg正则%00截断

匿名 (未验证) 提交于 2019-12-02 23:47:01
<?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地址

感谢官网助攻:官网手册

参考博客1

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!