欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

[CTF][Web][PHP][JavaScript]弱类型问题

发布时间:2023/12/10 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [CTF][Web][PHP][JavaScript]弱类型问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

弱类型问题

类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。

如果在用于密码比对,身份验证中没有对类型进行强处理,往往会导致对比成功,身份伪造等等。

常见的弱类型对比

数字型与其对应的字符串

  • 0 == ‘0’ => true

0 与 不包含任何数字字符串

  • 0 == ‘abc’ => true

数字型与其在前缀的字符串

  • 1 == ‘1abc’ => true

数学计算运算

  • ‘1e0’==‘1e2’ => true
  • “10” == “1e1” => true
  • ‘0e10’ == ‘0e1000’ => true
  • ‘0x001’==‘1’ => true
  • md5(‘s878926199a’) == 0 => true
  • 这里是 md5(‘s878926199a’) 的值是 0e 开头 。和上面第一种一样
  • 更多0e的哈希看这里 PHP处理0e开头md5哈希字符串缺陷/bug
QNKCDZO 0e830400451993494058024219903391s878926199a 0e545993274517709034328855841020s155964671a 0e342768416822451524974117254469s214587387a 0e848240448830537924465865611904
  • empty
    • empty(‘0’) == empty(‘0.0’) false
    • empty(‘0’) == empty(0.0) true
    • empty 返回 TRUE的情况:
      • 若变量不存在则返回 TRUE
      • 若变量存在且其值为""、0、“0”、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE


产生弱类型的函数

  • strcmp
  • In_array
  • array_search

JAVAScirpt 弱类型

数字型与其对应的字符串

  • 0 == ‘0’ => true

数学计算运算

  • ‘0e10’ == ‘0e1000’ => true
  • ’ 0x001’==‘1’ => true
  • 因为 ‘0e10’ == ‘0e1000’ => true 所以这里也存在MD5处理缺陷

空值

  • JAVAScript 只有 null undefine 两种

  • [],0,'0’之类均等于 null ,只有变量未赋值才是null或者undefined

  • null == undefine => true

  • ‘’ == null => false

  • {} ==[] => false 空数组和空对象也不相等

  • {} == function(){} =>false 空函数和空对象也不相等

NaN (Not a Number,非数) 表示未定义或者不可描述的数字 =。=

  • NaN == NaN => false

函数类

  • 这里只测试了 indexOf
    • [‘22’].indexOf(22) = -1 不存在
    • [‘0e11’].indexOf(0)= -1 不存在
    • [‘0e11’].indexOf(‘0e11’)= 0 存在
  • 可以看到 这里均用了强制类型 看来 JavaScript 比 PHP 稍微严格一点

参考链接:https://xz.aliyun.com/t/1927?spm=5176.12901015.0.i12901015.4745525cPZUxuS

参考链接:https://mp.weixin.qq.com/s/2ULQj2risPKzskX32WRMeg

总结

以上是生活随笔为你收集整理的[CTF][Web][PHP][JavaScript]弱类型问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。