CTF/php的弱类型总结(积累中)

来源:互联网 发布:php验证码源代码 编辑:程序博客网 时间:2024/06/17 14:29

0X00 "=="与"==="的区别

 在没有搞ctf之前,我也只是简单的知道,哦,“==”是判断数值是否相等,“===”则是判断数值和类型是否相等,其实不然,这并没有说到最核心的一个关键点,要知道“==”最可怕的一点是,如果类型不同的进行比较,其会将类型转换成相同的再进行比较,这也就是ctf一个常用的点

  下面举例说明,目前用到过的几点:

  

  "0e123456"=="0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0乘以10的无论多少次方都是零,所以相等

  当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内 

  该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0

  

0X01 bool类型的true跟任意字符串可以弱类型相等

  详情参考我的博客【天网管理系统】

  

0X02 php -v>5.3 strcmp比较漏洞

  注意官方文档:

Note a difference between 5.2 and 5.3 versionsecho (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.3Of course, you never need to use array as a parameter in string comparisions.
 5.3版本后返回0,即亦可以说是相等的意思:

<?php$pass = "xxxxxxxx"#$password = $_POST['password'];if(strcmp($password,$pass) == 0){echo "flag";}?>  
  上述这种题目,即可在传递数据的时候,将变量名加上[](sha1加密比较也有这个漏洞)

0X03 switch漏洞

  

道理等价"==",不做解释



原创粉丝点击