• 弱类型语言


    什么是弱类型语言

    弱类型语言在定义变量时,对变量内容的类型没有明确定义,即在申明一个变量的时候,并不需要指明它保存的数据类型,如VBPHP语言

    PHP弱类型实现的原理参考:php弱类型总结 作者:似水牛年

    Hacking Lab解密关7WP

    下面的例子均以php作为演示

    弱类型造成的影响

    类型未定义

    1. 如果该字符串没有包含’.',’e',’E'并且其数值值在整形的范围之内,该字符串被当作int来取值。其他所有情况下都被作为float来取值

    2. 该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

    3. 遇到了0e这种情况,php会把它解析成科学计数法,由于0的n次方为0,所以返回true

    4. 遇到了0x情况,php会解析成16进制

    <?php
    var_dump("abc" == 0); // bool(true)
    var_dump("1ab" == 1); // bool(true)
    var_dump("ab1" == 1); // bool(false)
    
    var_dump("0e12" == "0e32"); // bool(true)
    
    var_dump("0x1046a" == "66666");  //bool(true)
    ?>
    

    函数返回值相同

    md5(),如果两个MD5返回值为0e开头的字符串,就会触发弱类型,即两个值相等

    最经典的就是这两个字符串

    var_dump(md5('240610708') == md5('QNKCDZO')); //bool(true)
    // md5('240610708') = 0e462097431906509019562988736854
    // md5('QNKCDZO') = 0e830400451993494058024219903391
    

    数组绕过,MD5要求只能传入字符串,如果传入数组,就会返回NULL

    var_dump(),接收数组后也是会返回NULL

    所以这里可以利用 === ,进行绕过

    $array1 = [1,3,5];
    $array2 = [6,8,9];
    # 注意括号
    var_dump( md5($array1) === var_dump($array2) );  //bool(true)
    

    CTF题实例

    HackingLab解密关7

    原题md5

    真的能碰撞嘛?

    分值: 350

    md5真的能碰撞嘛?其实有时候我们不需要进行碰撞得到完全一致的MD5 通关地址

    WP可以查看上面的参考链接

  • 相关阅读:
    七 HBase表结构设计
    六 一行数据存储到文件的过程。
    五、数据模型特殊属性
    四 数据模型操作
    三、 数据模型概念
    二、 HBase核心功能模块。
    一、 Hbase特性 3v特性,Volume(量级) Varity(种类) Velocity(速度)
    windows下安装redis
    redis缓存穿透和缓存雪崩
    java多线程四种实现方法
  • 原文地址:https://www.cnblogs.com/labster/p/13258329.html
Copyright © 2020-2023  润新知