一题讲懂php弱类型

Exp1[SWPUCTF 2021 新生赛]easy_md5

if ($name != $password && md5($name) == md5($password)){
echo $flag;
}

确定是php语言,看关键句,这个语句的意思是前者不能等于后者,但两者的MD5的哈希码是相等的,确定是php弱类型。

php弱类型:

在PHP中,弱类型比较是指使用相等运算符(==)进行比较时,会进行弱类型转换。这意味着在进行比较之前,PHP会尝试将操作数转换为相同的类型,然后再进行比较。

特点:

1.(若字符型值开头为数字,转为数字;

若开头不为数字,为 null 弱比较与 0 相等。)

''abc123''==123 => false
''abc123''==0 => true
"123abc"==123 => true

2.布尔值true和任意字符串和数值比较

布尔值true和任意字符串和数值比较都弱相等,除了0和false,因为0也认为是bool false,true是不等于false的

var_dump(true=="hyuf") //true

var_dump(True == 0); //bool(false)

var_dump(True == 'False'); //bool(true)

var_dump(True == 2); //bool(true)

这个题主要在于要MD5的值相同,那就不能但用上面的来解决,必须用MD5值相同的

可以理解为MD5碰撞。

md5碰撞是运用了php弱类型比较的漏洞。比如:从变量得到两个值,两个变量的值不同,但最后md5加密过后的值相同。

栗子:

240610708
0e462097431906509019562988736854

aabg7XSs
0e087386482136013740957780965295

QNKCDZO
0e830400451993494058024219903391

第一种方法利用php的弱匹配
输入?name=240610708
然后发送数据password=NOOPCJF

第二种强类型:

往里面传数组

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值