• Once More


    http://ctf5.shiyanbar.com/web/more.php 

    如题目所说,是PHP相关的题目,涉及到ereg函数的漏洞,由于没有学习过PHP,所以去百度下这个函数的相关问题。得到一下信息:

    语法: int ereg(string pattern, string string, array [regs]);
    
     返回值: 整数/数组
    
    函数种类: 资料处理
    
    PHP函数ereg()内容说明: 本函数以 pattern 的规则来解析比对字符串 string(就是看string里的每个单元是否属于规则pattern中的一个单元)。
           比对结果 返回的值放在数组参数 regs 之中,regs[0] 内容就是原字符串 string、 regs[1] 为第一个合乎规则的字符串、regs[2] 就是第二
           个合乎规则的字符串,余类推。若省略参数 regs,则只是单纯地比对,找到则返回值为 true

      %00截断即遇到%00则默认为字符串的结束

    然后就打开了题目,得到代码:

      

    <?php
    if (isset ($_GET['password'])) {
        if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)   //根据百度的信息可以知道,ereg函数利用正则限制了password只能含有字母和数字
        {
            echo '<p>You password must be alphanumeric</p>';
        }
        else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)  //password的长度不能大于8,切要大于9999999[题目入口提示了,用科学计数法]
        { if (strpos ($_GET['password'], '*-*') !== FALSE) //
            {
    die('Flag: ' . $flag); }

    else { echo('<p>*-* have not been found</p>'); } }

       else { echo '<p>Invalid password</p>'; }
      }

    ?>

    整理完信息,开始做题,因为长度要小于8,并且要大于9999999,并且入口提示要用到科学计数法,所以,试试1e8

    想到我们刚才的信息中有说passworld里要有*-*,那我们试试把这个符号加进去1e8*-*,不用试,我也知道这样不对,因为password里只能有数字和字母,然后想到了函数的截断漏洞,我就在符号前面加个%00,构造一个1e8%00*-*,看看什么效果。

    说是passworld里有其他字符?难道截断漏洞是已经修复了,还是不会用呢?不过我感觉自己的思路是没有问题的。审查了一会儿后,发现了一个特别的地方:http://ctf5.shiyanbar.com/web/more.php?password=1e8%2500*-*,我的URL中%被转义了,所以我就尝试把转义的修改回来,变成http://ctf5.shiyanbar.com/web/more.php?password=1e8%00*-*,回车

    然后我又多看了点关于这个函数漏洞的问题,修改了URL:http://ctf5.shiyanbar.com/web/more.php?password[]=-

    也可以爆出来答案,这一点等我完全弄明白了再更新

  • 相关阅读:
    Mysql优化
    RabbitMQ教程
    手把手Centos7 安装jenkins详细教程
    FreeMarker学习系列之一
    Vue学习之Vue模拟后台数据
    vuejs学习之新的components组件挂载
    vuejs学习之项目结构解读
    VueJS学习之Vue-cli项目模板
    菜鸟手把手学Shiro之shiro授权流程
    js基石之---es7的decorator修饰器
  • 原文地址:https://www.cnblogs.com/zhangzimu/p/10725256.html
Copyright © 2020-2023  润新知