Once More——解题

题目链接
http://shiyanbar.com/ctf/1805


题目描述

啊拉?又是php审计。已经想吐了。
hint:ereg()函数有漏洞哩;从小老师就说要用科学的方法来算数。
格式:CTF{

解题思路
点击题目页面View the source code,看到源码。

<?php
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>';
    }
}
?>

本题目一共有三个条件限制,看如何绕过。
1. ereg ("^[a-zA-Z0-9]+", _GET['password']) === FALSE

===类型恒等于
== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

=== 和 !== 只有在相同类型下,才会比较其值。
ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false

这个判断限制了输入只能为只能输入字符和数字,但是该函数存在00截断漏洞。

  1. strlen($_GET['password']) 9999999,限制字符串长度小于8,值大于9999999。
  2. strpos ($_GET['password'], '*-*') !== FALSE,限制输入的值必须包含*-*

所以给出paylload,1e8%00*-*1e9%00*-*


Flag: CTF{Ch3ck_anD_Ch3ck}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值