bugkuctf-erag截断

<?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)password必须为字母或数字

(2)password长度小于8且值大于9999999

(3)password含有 "-"

比9999999大的数可以选择10000000,长度小于8所以用科学计数法表示为1e8.

考虑(1)(3),构建password=1e8%00- (使用%00截断erag()对password的检查,使password能包含"-")

传入之后显示*-* have not been found再修改password=1e8%00*-*,成功得到flag。这里这个* *我是不太理解是什么意思。

 

再介绍方法二:

把password构建为数组,password[]=1 成功得到flag。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值