[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

 

posted @ 2020-02-15 14:24  笑花大王  阅读(2197)  评论(0编辑  收藏  举报