PHP strcmp函数漏洞

strcmp函数的返回值
strcmp.jpg

首先贴上官方文档的说明

Note a difference between 5.2 and 5.3 versions
echo (int)strcmp('pending',array());
will output -1 in PHP 5.2.16 (probably in all versions prior 5.3)
but will output 0 in PHP 5.3.3
Of course, you never need to use array as a parameter in string comparisions.

意思是:在php 5.2版本之前,利用strcmp函数将数组与字符串进行比较会返回-1,但是从5.3开始,会返回0

示例代码:

<?php
  error_reporting();
  $flag=$_GET['flag'];
  if(strcmp('Waldo_cuit',$flag)){
      echo 'NO!';
   }
  else{
      echo 'YES!';
  }
?>

当传入flag[]=1时,会导致0 = strcmp('Waldo_cuit',$flag),也就是flase = strcmp('Waldo_cuit',$flag),显示出 Yes!。大家可以自行测试一下~~~
在ctf里可以用这个漏洞绕过判断条件,这里附一道Bugku的题前女友

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容