南邮nctf-/x00(代码审计)

博客围绕一道代码审计题展开,题目要求输入nctf参数值,需绕过判断语句。提供两种解法,一是利用ereg()的%00截断漏洞,构造flag需进行一层url解码;二是利用ereg和strpos函数处理数组的特性,这两个函数处理数组时都返回NULL,从而绕过条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php

    if (isset ($_GET['nctf'])) {
        if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)
            echo '必须输入数字才行';
        else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)   
            die('Flag: '.$flag);
        else
            echo '骚年,继续努力吧啊~';
    }

本题是一道代码审计题。

这题目要求我们输入一个nctf的参数值,且这个参数值必须为 1.数字 2. #biubiubiu。即绕过判断语句。这里提供两种解法。


方法一:%00截断

这个是ereg() 的一个漏洞,类似于0x00截断,是因为这些函数遇到ASCII码为0的字符时,会自动默认到了结尾而停止。

注意:我们构造的flag是需要一层url解码的,#在url中是特殊字符,因此我们需要先将#编码为%23

payload:

http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf=1%00%23biubiubiu


方法二:利用ereg和strpos函数处理数组的特性

ereg函数处理数组时,直接返回NULL,而===又是强判断,NULL不等于FALSE,因此绕过第一个条件;
strpos函数也无法处理数组,直接返回NULL;

payload:

http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf[]=%23biubiubiu

这就是本题的两种解法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值