• [PHP安全特性学习]strcmp()函数安全漏洞


    简介

     PHP函数的安全特性-strcmp() 函数

    php-strcmp()函数

    PHP strcmp() 函数

    strcmp() 函数比较两个字符串。

    注释:strcmp() 函数是二进制安全的,且区分大小写。

    语法:

    strcmp(string1,string2)

    string1 必需。规定要比较的第一个字符串。

    string2 必需。规定要比较的第二个字符串。

    返回值:

    • 0 - 如果两个字符串相等
    • <0 - 如果 string1 小于 string2
    • >0 - 如果 string1 大于 string2

    测试代码1:

    <?php
    echo strcmp("Hello world!","Hello world!").'<br>'; // 两字符串相等  //0
    echo strcmp("Hello world!","Hello").'<br>'; // string1 大于 string2  //7
    echo strcmp("Hello world!","Hello world! Hello!"); // string1 小于 string2  //-7
    ?>

    结果:

     测试代码2:

     在PHP5.3之前,传入数据的类型是字符串类型,当传入的类型不是字符串类型 函数就会发生错误,显示报错信息后会return0 所以漏洞就出现在了这里 我们看一个案例

    要求get传进来的值要与$password变量里面的值相等因为用了strcmp函数所以他们俩的值相等才会返回0,0==0才能正常输出我们的flag!所以我们可以利用这个函数特性绕过它

    <?php
        $password="***************";
        if(isset($_GET['password'])){
            if(strcmp($_GET['password'],$password)==0){
                echo "flag{xxxxx-xxx-xxxx}";
            }else{
                echo "NO password ";
            }
        }
    
    ?>

    注意看这里我们构造password为一个数组数组传值为1,而strcmp要求我们传入字符串 strcmp函数判断不是字符串会报错,但是会return0 所以我们的目的达到了得到flag

     参考学习:https://www.runoob.com/php/func-string-strcmp.html

        https://www.php.net/manual/zh/function.strcmp.php

  • 相关阅读:
    关于keil编译cortexm3纯汇编时为什么问题使用align地址问题
    skyeye的安装过程与helloworld的执行
    vim写程序常用技巧
    ramdisk与 initrd、initramfs的关系
    BL指令实际做出的操作
    cortexm3中存储器的访问属性中的共享属性
    cortem3中的pc值的问题
    关于一个操作系统实现中bochs的安装
    2021,2,9 学习总结
    2021.2.14 学习总结
  • 原文地址:https://www.cnblogs.com/xhds/p/12312055.html
Copyright © 2020-2023  润新知