常见判断函数的绕过方法
常见函数判断的绕过方法
1、绕过md5判断绕过方法
一:利用php语言双等号特性和0E特性绕过(弱类型)
原理:
php的双等号判断相等特性和e科学计数法特性,对于字符串为0e开头的默认为0的次方值,
此时双等号两边无论是多少只要是以0e开头的字符串,其值都是0。
利用方法:
1、以下的字符串经过MD5加密都是以0e卡头
QNKCDZO
240610708
314282422
571579406
903251147
s878926199a
s155964671a
s214587387a
s214587387a
2、0e开头的字符串经过MD5加密后还是0e开头的字符串
原数据 MD5加密后的数据
0e215962017 0e291242476940776845150308577824
0e00275209979 0e551387587965716321018342879905
0e00506035745 0e224441551631909369101555335043
0e00540451811 0e057099852684304412663796608095
0e00678205148 0e934049274119262631743072394111
0e00741250258 0e899567782965109269932883593603
0e00928251504 0e148856674729228041723861799600
0e01350016114 0e769018222125751782256460324867
0e01352028862 0e38841915301050857572061606161
0e01392313004 0e79331410703922217518920037885
0e01875552079 0e780449305367629893512581736357
0e01975903983 0e317084484960342086618161584202
0e02042356163 0e335912055437180460060141819624
0e02218562930 0e151492820470888772364059321579
0e02451355147 0e866503534356013079241759641492
0e02739970294 0e894318228115677783240047043017
0e02760920150 0e413159393756646578537635311046
0e02784726287 0e433955189140949269100965859496
0e03298616350 0e851613188370453906408258609284
0e03393034171 0e077847024281996293485700020358
二:利用md5对数组无法加密特性(数据类型污染)
原理:
在php语言中md5()函数加密数组类型则返回为NULL值。
利用方法:
传参时参数名加上[]表示该参数为数组类型,如?a[]=1。
三:利用MD5算法本身特性,进行碰撞(碰撞)
即由于MD5算法的特性会有不同的数据经过MD5计算后有相同的结果
参考文章:https://blog.csdn.net/2401_87321780/article/details/155717926
2、intval()函数判断绕过
对于PHP5版本
intval()函数在5版本中会将0e开头的科学计数法作为字符串转数字处理,而不会视为科学计数法。但在加法运算中又会将0e作为科学计数法处理,加法运算后直接的结果为整型。
这样我们就可以实现:
<?php
var $a = '2e5';
eval(intval($a); #这里结果为2
eval(intval($a+1)); #这里结果为200001
3、数字判断绕过
对于每个语言底层都有精度问题,即数字不能无限小,超过小数点后一定位数就会在数值上直接作为零(但字符串比较时会更加精准)
<?php
var_dump( 1.0000000000000001 == 1); # 结果为False
var_dump( 1.0000000000000001 == 1); # 结果为Ture
var_dump( 1.0000000000000001 === 1);# 结果为False

浙公网安备 33010602011771号