zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    爱普生L4168打印出来是白纸,复印OK,打印机测试也OK 解决方案
    json序列化对象
    "割裂"的西安
    资金投资心得
    【练内功,促成长】算法学习(3) 二分查找
    在ReactNative中实现Portal
    node创建GIT分支,并修改代码提交
    关于"三分钟热度"问题的思考
    参考vue-cli实现自己的命令行工具(demo)
    【练内功,促成长】算法学习(2) 排序算法
  • 原文地址:https://www.cnblogs.com/xhds/p/12312055.html
Copyright © 2011-2022 走看看