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

  • 相关阅读:
    vs编译出现 fatal error LNK1281:无法生成 SAFESEH 映像
    $apply()和$digest()——angular
    JS获取URL中参数值
    NeDB——node嵌入式数据库
    VS Code常用插件
    js断点调试
    VS Code 使用Git进行版本控制
    VS Code快捷键
    用户tokenId
    node-webkit-updater——NW.js自动更新
  • 原文地址:https://www.cnblogs.com/xhds/p/12312055.html
Copyright © 2011-2022 走看看