zoukankan      html  css  js  c++  java
  • 弱类型语言

    什么是弱类型语言

    弱类型语言在定义变量时,对变量内容的类型没有明确定义,即在申明一个变量的时候,并不需要指明它保存的数据类型,如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可以查看上面的参考链接

  • 相关阅读:
    k8s--容器挂载 error: /proc must be mounted
    mysql--read only
    C#读取Excel文件(.xls .xlsx)
    如何使用BBCode
    markdown使用经验积累
    openlayers学习之-----入门篇
    echarts学习之----动态排序柱状图
    echarts学习之----多图例折线图
    Web3D学习之-----全景图预览插件photo-sphere-viewer
    vue报错解决----npm ERR!
  • 原文地址:https://www.cnblogs.com/labster/p/13258329.html
Copyright © 2011-2022 走看看