PHP-科学计数法

[题目信息]:

题目名称题目难度
PHP-科学计数法1

[题目考点]:

php处理字符串时存在一个缺陷问题,如果字符串为“1e1”,本该是一个正常的字符串,但是php会将它认为是科学计数法里面的e;也就是按照数学中的科学计数法。因此php会把这个字符串里面的1e1进行科学计数法计算,得出来就为“10”,即遇到“0e212”这些字符串直接看作为“0”.

[Flag格式]:

SangFor{of9SOHNE6-9F-6uAo7Hzyp2Ei-GyA0gT}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2024

[题目writeup]:

1、实验主页

2、源码分析

<?php
error_reporting(0);
include("flag.php");
if (isset($_GET['p1'])){
    if ($_GET['p1'] > 99999999 && strlen($_GET['p1']) < 9){
        if (isset ( $_GET ['p2'] )) {
                $p2 = $_GET ['p2'];
                if (is_numeric($p2)){
                    die('Input cannot be a number!!!');
                }
                else{
                    switch ($p2) {
                        case 0 :
                            break;
                        case 1 :
                            break;
                        case 2 :
                            echo $flag;
                            break;
                        default :
                            echo "2333333";
                            break;
                    }
                }
            }
    }
}
highlight_file(__FILE__);
?>

分析代码逻辑:

条件一:p1大于99999999,并且长度小于9.用科学计数法绕过,令p1等于1e8即可;

条件二:p2不能为数字,但要想输出flag又必须为2,这里可以利用is_numeric()函数的特性,当它判断123、‘123’、0x123、‘0x123’等均为ture ,只有像123abc这种混合类型时为false,并且switch/case 作的是松散比较,所以令p2为2aaaa即可绕过。

http://localhost/?p1=1e8&&p2=2aaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值