涉及一个小技巧。居然是scanf告诉我的!


CTF地址:http://butian.secbox.cn/

首先打开网页是一张图片。
TOFV~0V6KR7LDQQ8%GF53[E.png
把图片下载下来本地,刚开始还以为是捆绑。结果用binwalk看了下没有。那就估计是直接写进去图片里面。右击图片文本打开拉到最下面就可以看到。
G]@9FL~_0_8AAOV~EUCNK3H.png
我稍微改了下代码在本地实验。

<?php
    $str = intval($_GET['id']);
    echo "\$str:".$str."<br>";
    $reg = preg_match('/\d/is', $_GET['id']);
    echo "\$reg:".$reg."<br>";
    if(!is_numeric($_GET['id']) and $reg !== 1 and $str === 1){
        echo 'Flag';
    }else{
        echo "no flag";
    }
?>

在本地思考了略久,还是没有思路,决定问scanf基友。他过几分钟就把flag给我了。。。顿时尴尬。
按照他的说法传入一个数组。

*1

首先is_numeric($_GET['id']) == 0的,加个!就是==1了。成立

*2

$reg是来自正则的,然而我们刚刚传入的是数组所以会跳过正则,所以通俗说$reg==0了。$reg !== 1 成立了

*3

$str呢是刚刚数组传来的那个值,所以$str === 1成立。

所以就能得出flag了。
RNX]]%5IVCX5`24WJNX_1YJ.png

祝大家玩的开心 :)